前言
1. 將一個查詢塊嵌套在另一個查詢塊的where子句或having短語的條件中的查詢稱為嵌套查詢
2. 上層的查詢塊叫外層查詢或父查詢或主查詢,下層查詢塊又稱為內層查詢或子查詢,sql語句允許多層嵌套查詢!
3. 子查詢的select語句不能使用order by子句,order by子句永遠只能對最終(或外)查詢結果排序
4. 嵌套查詢的求解方法是由里向外處理
帶有in謂詞的子查詢
1.查詢與“王林”同一個系學習的學生的所有信息
一般的查詢方法:
步驟一:確定“王林”所在系名
select dept from dbo.s where sn='王林'
步驟二:查找所有計算機系的學生
select *from dbo.s where dept='計算機'
2.分步寫比較麻煩,使用嵌套查詢:
select *from dbo.s where dept in(select dept from dbo.s where sn='王林')
3查詢選修了課程名為“數據庫”的學生學號和姓名
select * from dbo.s where sno in (select sno from dbo.sc where cno in (select cno from dbo.c where cn='c語言'))
帶有比較運算符的子查詢
1.帶有比較運算符的子查詢是指父查詢與子查詢之間用比較運算符進行連接。
常用的比較運算符:>、<、=、>=、<=、!=、
2.一個學生只能在一個系學習,所以內查詢王林所在系的結果是唯一值
3.查詢與“王林”同一個系學習的學生的所有信息(sql)
select *from dbo.s where dept =(select dept from dbo.s where sn='王林')
帶有any 或all謂詞的子查詢
1. 子查詢返回單值時可以用比較運算符,返回多值時必須結合使用any或all謂詞。使用any或all謂詞時必須同時使用比較運算符。
2.
>any |
大於子查詢結果中的某個值 |
<any |
小於子查詢結果中的某個值 |
>=any |
大於等於子查詢結果中的某個值 |
<=any |
小於等於子查詢結果中的某個值 |
=any |
等於子查詢結果中的某個值 |
!=any或<>any |
不等於子查詢結果中的某個值 |
>all |
大於子查詢結果中的所有值 |
<all |
小於子查詢結果中的所有值 |
>=all |
大於等於子查詢結果中的所有值 |
<=all |
小於等於子查詢結果中的所有值 |
=all |
等於子查詢結果中的所有值 |
!=all或<>all |
不等於子查詢結果中的任何一個值 |
3.查詢其他系中比信息系所有學生年齡小的學生名單(升序)
select *from dbo.s where age<all(select age from dbo.s where dept='信息') and dept !='信息' order by age asc
或集函數處理:
select *from dbo.s where age<(select min(age) from dbo.s where dept='信息') and dept !='信息' order by age asc
數據庫表s,c,sc截圖請到:http://www.cnblogs.com/fuge/archive/2012/03/16/2400913.html