如果您使用 UNION ALL 运算符,则从两个查询返回所有符合条件的行,而不排除任何重复的
行。(如果您使用 UNION 运算符而不带 ALL 关键字来组合两个查询,则从符合条件的行的组合
的集合移除任何重复的行。也就是说,如果有多行,它们每一列包含的值均完全相同,那么只保留
一行。)
下一示例使用 UNION ALL 来组合两个 SELECT 语句的结果,而不移除重复行。该查询返回在 2007
年第一季度与 2008 年第一季度期间接收的所有电话的列表。
SELECT customer_num, call_code FROM cust_calls
WHERE call_dtime BETWEEN
DATETIME (2007-1-1) YEAR TO DAY
AND DATETIME (2007-3-31) YEAR TO DAY
UNION ALL
SELECT customer_num, call_code FROM cust_calls
WHERE call_dtime BETWEEN
DATETIME (2008-1-1)YEAR TO DAY
AND DATETIME (2008-3-31) YEAR TO DAY;
如果想要从结果集移除重复行,请使用不带关键字 ALL 的 UNION 作为查询之间的集合运算符。
在前一示例中,如果两个 SELECT 语句都返回了组合 101 B,则 UNION 运算符会导致该组合
只罗列一次。(如果您想要移除每一 SELECT 语句中的重复行,则请紧接在 Projection 子句的
Select 列表之前使用 DISTINCT 或 UNIQUE 关键字,如同 允许重复 中描述的那样。)
对于指定仅带有 UNION 运算符的集合操作,ALL 关键字是有效的。如果 ALL 紧跟在
INTERSECT、MINUS 或 EXCEPT 集合运算符之后,这些集合运算符排除重复的部分,则数据库
服务器发出错误。
要获取关于数据库服务器如何在有 NLCASE INSENSITIVE 属性的数据库中标识重复的 NCHAR
或 NVARCHAR 值的信息,请参阅主题 在区分大小写的数据库中的 NCHAR 和 NVARCHAR 表
达式。