Share via


使用 EXCEPT 和 INTERSECT 執行半聯結

如果在第二個輸入中有至少一個相符的資料列,半聯結會從第一個輸入中傳回資料列。如果在第二個輸入中沒有任何相符的資料列,反聯結會傳回第一個輸入中的資料列。您使用 EXCEPT 與 INTERSECT 運算子來執行半聯結與反聯結。這些運算子讓您能夠比較二或多個 SELECT 陳述式的結果並傳回相異值。EXCEPT 運算子會傳回 EXCEPT 運算子左邊查詢結果有、但右邊查詢結果沒有的任何相異值。INTERSECT 則會傳回 INTERSECT 運算子左右兩邊查詢結果都有的任何相異值。使用 EXCEPT 或 INTERSECT 比較的結果集必須具有相同的結構。它們必須擁有相同的資料行個數,而對應的結果集資料行也必須擁有相容的資料類型。如需詳細資訊,請參閱<EXCEPT 和 INTERSECT (Transact-SQL)>。

考慮資料表 TableATableBTableC,在各自的 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)