如果您使用 UNION ALL 运算符,则从两个查询返回所有符合条件的行,而不排除任何重复的行。(如果您使用 UNION 运算符而不带 ALL 关键字来组合两个查询,则从符合条件的行的组合的集合移除任何重复的行。也就是说,如果多行包含两个查询的 Projection 子句指定的相应的列或表达式中相同的值,则仅从包含在结果集的每一重复的集合返回一行。)
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 表达式。