sql中exists,Intersect ,union 与union All的用法
熟练使用SQL Server中的各种用法会给查询带来很多方便。今天就介绍一下EXCEPT和INTERSECT。注意此语法仅在SQL Server 2005及以上版本支持。
EXCEPT是指在第一个集合中存在,但是不存在于第二个集合中的数据。
就是两个集中不重复的部分。例如
SELECT * FROM
A
EXCEPT
SELECT * FROM B
这个的意思是,凡是不出现在B表中的A表的行
INTERSECT是指在两个集合中都存在的数据。
就是两个集中共同的部分。例如
SELECT * FROM
A
INTERSECT
SELECT * FROM B
这个的意思是,同时出现在A和B中的记录
测试如下:
- 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
union 与union All的区别
--并集UNION
--UNION与UNION ALL的区别是: union会删除重复值,也就是说A和B中重复的行,最终只会出现一次,而union all则会保留重复行。
SELECT * FROM t1
UNION
SELECT * FROM t2
SELECT * FROM t1
UNION all
SELECT * FROM t2