1.MysqL UNION 语法
MysqL UNION 用于把来自多个 语句的结果组合到一个结果集合中。语法为:
SELECT column,... FROM table1 UNION [ALL] SELECT column,... FROM table2 ...
在多个 SELECT 语句中,对应的列应该具有相同的,且第一个 SELECT 语句中被使用的字段名称也被用于结果的字段名称。
1.1.UNION 与 UNION ALL 的区别
当使用 UNION 时,MysqL 会把结果集中重复的记录删掉,而使用 UNION ALL ,MysqL 会把所有的记录返回,且效率高于 UNION。
2.MysqL UNION 用法实例
UNION 常用于数据类似的两张或多张表查询,如不同的数据分类表,或者是数据历史表等。下面是用于例子的两张原始数据表:
content |
---|
2.1.使用 UNION 查询
SELECT aid,title FROM article UNION SELECT bid,title FROM blog
返回查询结果如下:
title |
---|
- 重复记录是指查询中各个字段完全重复的记录,如上例,若 title 一样但 id 号不一样算作不同记录。
- 第一个 SELECT 语句中被使用的字段名称也被用于结果的字段名称,如上例的 aid。
- 各 SELECT 语句字段名称可以不同,但字段属性必须一致。
3.使用 UNION ALL 查询
SELECT aid,title FROM article UNION ALL SELECT bid,title FROM blog
返回查询结果如下:
title |
---|
4.MysqL UNION ORDER BY
在 MysqL UNION 中使用 和 是有些需要特别注意的地方,因此单独列出来说明一下。
下面是用于例子测试的两张原始数据表:
content |
---|
子句中使用 ORDER BY,即将 子句的结果先排序,然后再把这些子句查询的结果进行集合。
在子句中使用 ORDER BY,由于优先级问题,需要将整个子句加圆括号(),且
(SELECT aid,title FROM article ORDER BY aid DESC LIMIT 10) UNION ALL (SELECT bid,title FROM blog ORDER BY bid DESC LIMIT 10)
返回查询结果如下:
title |
---|
如果想使用 ORDER BY 或 LIMIT 来对全部 UNION 结果进行分类或限制,则应对单个 SELECT 语句加圆括号,并把 ORDER BY 或 LIMIT 放到最后一个的后面。
(SELECT aid,title FROM article) UNION ALL (SELECT bid,title FROM blog) ORDER BY aid DESC
返回查询结果如下:
title |
---|
4.3 UNION ORDER BY 应用于别名
如果 SELECT 中使用到了,则 OEDER BY 必须引用别名:
(SELECT a AS b FROM table) UNION (SELECT ...) ORDER BY b
5.MysqL UNION LIMIT
在 MysqL UNION 中使用 LIMIT 用于限制返回的记录条数,如果对 SELECT 子句做限制,需要对 SELECT 添加圆括号:
(SELECT aid,title FROM article LIMIT 2) UNION ALL (SELECT bid,title FROM blog LIMIT 2)
该 sql 会返回个 SELECT 语句的两条记录,如果不添加圆括号,则最后一个 LIMIT 2 会作用于整个 UNION 语句而一共返回 2 条记录。
同 ORDER BY 类似,当需要对整个 UNION 的结果进行 LIMIT 限制时,建议将各个 SELECT 语句用圆括号括起来以使语句更加清晰:
(SELECT aid,title FROM blog) LIMIT 2
可见,LIMIT 与 ORDER BY 经常搭配使用,二者在 UNION 中的使用方式也是一致的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。