熟練使用SQL Server中的各種用法會給查詢帶來很多方便。今天就介紹一下EXCEPT和INTERSECT。注意此文法僅在SQL Server 2005及以上版本支援。
EXCEPT是指在第一個集合中存在,但是不存在於第二個集合中的資料。
INTERSECT是指在兩個集合中都存在的資料。
測試如下:
create table t1(id int,mark char(2))<br />go<br />create table t2(id int,mark char(2))<br />go<br />insert into t1<br />select 1,'t1' union all<br />select 2,'t2' union all<br />select 3,'t3' union all<br />select 4,'t4'<br />go<br />insert into t2<br />select 2,'t2' union all<br />select 3,'m3' union all<br />select 5,'m5' union all<br />select 6,'t6'<br />go<br />select * from t1<br />EXCEPT<br />select * from t2<br />go<br />select * from t1<br />INTERSECT<br />select * from t2<br />go</p><p>--EXCEPT結果集為<br />--1t1<br />--3t3<br />--4t4</p><p>--INTERSECT結果集為<br />--2t2
EXCEPT和INTERSECT的優先順序:
為了測試它們之間的優先順序,運行下面的測試代碼:
create table t3(int id,mark char(2))<br />go<br />insert into t3<br />select 3,'t3' union all<br />select 3,'r3' union all<br />select 5,'m5' union all<br />select 5,'r5' union all<br />select 7,'b7' union all<br />select 8,'b8'<br />go<br />select * from t1<br />EXCEPT<br />select * from t2<br />INTERSECT<br />select * from t3</p><p>--運行結果<br />--1t1<br />--2t2<br />--3t3<br />--4t4<br />
為什麼會出現如上結果呢,請看下面的執行計畫:
原來t2和t3先進行的INTERSECT運算,得出5 m5結果集,再和t1進行EXCEPT運算。
如需轉載,請註明本文原創自CSDN TJVictor專欄:http://blog.csdn.net/tjvictor