源自MySQL 5.7 官方手册:13.2.9.3 UNION Syntax
一、UNION语法
UNION用于将多个SELECT语句的结果合并到一个结果集中。
SELECT ... UNION [ALL | DISTINCT] SELECT ... [UNION [ALL | DISTINCT] SELECT ...]
将会使用第一个SELECT语句中的列名称作为返回结果的列名称。而且在每个SELECT语句的相应位置中列出的选定列应具有相同的数据类型。
如果相应SELECT列的数据类型不匹配,则UNION结果中列的类型和长度会考虑所有SELECT语句检索的值。示例如下:
mysql> SELECT REPEAT('a',1) UNION SELECT REPEAT('b',10); /* +---------------+ | REPEAT('a',1) | +---------------+ | a | | bbbbbbbbbb | +---------------+ */
UNION涉及到的SELECT语句有如下限制:
- 只有最后一个SELECT语句可以使用INTO OUTFILE,当然,全部UNION的结果会写到文件中去。
- HIGH_PRIORITY在UNION语句中使用没有意义。因为对第一个SELECT使用,不产生什么影响。在其它的SELECT中使用,会报错。
UNION的默认会从结果中删除重复的行,所以DINSTINCT关键字用不用都一样。而ALL关键字就可以让结果包含所有符合条件的重复行。
可以在同一查询中混合使用UNION ALL和UNION DISTINCT。MySQL对此的处理策略是:一个DISTINCT UNION句覆盖它其左侧的任何ALL UINON句。
要将ORDER BY或LIMIT应用于单个SELECT,请将子句放在包含SELECT的括号内:
(SELECT a FROM t1 WHERE a=10 AND B=1 ORDER BY a LIMIT 10) UNION (SELECT a FROM t2 WHERE a=11 AND B=2 ORDER BY a LIMIT 10);
在5.7中,括号是必须的。