嵌套查詢 帶有in謂詞,比較運算符,any或all謂詞的子查詢

前言

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截圖請到截圖地址


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