SQL Server 中關於EXCEPT和INTERSECT的用法

熟練使用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

ExceptIntersect

 

原來t2和t3先進行的INTERSECT運算,得出5 m5結果集,再和t1進行EXCEPT運算。table

相關文章
相關標籤/搜索