以下规则适用于 UNION、EXCEPT 和 INTERSECT 语句:
选择列表中项的数目相同 查询中的所有选择列表都必须具有相同数目的表达式(如列名、算术表达式和集合函数)。以下语句是无效的,因为第一个选择列表比第二个选择列表长:
SELECT store_id, city, state FROM stores UNION SELECT store_id, city FROM stores_east; |
数据类型必须匹配 SELECT 列表中的相应表达式必须属于同一数据类型,或者在两种数据类型之间必须能够进行隐式数据转换,或者应提供显式转换。
例如,除非提供显式转换,否则在 CHAR 数据类型的列和 INT 数据类型的列之间无法进行 UNION、INTERSECT 或 EXCEPT 运算。不过,在 MONEY 数据类型的列和 INT 数据类型的列之间可以进行集合运算。
列排序 您必须以相同的顺序将相应的表达式放置于集合运算的各个查询中,因为集合运算将按 SELECT 子句的各个查询中给定的顺序一一比较这些表达式。
多个集合运算 您可以将若干个集合运算排列在一起,如以下示例所示:
SELECT City AS Cities FROM Contacts UNION SELECT City FROM Customers UNION SELECT City FROM Employees; |
对于 UNION 语句,查询的顺序并不重要。对于 INTERSECT,当存在两个或多个查询时顺序是很重要的。对于 EXCEPT,顺序在任何情况下都很重要。
列标题 由 UNION 运算生成的表中的列名是从该语句中的第一个单独查询中获取的。如果要为结果集定义新的列标题,可以在第一个查询的选择列表中执行该操作,如以下示例所示:
SELECT City AS Cities FROM Contacts UNION SELECT City FROM Customers; |
在以下查询中,列标题仍为 City,即 UNION 子句的第一个查询中定义的列标题。
SELECT City FROM Contacts UNION SELECT City AS Cities FROM Customers; |
也可以使用 WITH 子句来定义列名。例如:
WITH V( Cities ) AS ( SELECT City FROM Contacts UNION SELECT City FROM Customers ) SELECT * FROM V; |
对结果进行排序 可以使用 SELECT 语句的 WITH 子句对选择列表中的列名进行排序。例如:
WITH V( CityName ) AS ( SELECT City AS Cities FROM Contacts UNION SELECT City FROM Customers ) SELECT * FROM V ORDER BY CityName; |
您也可以在查询列表的末尾使用单个 ORDER BY 子句,但必须使用整数而不是列名,如以下示例所示:
SELECT City AS Cities FROM Contacts UNION SELECT City FROM Customers ORDER BY 1; |
![]() |
使用DocCommentXchange 讨论此页。
|
版权 © 2010, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.0 |