SQL中Union,Intersect,Except
SQL中Union,Intersect,Except一、SQL中Union、Intersect、Except的含义
1、Except返回两个结果集的差(即从左查询中返回右查询没有找到的所有非重复值)。
2、Intersect返回 两个结果集的交集(即两个查询都返回的所有非重复值)。
3、union返回两个结果集的并集。
二、限制条件
(1)所有查询中的列数和列的顺序必须相同。
(2)比较的两个查询结果集中的列数据类型可以不同但必须兼容。
(3)比较的两个查询结果集中不能包含不可比较的数据类型(xml、text、ntext、image 或非二进制 CLR 用户定义类型)的列。
(4)返回的结果集的列名与操作数左侧的查询返回的列名相同。ORDER BY 子句中的列名或别名必须引用左侧查询返回的列名。
(5)不能与 COMPUTE 和 COMPUTE BY 子句一起使用。
(6)通过比较行来确定非重复值时,两个 NULL 值被视为相等。(EXCEPT 或 INTERSECT 返回的结果集中的任何列的为空性与操作数左侧的查询返回的对应列的为空性相同)
三、SQL中Union、Intersect、Except实例
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运算。