使用 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)