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)

請參閱

概念

使用 UNION、EXCEPT 和 INTERSECT 搭配其他 Transact-SQL 陳述式

說明及資訊

取得 SQL Server 2005 協助