熟練使用SQL Server中的各類用法會給查詢帶來不少方便。今天就介紹一下EXCEPT和INTERSECT。注意此語法僅在SQL Server 2005及以上版本支持。sql
EXCEPT是指在第一個集合中存在,可是不存在於第二個集合中的數據。測試
INTERSECT是指在兩個集合中都存在的數據。spa
測試以下:code
create table t1(id int,mark char(2)) go create table t2(id int,mark char(2)) go insert into t1 select 1,'t1' union all select 2,'t2' union all select 3,'t3' union all select 4,'t4' go insert into t2 select 2,'t2' union all select 3,'m3' union all select 5,'m5' union all select 6,'t6' go select * from t1 EXCEPT select * from t2 go select * from t1 INTERSECT select * from t2 go --EXCEPT結果集爲 --1 t1 --3 t3 --4 t4 --INTERSECT結果集爲 --2 t2
EXCEPT和INTERSECT的優先級:orm
爲了測試它們之間的優先級,運行下面的測試代碼:it
create table t3(int id,mark char(2)) go insert into t3 select 3,'t3' union all select 3,'r3' union all select 5,'m5' union all select 5,'r5' union all select 7,'b7' union all select 8,'b8' go select * from t1 EXCEPT select * from t2 INTERSECT select * from t3 --運行結果 --1 t1 --2 t2 --3 t3 --4 t4
爲何會出現如上結果呢,請看下面的執行計劃:io
原來t2和t3先進行的INTERSECT運算,得出5 m5結果集,再和t1進行EXCEPT運算。table