在SQL語言中,一個select-from-where語句稱為一個查詢塊。將一個查詢塊嵌套在另一個查詢塊的where子句或having短語的條件中的查詢稱為嵌套查詢
例如:
select Sname /*外層查詢或父查詢*/
from Student
where Sno in
(select Sno
from SC /*內層查詢或子查詢*/
where Cno=‘2’);
說明: 1.子查詢的select語句中不能使用order by子句,order by子句只能對最終查詢結果排序。
2.嵌套查詢使用戶可以用多個簡單查詢構成復雜的查詢,從而增強SQL的查詢能力。以層層嵌套的方式來構造程序正是SQL中的‘結構化’的涵義所在。
1.帶有IN的子查詢
例如:查詢與劉晨在同一個系的學生
① 確定劉晨所在的系名
select Sdept from Student where Sname=‘劉晨’;
結果為CS
② 查找所在CS系學習的學生
select Sno,Sname,Sdept /*建議每個列名都加上表名*/
from Student
where Sdept=‘CS’
將第一步查詢嵌入到第二步查詢條件中,構成嵌套查詢如下:
select Student.Sno,Student.Sname,Student.Sdept
from Student
where Sdept in
(select Sdept
from Student
where Sname=‘劉晨’);
子查詢的查詢條件不依賴父查詢,稱為不相關子查詢。