scalar_expression { = | <> | != | > | >= | < | <= } { ALL | SOME | ANY } (subquery)
假設 t1(n) = {2,3},t2(n) = {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 | 等於 2 或 3(相當於 IN) |
SELECT * FROM t2 WHERE n <> ALL (SELECT n FROM t1) | 1,4 | 不等於 2 且不等於 3(相當於 NOT IN) |
SELECT * FROM t2 WHERE n <> ANY (SELECT n FROM t1) | 1,2,3,4 | 不等於 2 或不等於 3,永真 |
value > NULL 為 UNKNOWN。-- 1. NOT EXISTS:忽略子查詢 NULL,外層 NULL 會被選出
SELECT * FROM t2 a WHERE NOT EXISTS (SELECT 1 FROM t1 WHERE n >= a.n);
-- 2. > ALL:子查詢有 NULL 即全無結果,外層 NULL 也被排除
SELECT * FROM t2 WHERE n > ALL (SELECT n FROM t1);
兩者邏輯相似,但 NULL 處理截然不同,務必根據業務語意選擇。
SQL Server 2000 即支援,符合 ANSI SQL-92 標準,可移植至其他關聯式資料庫。