UNION()
对于LIBRARY数据库并没有太多的必要使用UNION操作这里假定我们想将图书名称的完整列表与作者名字的列表组合在一起或许你想创建一个主列表其中既包含了图书的名称又包含了图书的作者在其中可以通过名称或通过作者来查找图书
SELECT
booksbk_title AS title
FROM books
UNION
SELECT
authorsau_last_name
FROM authors
UNION查询并不在表之间建立链接或者连接它只是简单地将其追加在一起即将返回的一个子集追加在另外一个子集的末尾请注意UNION操作的语法与JOIN的语法是不同的UNION反映了这样的事实表并没有连接在一起而只是简单地粘合起来如表所示
表 UNION查询的结果
(续表)
注意图书名称和作者名字全都包含在结果集的同一个列中并且按照字母表顺序进行排序记录的顺序与这些记录从哪里获取无关读者用自己的RDBMS测试时可能会得到不同的结果集因为并非所有RDBMS都支持这种排序功能如果需要使结果集按照指定的顺序进行排序请使用ORDER BY子句
如果对于使用UNION操作符合并起来的查询同时又使用了ORDER BY子句那么请注意排序是针对整个结果集进行的无法对UNION的单个查询使用ORDER BY子句只能对整个UNION语句使用ORDER BY子句
必须注意的重要问题是数据的兼容性之所以可以创建一个图书名称和作者名字的列表是因为这两个字段都是字符串类型UNION操作无法合并不同数据类型的数据例如无法把从一个表中获取的日期与从另外一个表中获取的价格进行合并这样的列表又有什么意义呢?(当然我们可以创建一个查询将日期放在查询结果集的一个列中并将价格放在另外一个列中例如各季度的销售业绩这种情况适合使用JOIN查询而不适合使用UNION操作因为UNION操作的功能是把来自不同表中的数据合并到结果集的同一个列中因此合并的数据必须具有相同的数据类型)UNION操作不仅要求数据类型具有兼容性而且还要求数据集的结构也具有兼容性即在每一个查询的SELECT字段列表中所指定的列在数量上必须是相同的并且相应的列的数据类型必须是兼容的
返回目录SQL实战新手入门
编辑推荐
Oracle索引技术
高性能MySQL
数据仓库与数据挖掘培训视频教程