SQL Server 中关于EXCEPT和INTERSECT的用法

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

  

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

ExceptIntersect

 

原来t2和t3先进行的INTERSECT运算,得出5 m5结果集,再和t1进行EXCEPT运算。

 

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

 

posted on 2012-10-31 17:25  dz45693  阅读(7276)  评论(0编辑  收藏  举报

导航