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
为什么会出现如上结果呢,请看下面的执行计划:
原来t2和t3先进行的INTERSECT运算,得出5 m5结果集,再和t1进行EXCEPT运算。
如需转载,请注明本文原创自CSDN TJVictor专栏:http://blog.csdn.net/tjvictor