子查詢(Subquery/嵌套查詢)是出現在另一個查詢 WHERE、HAVING、FROM 或 SELECT 列表中的 SELECT 陳述式。依回傳結果分類:
| 類型 | 回傳 | 常用運算子 | 典型用途 |
|---|---|---|---|
| 標量子查詢 | 單一值(1列1欄) | =, <>, >, <, >=, <= | 與單值比較、SELECT 列表運算 |
| 多值子查詢 | 單欄多列 | IN, NOT IN, ANY, ALL | 集合成員資格檢查 |
| 相關子查詢 | 視外部查詢每列重新評估 | EXISTS, NOT EXISTS, IN | 逐列關聯檢查、複雜篩選 |
SELECT target_expr FROM table1
WHERE expr (SELECT target_expr FROM table2 [WHERE ...])

EXISTS 遇符合即停止,適合大結果集;IN 需完整評估子查詢,適合小結果集且有索引支援。JOIN、APPLY (SQL 2005+) 或暫存表。OUTER APPLY 或預先 JOIN 聚合。NOT IN 永無匹配,改用 NOT EXISTS。子查詢表達力強、可讀性高,但效能陷阱多。理解三大類型差異、運算子語意與改寫策略,是 SQL 調優的核心能力之一。