使用 EXCEPT 和 INTERSECT 執行半聯結
EXCEPT 和 INTERSECT 運算子可讓您比較二或多個 SELECT 陳述式的結果,並且傳回相異的值。EXCEPT 運算子會傳回 EXCEPT 運算子左邊查詢結果有、但右邊查詢結果沒有的任何相異值。INTERSECT 則會傳回 INTERSECT 運算子左右兩邊查詢結果都有的任何相異值。使用 EXCEPT 或 INTERSECT 比較的結果集必須具有相同的結構。它們必須擁有相同的資料行個數,而對應的結果集資料行也必須擁有相容的資料類型。如需詳細資訊,請參閱<EXCEPT 和 INTERSECT (Transact-SQL)>。
考慮資料表 TableA、TableB 和 TableC,在各自的 int 整數類型 col1 資料行中有下列資料。
TableA (col1 int) | TableB (col1 int) | TableC (col1 int) |
---|---|---|
NULL |
NULL |
2 |
NULL |
1 |
2 |
NULL |
3 |
2 |
1 |
4 |
4 |
2 |
4 |
4 |
2 |
||
2 |
||
3 |
||
4 |
||
4 |
使用 EXCEPT,下列查詢會傳回 EXCEPT 運算元左邊查詢結果有、但右邊查詢沒有的任何相異值。
SELECT * FROM TableA EXCEPT SELECT * FROM TableB
結果是:
Col1
-----------
2
(1 row(s) affected)
使用 INTERSECT 則會傳回 INTERSECT 運算子左右兩邊查詢結果都有的任何相異值。
SELECT * FROM TableA INTERSECT SELECT * FROM TableB
結果是:
Col1
-----------
NULL
1
3
4
(4 row(s) affected)
INTERSECT 運算子的優先順序高過 EXCEPT。例如,下列查詢使用兩個運算子:
SELECT * FROM TableA EXCEPT SELECT * FROM TableB INTERSECT SELECT * FROM TableC
結果是:
Col1
-----------
NULL
1
2
3
(4 row(s) affected)
請參閱
概念
使用 UNION、EXCEPT 和 INTERSECT 搭配其他 Transact-SQL 陳述式