36 集合

36.1 集合的定义

集合是由一个和多个元素构成的整体,在SQL Server中的表就代表着事实集合,而其中的查询就是在集合的基础上生成的结果集。SQL Server的集合包括交集(INTERSECT)、并集(UNION)、差集(EXCEPT)。

 

36.2 交集INTERSECT

可以对两个或者多个结果集进行连接,形成“交集”。返回左边结果集和右边结果集中都有的记录,且结果不重复(这也是集合的主要特性)。

交集限制条件:

(1)子结果集要具有相同的结构。

(2)子结果集的列数必须相同。

(3)子结果集对应的数据类型必须可以兼容。

(4)每个子结果集不能包含order by和compute子句。

交集示例:

用以下两个表中的数据作为示例,

 

 取以上两个表的交集,可以这样写SQL:

SELECT * FROM City1
INTERSECT
SELECT * FROM City2

这和内连接(INNER JOIN)有点类似,以上SQL也可以这样写:

SELECT c1.* FROM City1 c1
INNER JOIN City2 c2
ON c1.Cno=c2.Cno AND c1.Name=c2.Name;

结果与上面结果相同。

 

36.3 并集UNION

可以对两个或多个结果集进行连接,形成“并集”。子结果集所有的记录组合在一起形成新的结果集。其中使用UNION可以得到不重复(去重)的结果集,使用UNION ALL可能会得到重复(不去重)的结果集。

并集限制条件:

(1)子结果集要具有相同的结构。

(2)子结果集的列数必须相同。

(3)子结果集对应的数据类型必须可以兼容。

(4)每个结果集不能包含order by和compute子句。

UNION示例:

以上面的City1和City2为例,取两个表的并集,可以这样写SQL:

SELECT * FROM City1
UNION
SELECT * FROM City2;

使用UNION ALL,

SELECT * FROM City1
UNION ALL
SELECT * FROM City2;

与上面的UNION相比,UNION ALL仅仅是对两个表作了拼接而已。UNION还会对结果进行排序,而UNION ALL不会。

 

36.4 差集EXCEPT

可以对两个或多个结果集进行连接,形成“差集”,返回左边结果集合中已经有的记录,而右边结果集中没有的记录。

差集限制条件:

(1)子结果集要具有相同的结构。

(2)子结果集的列数必须相同。

(3)子结果集对应的数据类型必须可以兼容。

(4)每个子结果集不能包含order by和compute子句。

差集示例:

以City1和City2为例,想取City1(左表)和City2(右表)的差集,可以这样写SQL:

SELECT * FROM City1
EXCEPT
SELECT * FROM City2;

此外,常说的关联条件其实也是集合的一种,是通过子表的笛卡尔积按不同的关联条件过滤之后得到的结果集。

 

36.5 批注

集合是数据处理过程中的理论基础,可以通过集合的观点去很好的理解不同的查询语句。每一个物理表就是一个集合,当要对表进行操作的时候,将它们看成对集合的操作就很好理解了。

posted @ 2021-07-15 18:09  赵Gary  阅读(52)  评论(0)    收藏  举报