在集合论中,两个集合(集合A和集合B)的并集是一个包含集合A和B中所有元素的集合。换句话说,如果一个元素属于任何一个输入集合,那么它也属于结果集。如图所示。

 

  对于集合运算,需要注意以下几点:

  1. 参与集合运算的两个查询生成的结果集必须包含相同的列数,并且相应列必须具有兼容的数据类型。
  2. 集合运算结果中的列名由第一个查询决定,因此,如果要为结果列分配别名,应该在第一个查询中分配相应的别名。
  3. 集合运算对行进行比较时,认为两个NULL值相等。

UNION集合运算分为UNION ALL和UNION DISTINCT两种情形,它们的区别是UNION ALL会保留重复行,而UNION DISTINCT会删除重复行。下面用例子来说明。

UNION ALL

UNION ALL合并两个集合,并保留重复行。关于UNION ALL需要注意以下几点:

  1. UNION ALL实际上不会对行进行比较,也不会删除重复行,它只是做个合并的操作而已。
  2. 因为UNION ALL不会删除重复行,所以它的结果是多集,而不是真正的集合,因为相同的行在结果中可能出现多次。

例如。

SQL查询代码:

USE TSQLFundamentals2008;
GO

-- UNION ALL合并两个集合,并保留重复行
SELECT country,region,city FROM HR.Employees
UNION ALL
SELECT country,region,city FROM Sales.Customers

查询结果:

UNION DISTINCT

UNION DISTINCT会合并两个集合,但是它会删除重复行。对于UNION DISTINCT需要注意以下几点:

  1. 从处理过程来看,UNION DISTINCT先合并多个集合为多集,再删除重复行变成集合。
  2. 从运算结果来看,UNION DISTINCT是一个真正的集合,而不是多集。

例如。

SQL查询代码:

USE TSQLFundamentals2008;
GO

-- UNION(隐含DISTINCT)合并两个集合,但会删除重复行
SELECT country,region,city FROM HR.Employees
UNION
SELECT country,region,city FROM Sales.Customers

查询结果:

注意:比上面的查询少了29条记录,当然这些记录都是因为重复行被删除了。

 

posted on 2014-07-25 18:33  永远的麦子  阅读(3577)  评论(0编辑  收藏  举报