本教程将演示如何使用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结果:
以下图片说明了A UNION ALL B的结果:
联合与联接不同,联接组合了多个表的列,而联合组合了表的行。
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表:
以下语句使用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 个群。