古詩詞大全網 - 成語大全 - 壹文講懂SQL子查詢

壹文講懂SQL子查詢

大家好,我是寧壹。

今天講解SQL教程第18課:子查詢。

SQL語句可以嵌套,最常見的就是查詢語句的嵌套。

基本語法:

我們壹般稱外面嵌套的語句為主查詢,裏面被嵌套的語句為子查詢,有時也會叫外查詢、內查詢,大家知道意思就好。

子查詢要用括號括起來。子查詢不僅可以放在WHERE的後面,還可以放在SELECT、FROM的後面,我們壹個個來講解。

1、子查詢+WHERE子句

SQL執行時,會先執行括號內的子查詢,子查詢最常與WHERE子句結合使用。子查詢的結果作為WHERE子句的篩選條件,完成更復雜的數據檢索。

實例: 在Students表中,找出所有在"寧壹"後面出生的學生。

實例解析: 需要先確定"寧壹"的生日,再將生日作為WHERE篩選條件,得到最終數據。

第壹步:找到"寧壹"的生日

第二步:將生日作為WHERE篩選條件,得到最終數據,子查詢語句要用括號括起來。

SELECT語句的子查詢經常與聚合函數結合使用。因為我們使用聚合函數的時候,記錄會合成壹條,其它數據細節就不能顯示了。

比如: 我們想要查看學生表中所有的學生姓名、學生生日、學生的最大生日。

示例結果:

錯誤寫法:

像上面這樣寫是會報錯的,因為聚合函數與其他表中的列(Sname,Sage),同時放在SELECT的後面。需要用GROUP BY語句將這些表中的列(Sname,Sage)分組。

上面的語句後面加上 GROUP BY Sname,Sage 就可以了。

但是這樣寫,會將每組的數據聚合成1條數據,比如每組有3條數據,使用聚合函數MAX()+GROUP BY,最終每組只會顯示1條最大值的數據。

我們需要展現Students表中所有的學生,這樣寫不能滿足我們的需求。

正確寫法: 結合子查詢來實現。

子查詢與FROM子句結合使用,子查詢結果被當成了壹個“表”,可以用SELECT語句做進壹步的篩查。

比如:我們先寫壹個SELECT查詢語句

將上面的查詢語句放在FROM的後面,則上面查詢到的結果,就會被當成壹個“表”。

這裏有壹個特別要註意的地方,放在FROM後面的子查詢,必須要加別名。

復雜的子查詢再嵌套進 FROM 裏會讓整個查詢看起來過於復雜,我們壹般會將子查詢結果儲存為視圖,然後再直接使用視圖作為來源表,視圖會SQL高階課程中詳細講解。

其實子查詢就是查詢語句嵌套,沒有什麽新的東西,只是多了壹個層級,由內向外地壹層層梳理就會很清楚了。

作業: 結合Students表,從Teachers表中找出當班主任的老師(通過子查詢實現)。

作業解析: 先從Students表中,找出所有班主任的Tid並去重,將查詢結果作為篩選條件,放在WHERE語句中。