Union
AUB的关系,当两个表数据集相同时,只保留一个
---UNION
VALUES ('A'), ('A'), ('B'), ('B'), ('C')
UNION
VALUES ('A'), ('B'), ('B'), ('D'), ('E')
---结果:
A
B
C
D
E
Union All
当遇到两者相同时,全部保留
---UNION ALL
VALUES ('A'), ('A'), ('B'), ('B'), ('C')
UNION ALL
VALUES ('A'), ('B'), ('B'), ('D'), ('E')
---结果:
A
B
B
D
E
A
A
B
B
C
Intersect
A或B的关系,查寻两个数据集里都包含的
---INTERSECT
VALUES ('A'), ('A'), ('B'), ('B'), ('C')
INTERSECT
VALUES ('A'), ('B'), ('B'), ('D'), ('E')
---结果:
A
B
---INTERSECT ALL
VALUES ('A'), ('A'), ('B'), ('B'), ('C')
INTERSECT ALL
VALUES ('A'), ('B'), ('B'), ('D'), ('E')
---结果:
A
B
B
Except
第一个表中有而第二个表中没有的数据
---EXCEPT
VALUES ('A'), ('A'), ('B'), ('B'), ('C')
EXCEPT
VALUES ('A'), ('B'), ('B'), ('D'), ('E')
---结果:
C
Except ALL
两个表中都不重复的
--EXCEPT ALL
VALUES ('A'), ('A'), ('B'), ('B'), ('C')
EXCEPT ALL
VALUES ('A'), ('B'), ('B'), ('D'), ('E')
---结果:
A
C
大家对比一下它们之间的结果就可以看出它们之间的区别,不过有两个问题需要注意:
1、UNION 和 INTERSECT 两别集合可以互换的,但是EXCEPT 互换将有不同的结果,如下:
[c-sharp]view plaincopyprint?
---语句1
VALUES ('A'), ('A'), ('B'), ('B'), ('C')
EXCEPT
VALUES ('A'), ('B'), ('B'), ('D'), ('E')
---结果:
C
---语句2
VALUES ('A'), ('B'), ('B'), ('D'), ('E')
EXCEPT
VALUES ('A'), ('A'), ('B'), ('B'), ('C')
---结果:
D
E