标签:
提示:UNION
与WHERE
这一课一开始我们说过,UNION
几乎总是完成与多个WHERE
条件相同的工作。UNION ALL
为UNION
的一种形式,它完成WHERE
子句完成不了的工作。如果确实需要每个条件的匹配行全部出现(包括重复行),就必须使用UNION ALL
,而不是WHERE
。
回到14.2.1节,我们看看所用的SELECT
语句。注意到在分别执行语句时,第一条SELECT
语句返回3行,第二条SELECT
语句返回2行。而在用UNION
组合两条SELECT
语句后,只返回4行而不是5行。
UNION
从查询结果集中自动去除了重复的行;换句话说,它的行为与一条SELECT
语句中使用多个WHERE
子句条件一样。因为Indiana州有一个Fun4All单位,所以两条SELECT
语句都返回该行。使用UNION
时,重复的行会被自动取消。
这是UNION
的默认行为,如果愿意也可以改变它。事实上,如果想返回所有的匹配行,可使用UNION ALL
而不是UNION
。
SELECT
语句的输出用ORDER BY
子句排序。在用UNION
组合查询时,只能使用一条ORDER BY
子句,它必须位于最后一条SELECT
语句之后。对于结果集,不存在用一种方式排序一部分,而又用另一种方式排序另一部分的情况,因此不允许使用多条ORDER BY
子句。
说明:其他类型的
UNION
某些DBMS还支持另外两种UNION
:EXCEPT
(有时称为MINUS
)可用来检索只在第一个表中存在而在第二个表中不存在的行;而INTERSECT
可用来检索两个表中都存在的行。实际上,这些UNION
很少使用,因为相同的结果可利用联结得到。
提示:操作多个表
为了简单,本课中的例子都是使用UNION
来组合针对同一表的多个查询。实际上,UNION
在需要组合多个表的数据时也很有用,即使是有不匹配列名的表,在这种情况下,可以将UNION与别名组合,检索一个结果集。
标签:
原文地址:http://www.cnblogs.com/qook/p/4898392.html