SQL Server 有关EXCEPT和INTERSECT使用

时间:2023-12-21 19:07:50

熟练使用SQL Server各种使用会带来多大的方便查询。今天介绍EXCEPT和INTERSECT。请注意,这只是语法SQL Server 2005和以上版本支持。

EXCEPT它指的是存在于所述第一组。但它不存在于所述第二组数据的。

INTERSECT是指在两个集合中都存在的数据。

測试例如以下:

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的优先级:

为了測试它们之间的优先级,执行以下的測试代码:

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

为什么会出现如上结果呢,请看以下的运行计划:

SQL Server 有关EXCEPT和INTERSECT使用

原来t2和t3先进行的INTERSECT手术,获得5 m5结果集,一次t1进行EXCEPT手术。

如需转载,请注明来自原来的文章CSDN TJVictor专栏:http://blog.csdn.net/tjvictor