MySQL SELECT语法(一)UNION语法详解

  源自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中,括号是必须的。

猜你喜欢

转载自www.cnblogs.com/bigbigbigo/p/10958754.html
今日推荐