文档章节

MySQL UNION

易百教程
 易百教程
发布于 2016/09/14 08:57
字数 826
阅读 29
收藏 0

在本教程中,我们将学习如何使用MySQL UNION操作符从多个SELECT语句将两个或多个结果集组合成一个结果集。

MySQL UNION操作符

MySQL UNION运算符允许您从多个表查询出来的两个或多个结果集组合成一个结果集。 MySQL UNION的语法如下:

SELECT column1,column2
UNION[DISTINCT|ALL]
SELECT column1,column2
UNION[DISTINCT|ALL]
…

执行上面的 SQL 语句后,得到下面的结果 - 执行上面的 SQL 语句后,得到下面的结果 - 有一些使用UNION运算符需要遵循的规则:

  • 显示在相应SELECT语句列数量必须相等。

  • 现在每个SELECT语句的列对应的位置必须具有相同的数据类型,或至少是可转换的数据类型。

默认情况下,UNION运算符从结果集中清除重复行,即使没有明确使用DISTINCT操作符。因此,也就是说UNION子句是UNION DISTINCT的一种快捷方式。

如果使用UNION ALL明确地保留重复行,如果有的话它将保留在结果集中。UNION ALL性能比UNION DISTINCT更快。

MySQL UNION示例

现在使用MySQL UNION 来作一些例子和练习,以帮助我们更好地理解它。

假设我们想将 customer 表和 employee 表中的数据合并到一个单一的结果集,则可以UNION运算符,下面的查询:

SELECT customer_id id, contact_name name
    FROM studymysql.customer
UNION
SELECT employee_id id, employee_name name
    FROM studymysql.employee

执行上面的 SQL 语句后,得到下面的结果 - 

MySQL UNION不使用别名

在上面的例子中,我们在SELECT语句的每一列使用了列别名。如果我们不使用列别名输出会是什么?MySQL在第一个SELECT语句使用的列名作为标签输出。

接下来让我们尝试不使用列的别名合并 customer 和 employee 表信息,如下查询:

(SELECT customer_id,contact_name
FROM studymysql.customer)
UNION
(SELECT employee_id, employee_name
FROM studymysql.employee)
ORDER BY contact_name,customer_id

结果中有 customerNumber 和 contactLastname 标签,这是第一个SELECT语句中列的名称。

MySQL UNION 与 ORDER BY

如果想在UNION运算符中对查询返回结果集进行排序,则需要在SQL中最后的那个 SELECT语句使用ORDER BY子句

让我们来看看下面的例子:

(SELECT customer_id id, contact_name name
FROM studymysql.customer)
UNION
(SELECT employee_id id, employee_name name
FROM studymysql.employee)
ORDER BY name,id

执行上面的 SQL 语句后,得到下面的结果 - 

在上面的查询中,我们首先使用 UNION 操作符合并 employee 表和 customer 表的 ID 和 name  到一个结果集。 然后我们通过使用ORDER BY子句排序结果集。请注意,我们把SELECT语句放在括号内,并把ORDER BY子句作为最后一个语句。

如果将ORDER BY子句放在每个SELECT语句中,也不会影响UNION运算符所产生的最终结果行的顺序。

MySQL还提供了另外一种方案 - 基于列位置使用ORDER BY子句将结果集进行排序,如下面的查询:

(SELECT customer_id,contact_name
FROM studymysql.customer)
UNION
(SELECT employee_id,employee_name
FROM studymysql.employee)
ORDER BY 2,1

执行上面的 SQL 语句后,得到下面的结果 -

在本教程中,您已经学会了如何使用MySQL UNION语句从多个表中查询数据并合并成一个结果集。

本文转载自:http://studymysql.com/mysql/union.html

易百教程
粉丝 5
博文 33
码字总数 32221
作品 0
广州
程序员
私信 提问
继续测试博客

1. 背景 全并查询结果是将多个 select 语句的查询结果合并到一起。 参与合并的结果集需要字段统一。 * 字段可以用空字符串''代替。 2. 合并查询结果实战 [ users1 and users2 ] * 查看 user...

zhangguis
2017/07/10
0
0
继续测试博客

1. 背景 全并查询结果是将多个 select 语句的查询结果合并到一起。 参与合并的结果集需要字段统一。 * 字段可以用空字符串''代替。 2. 合并查询结果实战 [ users1 and users2 ] * 查看 user...

zhangguis
2017/07/10
0
0
继续测试博客

1. 背景 全并查询结果是将多个 select 语句的查询结果合并到一起。 参与合并的结果集需要字段统一。 * 字段可以用空字符串''代替。 2. 合并查询结果实战 [ users1 and users2 ] * 查看 user...

zhangguis
2017/07/10
0
0
mysql常用命令及SQL语句

UPDATE user_0 SET phone=REPLACE(phone,'13800','14400') //把phone中的13800替换为14400 select id,birth from userview WHERE birth LIKE CONCAT('%',SUBSTR(DATEFORMAT(CURRENT_DATE(),......

xiejunbo
2014/12/14
206
0
MySQL中UNION和UNION ALL 详见

在MYSQL数据库中,UNION和UNION ALL关键字都是将两个结果集合并为一个,但这两者从使用和效率上来说都有所不同。 MySQL中的UNION ,UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会...

mn_1127
2013/12/10
260
0

没有更多内容

加载失败,请刷新页面

加载更多

正则表达式匹配

请实现一个函数用来匹配包括 '.' 和 '*' 的正则表达式。模式中的字符 '.' 表示任意一个字符,而 '*' 表示它前面的字符可以出现任意次(包含 0 次)。 在本题中,匹配是指字符串的所有字符匹配...

Garphy
今天
7
0
Laravel 5.1的多路由文件的配置

默认的路由配置文件只有一个, \app\Http\routes.php。 在同一个文件中写路由容易起冲突,文件会越来越大,就需要定义多个路由文件。 找到加载\app\Http\routes.php的文件, 打开\app\Provid...

mdoo
今天
5
0
Hibernate 5 开始使用指南前言

同时在面向对象软件和关系型数据库进行工作,可能会非常复杂和费时。数据在对象和数据库之间可能会不一致,然后导致开发成本会非常高。 Hibernate 是一个针对 Java 环境的对象关系映射(Obj...

honeymoose
今天
6
0
聊聊nacos ServiceManager的UpdatedServiceProcessor

序 本文主要研究一下nacos ServiceManager的UpdatedServiceProcessor ServiceManager.init nacos-1.1.3/naming/src/main/java/com/alibaba/nacos/naming/core/ServiceManager.java @Compone......

go4it
今天
7
0
正则表达式的使用(QQ格式的判断与空格的切割)

//正则表达式的使用 public static void main(String[] args) throws IOException, ClassNotFoundException { //test1("123456"); test2("-1 99 kk"); } /** * ......

zhengzhixiang
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部