熟练使用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运算。
union 与union All的区别
--并集UNION
--UNION与UNION ALL的区别是,前者会去除重复的条目,后者会仍旧保留。
SELECT * FROM t1
UNION
SELECT * FROM t2
SELECT * FROM t1
UNION all
SELECT * FROM t2

sql中exists,Intersect ,union 与union All的用法
原文:http://www.cnblogs.com/panmy/p/5152989.html