MySQL UNION 与 UNION ALL 语法与用法

1.MySQL UNION 语法

MySQL UNION 用于把来自多个 SELECT 语句的结果组合到一个结果集合中。语法为:

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 常用于数据类似的两张或多张表查询,如不同的数据分类表,或者是数据历史表等。下面是用于例子的两张原始数据表:

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正文内容...

上面两个表数据中,aid=2 的数据记录与 bid=2 的数据记录是一样的。

2.1.使用 UNION 查询

查询两张表中的文章 id 号及标题,并去掉重复记录:

SELECT aid,title FROM article UNION SELECT bid,title FROM blog

返回查询结果如下:

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

2.2.UNION 查询结果说明

  1. 重复记录是指查询中各个字段完全重复的记录,如上例,若 title 一样但 id 号不一样算作不同记录。
  2. 第一个 SELECT 语句中被使用的字段名称也被用于结果的字段名称,如上例的 aid。
  3. 各 SELECT 语句字段名称可以不同,但字段属性必须一致。

3.使用 UNION ALL 查询

查询两张表中的文章 id 号及标题,并返回所有记录:

SELECT aid,title FROM article UNION ALL SELECT bid,title FROM blog

返回查询结果如下:

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

显然,使用 UNION ALL 的时候,只是单纯的把各个查询组合到一起而不会去判断数据是否重复。因此,当确定查询结果中不会有重复数据或者不需要去掉重复数据的时候,应当使用 UNION ALL 以提高查询效率。

4.MySQL UNION ORDER BY

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

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

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正文内容...

4.1UNION 子句中使用 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

4.2UNION 整句中使用 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 子句中的圆括号虽然结果是一样的,但为了语句清晰,建议不要省略圆括号。

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

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

时间: 2024-10-08 10:29:23

MySQL UNION 与 UNION ALL 语法与用法的相关文章

【转】Mysql联合查询union和union all的使用介绍

Mysql的联合查询命令UNION和UNION ALL,总结了使用语法和注意事项,以及学习例子和项目例子,需要的朋友可以参考下 一.UNION和UNION ALL的作用和语法 UNION 用于合...... Mysql的联合查询命令UNION和UNION ALL,总结了使用语法和注意事项,以及学习例子和项目例子,需要的朋友可以参考下 一.UNION和UNION ALL的作用和语法 UNION 用于合并两个或多个 SELECT 语句的结果集,并消去表中任何重复行. UNION 内部的 SELECT

MySQL中UNION和UNION ALL的使用

在数据库中,UNION和UNION ALL关键字都是将两个结果集合并为一个,但这两者从使用和效率上来说都有所不同. MySQL中的UNION UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果.实际大部分应用中是不会产生重复的记录,最常见的是过程表与历史表UNION.如: select * from gc_dfys union select * from ls_jg_dfys 这个SQL在运行时先取出两个表的结果,再用排序空间进行排

Mysql联合查询UNION和UNION ALL的使用介绍

UNION和UNION ALL的作用和语法 UNION 用于合并两个或多个 SELECT 语句的结果集,并消去表中任何重复行.UNION 内部的 SELECT 语句必须拥有相同数量的列,列也必须拥有相似的数据类型.同时,每条 SELECT 语句中的列的顺序必须相同.SQL UNION 语法: SELECT column_name FROM table1UNIONSELECT column_name FROM table2 注释:默认地,UNION 操作符选取不同的值.如果允许重复的值,请使用 U

union和union all用法

工作中,遇到同事之前写的oracle语句中有一个union all,并且很多地方都用到了.便在网上查了一下用法,一下是自己的理解. union  (联合)将两个或者多个结果集合并. 在使用时,两个结果集要有相同的列,并且字段类型需要一致. select id,name from tableAunion allselect name from tableB 消息 205,级别 16,状态 1,第 1 行使用 UNION.INTERSECT 或 EXCEPT 运算符合并的所有查询必须在其目标列表中有

group By 和 Union 、 Union all的用法

我学习的是MySQL,学习写sql语句过程中遇到Group By 和 Union. 大家乐意看这两个链接,写的很好 Group By: www.cnblogs.com/rainman/archive/2013/05/01/3053703.html Union : http://www.jb51.net/article/48933.htm 博主只是为了加强记忆才写博客的,基本上是盗用 首先我们来看什么是group By. Group By 就是分组的意思,根据***分组 这是原始表 select

mysql数据库中的union和union的区别(示例演示)

一.前期准备 1,安装了mysql数据库(自行百度“如何安装mysql数据库”) 2,了解一定的SQL查询等基本知识 3,推荐:为了便于使用mysql,可以安装数据库图形管理工具DBeaver. 二.进入正题 画龙点睛:union 是对数据进行并集操作,不包括重复行,同时进行默认排序而Union all 是对数据进行并集操作,包括重复行,不进行排序.如果想看示例请接着往下看. 1,建表准备数据 CREATE TABLE `student` ( `stu_id` int(20) NOT NULL

sql中union和union all的用法

如果我们需要将两个select语句的结果作为一个整体显示出来,我们就需要用到union或者union all关键字.union(或称为联合)的作用是将多个结果合并在一起显示出来. union和union all的区别是,union会自动压缩多个结果集合中的重复结果,而union all则将所有的结果全部显示出来,不管是不是重复. union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序:union在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删

mysql中union与union all的区别

当查询表结构完全相同的多张表的数据时: 1.当查询条件完全相同且不包括主键,此时用union查询会过滤掉查询出的重复的记录,及漏查记录:使用union all进行查询,则会查出所有的符合条件的记录,保证数据的完整性. 2.当查询条件完全相同且包含主键,此时用union和union all查询出来的记录相同,没有差别.

mysql union和union all 的区别以及使用

Union因为要进行重复值扫描,所以效率低.如果合并没有刻意要删除重复行,那么就使用Union All  两个要联合的SQL语句 字段个数必须一样,而且字段类型要"相容"(一致): 如果我们需要将两个select语句的结果作为一个整体显示出来,我们就需要用到union或者union all关键字.union(或称为联合)的作用是将多个结果合并在一起显示出来. union和union all的区别是,union会自动压缩多个结果集合中的重复结果,而union all则将所有的结果全部显示