mysql合并运算符_SQL Union运算符

本教程将演示如何使用SQL UNION组合来自多个查询的两个或多个结果集,并解释UNION和UNION ALL之间的区别。

1. SQL UNION运算符简介

UNION运算符将两个或多个SELECT语句的结果集合并到一个结果集中。 以下语句说明了如何使用UNION运算符组合两个查询的结果集:

SELECT

column1, column2

FROM

table1

UNION [ALL]

SELECT

column3, column4

FROM

table2;

要使用UNION运算符,可以编写单独的SELECT语句,并通过关键字UNION将它们连接起来。

SELECT语句返回的列必须具有相同或可转换的数据类型,大小和相同的顺序。

数据库系统首先执行两个SELECT语句来处理查询。 然后,它将两个单独的结果集合并为一个,并消除重复的行。 为了消除重复的行,数据库系统对每列的组合结果进行排序,并扫描它以查找彼此相邻的匹配行。

要保留结果集中的重复行,请使用UNION ALL运算符。

假设我们有两个结果集A(1,2)和B(2,3)。 下图说明了A UNION B结果:

d332e2bd7d1fdbc2f30359aec13da458.png

以下图片说明了A UNION ALL B的结果:

be8e06e2e7cec1e0c0767b70e1ed724a.png

联合与联接不同,联接组合了多个表的列,而联合组合了表的行。

2. SQL UNION示例

要从A表中获取数据,请使用以下SELECT语句:

SELECT

id

FROM

A;

执行上面查询语句,得到以下结果:

SELECT

id

FROM

A;

要从B表中检索数据,请使用以下语句:

mysql> SELECT

id

FROM

B;

+----+

| id |

+----+

| 2 |

| 3 |

+----+

2 rows in set

要组合这两个查询的结果集,请使用UNION运算符,如下所示:

SELECT

id

FROM

a

UNION

SELECT

id

FROM

b;

执行上面查询语句,得到以下结果:

+----+

| id |

+----+

| 1 |

| 2 |

| 3 |

+----+

3 rows in set

结果集仅包含3行,因为UNION运算符删除了一个重复行。

3. SQL UNION ALL示例

要保留重复行,请使用UNION ALL运算符,如下所示:

SELECT

id

FROM

a

UNION ALL

SELECT

id

FROM

b;

执行上面查询语句,得到以下结果:

+----+

| id |

+----+

| 1 |

| 2 |

| 2 |

| 3 |

+----+

4 rows in set

4. SQL UNION带有ORDER BY示例

要对结果集进行排序,请在所有SELECT语句之后放置ORDER BY子句,如下所示:

SELECT

id

FROM

a

UNION

SELECT

id

FROM

b

ORDER BY id DESC;

执行上面查询语句,得到以下结果:

+----+

| id |

+----+

| 3 |

| 2 |

| 1 |

+----+

3 rows in set

数据库系统执行以下步骤:

首先,分别执行每个SELECT语句。

其次,组合结果集并删除重复行以创建组合结果集。

第三,按ORDER BY子句中指定的列对组合结果集进行排序。

实际上,我们经常使用UNION运算符来组合来自不同表的数据。 请参阅以下employees和dependents表:

61f7eea6ee48abf01e567619f3234dde.png

以下语句使用UNION运算符组合员工和受抚养人的名字和姓氏。

SELECT

first_name,

last_name

FROM

employees

UNION

SELECT

first_name,

last_name

FROM

dependents

ORDER BY

last_name;

执行上面查询语句,得到以下结果:

+------------+-----------+

| first_name | last_name |

+------------+-----------+

| Grace | Chen |

| Dan | Chen |

| Daniel | Chen |

| Matthew | Chen |

| John | Chen |

| Valli | Chen |

| Diana | Chen |

| Helen | Chen |

| Nancy | Chen |

| Karl | Chen |

| Matthew | Han |

.....

| Guy | Zhang |

| Karen | Zhang |

| Ed | Zhao |

| Britney | Zhao |

| Jennifer | Zhao |

| Susan | Zhou |

| Uma | Zhou |

| Bob | Zhou |

| Lucille | Zhou |

| Michael | Zhou |

| Pat | Zhou |

+------------+-----------+

70 rows in set

在本教程中,您学习了如何使用UNION运算符组合来自多个查询的两个或多个结果集。

¥ 我要打赏

纠错/补充

收藏

加QQ群啦,易百教程官方技术学习群

注意:建议每个人选自己的技术方向加群,同一个QQ最多限加 3 个群。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值