SQLServer--數據查詢--子查詢語法

——————————子查詢—————————————-

———–將查詢的結果作爲子表,連表查詢
select * from StuInfo s1,(select * from StuMarks where Score >80)s2 where s1.StuID=s2.StuID AND s1.StuName=’李四’

———–將查詢結果作爲條件使用
select * from StuInfo WHERE StuID>(select StuID from StuInfo where StuName=’王五’)
———–將子查詢作爲臨時表使用
select s1.,s2 Score from StuInfo s1 left outer join (select from StuMarks where Subject=’HTML’) s2 on s1.StuID=s2.StuID
———–將子查詢作爲列使用 (不建議使用)
select s1.*,(select Score from StuMarks s2 where s1.StuID=s1.StuID and subject=’html’) Score from StuInfo s1
———–使用in 和not in 完成子查詢
select StuName from StuInfo where StuID In (select StuID from StuMarks where Score >85 and Subject=’java’)
———–使用exist 或not exist 完成子查詢
select * from StuInfo where exists (select * from StuMarks where StuMarks.StuID=StuInfo.StuID)
———–使用some 、any、 all進行子查詢
——————–聚合函數—————————————————–
—————使用compute 和compute by進行彙總
———————-排序函數
—————排序函數over([分組子句]排序子句[desc][asc])
—————排序子句order by 排序列,排序列…….
—————分組排序 partition by 分組列,分組列

————————row__number()函數
select row_number() over (order by Score DESC) AS 排名
s1.StuName,s2.Score from StuInfo s1,StuMarks s2 where s1.StuID=s2.StuID and s2.Subject=’Java’

————————rank函數
select rank() over (order by Score DESC) AS 排名
s1.StuName,s2.Score from StuInfo s1,StuMarks s2 where s1.StuID=s2.StuID and s2.Subject=’Java’

————————DENSE_RANK()函數
select dense_rank() over (order by Score DESC) AS 排名
s1.StuName,s2.Score from StuInfo s1,StuMarks s2 where s1.StuID=s2.StuID and s2.Subject=’Java’
————————-使用partition by 分組子句
select dense_rank() over (partition by s2.Subject order by Score DESC) AS 排名
s1.StuName,s2.Subject,s2.Score from StuInfo s1,StuMarks s2 where s1.StuID=s2.StuID
————————-公用表達式
————–CTE的基本用法
WITH expression_name[(column_name[,…n])]
as
(CTE_query_definition)

with StuInfo_Mark (StuID,StuName,Subject,Score)
as
(
select s1.StuID,s1.StuName,s2.Subject,
s2.Score from StuInfo s1,StuMarks s2
where s1.StuID=s2.StuID
)
select * from StuInfo_Mark
go
———————-2016.8.15

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章