<比較運算子> {ALL | ANY | SOME} (子查詢)
CREATE TABLE t1 (n INT);
INSERT INTO t1 VALUES (2), (3);
CREATE TABLE t2 (n INT);
INSERT INTO t2 VALUES (1), (2), (3), (4);
| 查詢 | 結果 | 邏輯解釋 |
|---|---|---|
SELECT * FROM t2 WHERE n > ALL (SELECT n FROM t1) | 4 | 大於 t1 最大值 (3) |
SELECT * FROM t2 WHERE n > ANY (SELECT n FROM t1) | 3, 4 | 大於 t1 最小值 (2) |
SELECT * FROM t2 WHERE n = ALL (SELECT n FROM t1) | (空) | 同時等於 2 和 3 不可能 |
SELECT * FROM t2 WHERE n = ANY (SELECT n FROM t1) | 2, 3 | 等同 IN |
SELECT * FROM t2 WHERE n < ALL (SELECT n FROM t1) | 1 | 小於 t1 最小值 (2) |
SELECT * FROM t2 WHERE n < ANY (SELECT n FROM t1) | 1, 2 | 小於 t1 最大值 (3) |
SELECT * FROM t2 WHERE n <> ALL (SELECT n FROM t1) | 1, 4 | 不等於 t1 任何值,等同 NOT IN |
SELECT * FROM t2 WHERE n <> ANY (SELECT n FROM t1) | 1, 2, 3, 4 | 永真 (任一不等即真) |
若子查詢結果集包含 NULL:
ALL 比較**直接回傳空結果** (因 UNKNOWN 導致)ANY 不受此影響-- 兩句邏輯相似但 NULL 處理截然不同
SELECT * FROM t2 a WHERE NOT EXISTS (SELECT 1 FROM t1 WHERE n >= a.n);
SELECT * FROM t2 WHERE n > ALL (SELECT n FROM t1); -- t1 有 NULL 時無結果
EXISTS/IN 更語意化