子查詢讓你在單一陳述式中合併多個查詢,將比較邏輯下推至資料庫層,減少應用程式資料搬運。
常見應用模式
- IN / NOT IN:從另一結果集包含/排除值。
例:找出 Metallica 歌曲中歌詞含「justice」的歌名,或不含的歌名。
- EXISTS / NOT EXISTS:檢查相關資料是否存在。
例:比對 Album 與 Cover 表,找出兩者同名歌曲。
- 彙總函數比較:在 WHERE 子查詢中使用
COUNT(*) 等。
例:驗證專輯曲目數與實際歌曲筆數是否一致。
- 回傳子查詢結果:將標量子查詢作為 SELECT 列表欄位。
例:報表顯示每張專輯「應有曲目」與「實際曲目」對照。
- UPDATE 搭配子查詢:依子查詢結果更新欄位。
例:將專輯資訊表的曲目數更新為實際歌曲數。
比較關鍵字:ALL、SOME、ANY
ALL:子查詢所有值皆符合條件才為真。
SOME/ANY:子查詢至少一值符合即為真。
= ANY 等同 IN,<> ALL 等同 NOT IN。
廠商支援度不同,遇問題請查閱文件。