SQL Select Union的应用
表A:
订单号 入库单号 数量 入库数量
001 500
002 300
003 400
表B:
订单号 入库单号 入库数量
001 R01 250
001 R02 250
002 R03 100
002 R04 200
003 R05 150
003 R06 250
现在生成表如下:
订单号 入库单号 数量 入库数量
001 500
001 R01 250
001 R02 250
002 300
002 R03
002 R04 200
003 400
003 R05 150
003 R06 250
SQL语句如下:
select a.订单号,a.入库单号,a.数量,a.入库数量 from a
union
select b.订单号,b.入库单号,null,b.入库数量 from b
UNION 运算符使用准则
使用 UNION 运算符时请遵循以下准则:
1、在使用 UNION 运算符组合的语句中,所有选择列表的表达式数目必须相同(列名、算术表达式、聚合函数等)。
2、在使用 UNION 组合的结果集中的相应列、或个别查询中使用的任意列的子集必须具有相同数据类型,并且两种数据类型之间必须存在可能的隐性数据转换,或提供了显式转换。例如,在 datetime 数据类型的列和 binary 数据类型的列之间不可能存在 UNION 运算符,除非提供了显式转换,而在 money 数据类型的列和 int 数据类型的列之间可以存在 UNION 运算符,因为它们可以进行隐性转换。
3、用 UNION 运算符组合的各语句中对应的结果集列出现的顺序必须相同,因为 UNION 运算符是按照各个查询给定的顺序逐个比较各列。
4、通过 UNION 生成的表中的列名来自 UNION 语句中的第一个单独的查询。若要用新名称引用结果集中的某列(例如在 ORDER BY 子句中),必须按第一个 SELECT 语句中的方式引用该列:
SELECT city AS Cities FROM stores_west
UNION
SELECT city FROM stores_east
ORDER BY city
可以在任何组合中、单一 UNION 运算中,合并两个或多个查询、表、及 SELECT 语句的结果。下列示例将名为 New Accounts 的现存表和一个 SELECT 语句合并:
TABLE [New Accounts] UNION ALL
SELECT *
FROM Customers
WHERE OrderAmount > 1000;
按照缺省规定,使用 UNION 运算时不返回重复的记录;然而,可以包含 ALL 谓词来确保返回所有的记录。这样,运行查询的速度也会快些。
一次 UNION 运算中的所有查询必须要求相同的字段数量;但是,字段无须具有相同的大小或数据类型。
只能在第一个 SELECT 语句中使用别名,因为它们在其他语句中已被省略。在 ORDER BY 子句中,可引用在第一个 SELECT 语句中被调用的字段名。