SELECT 語句中可嵌入另一個 SELECT,稱為嵌套查詢或子查詢。子查詢結果作為父查詢條件。支持多層嵌套,可操作父查詢未涉及的表,但子查詢中不能有 ORDER BY。
SELECT emp.empno, emp.ename, emp.job, emp.sal
FROM scott.emp
WHERE sal >= (SELECT sal FROM scott.emp WHERE ename='WARD');
等價兩步:
1. 子查詢得 sal=1250
2. 父查詢 WHERE sal >= 1250
SELECT ... FROM scott.emp
WHERE sal IN (SELECT sal FROM scott.emp WHERE ename='WARD');
查詢薪資等於 WARD 的員工。亦可用 NOT IN。
SELECT ... FROM scott.emp
WHERE sal > ANY (SELECT sal FROM scott.emp WHERE job='MANAGER');
等價:
1. 子查詢得 3 個經理薪資:2975、2850、2450
2. 父查詢 sal > 2975 OR sal > 2850 OR sal > 2450
SELECT ... FROM scott.emp
WHERE sal = SOME (SELECT sal FROM scott.emp WHERE job='MANAGER');
SOME 與 ANY 同義,邏輯同上。
掌握這四類嵌套模式,靈活應對複雜條件查詢。