MySQL UNION 中使用 ORDER BY 和 LIMIT

MySQL UNION ORDER BY

在 MySQL UNION 中使用 ORDER BYLIMIT 是有些需要特别注意的地方,因此单独列出来说明一下。

下面是用于例子测试的两张原始数据表:

article 文章表:
aid title content
1 文章1 文章1正文内容...
2 文章2 文章2正文内容...
3 文章3 文章3正文内容...
blog 日志表:
bid title content
1 日志1 日志1正文内容...
2 文章2 文章2正文内容...
3 日志3 日志3正文内容...

UNION 子句中使用 ORDER BY

子句中使用 ORDER BY,即将 SELECT 子句的结果先排序,然后再把这些子句查询的结果进行集合。

在子句中使用 ORDER BY,由于优先级问题,需要将整个子句加圆括号(),且必须与 LIMIT 结合使用

(SELECT aid,title FROM article ORDER BY aid DESC LIMIT 10) 
UNION ALL
(SELECT bid,title FROM blog ORDER BY bid DESC LIMIT 10)

返回查询结果如下:

aid title
3 文章3
2 文章2
1 文章1
3 日志3
2 文章2
1 日志1

UNION 整句中使用 ORDER BY

如果想使用 ORDER BY 或 LIMIT 来对全部 UNION 结果进行分类或限制,则应对单个 SELECT 语句加圆括号,并把 ORDER BY 或 LIMIT 放到最后一个的后面。

(SELECT aid,title FROM article) 
UNION ALL
(SELECT bid,title FROM blog)
ORDER BY aid DESC

返回查询结果如下:

aid title
3 文章3
3 日志3
2 文章2
2 文章2
1 文章1
1 日志1

整句中使用 ORDER BY,去掉 SELECT 子句中的圆括号虽然结果是一样的,但为了语句清晰,建议不要省略圆括号。

UNION ORDER BY 应用于别名

如果 SELECT 中使用到了字段别名,则 OEDER BY 必须引用别名:

(SELECT a AS b FROM table) UNION (SELECT ...) ORDER BY b

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 article) 
UNION ALL
(SELECT bid,title FROM blog)
LIMIT 2

可见,LIMIT 与 ORDER BY 经常搭配使用,二者在 UNION 中的使用方式也是一致的。

本章节内容共分 2 部分:

  1. 1. MySQL UNION 与 UNION ALL 语法与用法
  2. 2. MySQL UNION 中使用 ORDER BY 和 LIMIT
海外1核2G服务器低至2折

5idev.com(我爱开发网) — 提供最好的 XHTML教程DIV+CSS教程JavaScript教程PHP教程ThinkPHP教程