SQL UNION

在 SQL 中,`UNION` 运算符用于选择两个或多个表中的字段。

-- select the union of name columns from two tables Teachers and Students 
SELECT name
FROM Teachers
UNION
SELECT name
FROM Students;

在这里,SQL 命令选择两个不同表:TeachersStudentsname 列的并集。


SQL Union 语法

SELECT column1, column2, ...
FROM table1
UNION
SELECT column1, column2, ...
FROM table2;

这里,

  • column1,column2, ... 是并集所需的列名
  • table1table2 是要从中获取列的表的名称
  • `UNION` 合并表中的列

注意:如果从表中选择的列包含相同的数据,则这些列在结果集中只包含一次。


示例:SQL UNION

-- select the union of age columns from two tables Teachers and Students 
SELECT age
FROM Teachers
UNION
SELECT age
FROM Students;

在这里,SQL 命令返回 TeachersStudents 表中的 age 列,忽略重复字段。

How to use UNION in SQL
示例:SQL UNION

使用 UNION 时需要注意的事项

要在 SQL 中使用 `UNION`,我们必须始终记住:

  • 所有表中的列数必须相同。例如,`Teachers` 和 `Students` 表都有三列。
  • 列的数据类型必须相同。例如,`Teachers` 和 `Students` 表中的 `age` 列都是整数类型。
  • 每张表中的列顺序必须相同。例如,`Teachers` 和 `Students` 表中的列顺序都是 **id-name-age**。

注意:我们的在线编译器基于 SQLite,它在执行 `UNION` 操作时会将其中一列的值转换为与另一列的数据类型匹配。

示例:带 WHERE 子句的 SQL UNION

-- select the union of age columns from both Teachers and Students tables where age >= 20
SELECT age, name FROM Teachers
WHERE age >= 20
UNION
SELECT age, name FROM Students
WHERE age >= 20;

在这里,SQL 命令从两个表中选择 age 列(仅唯一值),其中 age 大于或等于 **20**。


SQL UNION ALL 运算符

`UNION ALL` 运算符选择两个或多个表中的字段,与 `UNION` 类似。然而,与 `UNION` 不同,`UNION ALL` 不会忽略重复字段。

让我们再次尝试使用 `UNION ALL` 而不是 `UNION` 的前一个 SQL 命令。

-- select the union of age from Teachers and Students tables
 
SELECT age
FROM Teachers
UNION ALL
SELECT age
FROM Students;

在这里,SQL 命令选择两个表中的字段,包括重复字段。

How to use UNION ALL in SQL
示例:SQL UNION ALL

示例:带 WHERE 子句的 SQL UNION ALL

-- select the union of age columns from both Teachers and Students tables where age >= 20
SELECT age, name FROM Teachers
WHERE age >= 20
UNION ALL
SELECT age, name FROM Students
WHERE age >= 20;

在这里,SQL 命令从两个表中选择 age 列(包括重复值),其中 age 大于或等于 **20**。


更多关于 SQL UNION

SQL UNION vs. UNION ALL
SQL UNION SQL UNION ALL
它只返回来自两个查询结果集的唯一值。 它返回来自两个查询结果集的重复值。
与 `UNION ALL` 运算符相比速度较慢。 执行速度更快,因为无需过滤结果集以删除重复值。
SQL UNION vs. SQL JOIN
SQL JOIN SQL UNION
它用于将来自不同表的数据合并到新列中。
它用于将来自不同查询结果的数据合并到新行中。
它使用两个表中的公共列来获取数据。 它从两个表中选择数据并将它们组合在输出中。
表中可以存在任意数量的列。 两个表中的列数必须相同。
列的数据类型可以不同。 列的数据类型应理想地相同(除了一些数据库,如 SQLite)

要了解更多信息,请访问 SQL JOIN


另请阅读

在我们结束之前,让我们测试一下你对 SQL UNION 的知识!你能解决以下挑战吗?

挑战

编写一个 SQL 查询来查找缺失的 ID。

假设您正在一家电子商务公司担任后端工程师,该公司维护一个名为 **Customers** 的表。该表的架构如下:

Customers

列名

数据类型

customer_id

int

customer_name

varchar(100)

由于客户数据管理的动态性质,客户 ID 序列中可能会出现空白。


你的任务是编写一个 SQL 查询来查找 **Customers** 表中缺失的 ID。

你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战