EXCEPT 返回兩個結果集的差(即從左查詢中返回右查詢沒有找到的所有非重復值)。
INTERSECT 返回 兩個結果集的交集(即兩個查詢都返回的所有非重復值)。
UNION返回兩個結果集的並集。
語法:
{ ( <sql-查詢語句1> ) }
{ EXCEPT | INTERSECT }
{ ( <sql-查詢語句2> )}
限制條件
- (1)所有查詢中的列數和列的順序必須相同。
- (2)比較的兩個查詢結果集中的列數據類型可以不同但必須兼容。
- (3)比較的兩個查詢結果集中不能包含不可比較的數據類型(xml、text、ntext、image 或非二進制 CLR 用戶定義類型)的列。
- (4)返回的結果集的列名與操作數左側的查詢返回的列名相同。ORDER BY 子句中的列名或別名必須引用左側查詢返回的列名。
- (5)不能與 COMPUTE 和 COMPUTE BY 子句一起使用。
- (6)通過比較行來確定非重復值時,兩個 NULL 值被視為相等。(EXCEPT 或 INTERSECT 返回的結果集中的任何列的為空性與操作數左側的查詢返回的對應列的為空性相同。)
與表達式中的其他運算符一起使用時的執行順序
- 1、括號中的表達式
- 2、INTERSECT 操作數
- 3、基於在表達式中的位置從左到右求值的 EXCEPT 和 UNION
如果 EXCEPT 或 INTERSECT 用於比較兩個以上的查詢集,則數據類型轉換是通過一次比較兩個查詢來確定的,並遵循前面提到的表達式求值規則。
舉例:
tableA tableB
NULL | NULL |
NULL | 2 |
1 | 3 |
1 | 4 |
2 | 5 |
3 | 5 |
4 | |
5 |
A:(SELECT * FROM TableA) EXCEPT (SELECT * FROM TableB)
結果: 1
(1 row(s) affected)
B: SELECT * FROM TableA INTERSECT SELECT * FROM TableB
結果:2
3
4
5
(4 row(s) affected)