SQL Union运算符

本教程将演示如何使用SQL UNION组合来自多个查询的两个或多个结果集,并解释UNIONUNION 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结果:

《SQL Union运算符》

以下图片说明了A UNION ALL B的结果:
《SQL Union运算符》

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

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运算符来组合来自不同表的数据。 请参阅以下employeesdependents表:

《SQL Union运算符》

以下语句使用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运算符组合来自多个查询的两个或多个结果集。

        原文作者:SQL教程
        原文地址: https://www.yiibai.com/sql/sql-union.html
        本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
    点赞