SQL Server 2005 引入 ANSI SQL 標準集合運算子 EXCEPT 與 INTERSECT,用於比較兩個結果集:
| 運算子 | 回傳結果 |
|---|---|
EXCEPT | 左側查詢有、右側查詢無的非重複列 (差集)。 |
INTERSECT | 左右兩側查詢都有的非重複列 (交集)。 |
INTERSECT 優先序高於 EXCEPT;混用時需加括號明確順序。SELECT INTO 必須為第一個查詢。ORDER BY 僅能參考左側查詢欄位名/別名。CREATE TABLE TableA (col1 INT);
INSERT INTO TableA VALUES (1),(1),(2),(3),(4),(4),(5),(NULL),(NULL);
CREATE TABLE TableB (col2 INT);
INSERT INTO TableB VALUES (NULL),(1),(2),(3);
CREATE TABLE TableC (col3 INT);
INSERT INTO TableC VALUES (1),(5),(6);
-- EXCEPT: A 有但 B 沒有
SELECT col1 FROM TableA EXCEPT SELECT col2 FROM TableB;
-- 結果: 4, 5 (NULL 被視為相等而排除)
-- INTERSECT: A 與 B 都有
SELECT col1 FROM TableA INTERSECT SELECT col2 FROM TableB;
-- 結果: 1, 2, 3, NULL
-- 結合: (A EXCEPT B) INTERSECT C
SELECT col1 FROM TableA EXCEPT SELECT col2 FROM TableB
INTERSECT SELECT col3 FROM TableC;
-- 結果: 5