SQL UNION

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

SQL UNION 运算符简介

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

SELECT 
    column1, column2
FROM
    table1 
UNION [ALL]
SELECT 
    column3, column4
FROM
    table2;Code language: SQL (Structured Query Language) (sql)

要使用 UNION 运算符,你可以编写 SELECT 语句,并用 UNION 关键字连接它们。

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

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

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

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

SQL UNION

下图说明了 A UNION ALL B

SQL UNION ALL

UNION 与 JOIN 的不同之处在于,JOIN 合并多个表的,而 UNION 合并表的

SQL UNION 示例

SQL UNION 示例

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

SELECT 
    id
FROM
    A;Code language: SQL (Structured Query Language) (sql)
Table A data

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

SELECT 
    id
FROM
    B;Code language: SQL (Structured Query Language) (sql)
Table B data

要合并这两条查询的结果集,可以使用 UNION 运算符,如下所示

SELECT
	id
FROM
	a
UNION
SELECT
	id
FROM
	b;Code language: SQL (Structured Query Language) (sql)
SQL UNION example

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

SQL UNION ALL 示例

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

SQL UNION ALL example

带有 ORDER BY 的 SQL UNION 示例

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

SELECT
	id
FROM
	a
UNION
SELECT
	id
FROM
	b
ORDER BY id DESC;Code language: SQL (Structured Query Language) (sql)
SQL UNION ORDER BY example

数据库系统执行以下步骤

  1. 首先,单独执行每个 SELECT 语句。
  2. 其次,合并结果集并删除重复行以创建合并结果集。
  3. 第三,按照 ORDER BY 子句中指定的列对合并结果集进行排序。

实际上,我们经常使用 UNION 运算符合并来自不同表的数据。请查看以下员工和家属表

employees_dependents_tables

以下语句使用 UNION 运算符合并员工和家属的姓氏和名字。

SELECT
	first_name,
	last_name
FROM
	employees
UNION
SELECT
	first_name,
	last_name
FROM
	dependents
ORDER BY
	last_name;Code language: SQL (Structured Query Language) (sql)

试用

SQL UNION practical example

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

本教程是否有用?