跳到主要内容

SQL UNION 操作符

在 SQL 中,UNION 操作符用于将两个或多个 SELECT 语句的结果集合并为一个结果集。UNION 操作符会自动去除重复的行,而 UNION ALL 则会保留所有行,包括重复的行。本文将详细介绍 UNION 操作符的使用方法,并通过实际案例帮助你更好地理解其应用场景。

1. 什么是 UNION 操作符?

UNION 操作符用于合并两个或多个 SELECT 语句的结果集。每个 SELECT 语句必须具有相同数量的列,并且列的数据类型必须兼容。UNION 操作符会自动去除重复的行,而 UNION ALL 则会保留所有行,包括重复的行。

备注
  • UNION:合并结果集并去除重复行。
  • UNION ALL:合并结果集并保留所有行,包括重复行。

2. UNION 操作符的基本语法

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

示例 1:使用 UNION 合并两个表的结果

假设我们有两个表 employeescontractors,它们都包含员工的姓名和职位信息。我们想要合并这两个表的结果,并去除重复的行。

sql
SELECT name, position
FROM employees
UNION
SELECT name, position
FROM contractors;

输入:

employees 表:

nameposition
AliceSoftware Engineer
BobData Scientist
CharlieProduct Manager

contractors 表:

nameposition
AliceSoftware Engineer
DavidUX Designer
EveData Scientist

输出:

nameposition
AliceSoftware Engineer
BobData Scientist
CharlieProduct Manager
DavidUX Designer
EveData Scientist
提示

注意:UNION 操作符会自动去除重复的行。如果你希望保留所有行,包括重复的行,可以使用 UNION ALL

3. UNION ALL 操作符

UNION ALL 操作符与 UNION 类似,但它不会去除重复的行。如果你确定结果集中不会有重复的行,或者你希望保留所有行,可以使用 UNION ALL

示例 2:使用 UNION ALL 合并两个表的结果

sql
SELECT name, position
FROM employees
UNION ALL
SELECT name, position
FROM contractors;

输出:

nameposition
AliceSoftware Engineer
BobData Scientist
CharlieProduct Manager
AliceSoftware Engineer
DavidUX Designer
EveData Scientist
警告

注意:UNION ALL 会保留所有行,包括重复的行。因此,在使用 UNION ALL 时,请确保你确实需要保留重复的行。

4. UNION 操作符的实际应用场景

场景 1:合并多个数据源

假设你有一个电子商务网站,数据存储在不同的表中。你可能需要从多个表中获取用户信息,并将这些信息合并到一个结果集中。

sql
SELECT user_id, name, email
FROM registered_users
UNION
SELECT user_id, name, email
FROM guest_users;

场景 2:生成报告

在生成报告时,你可能需要从多个表中提取数据,并将这些数据合并到一个结果集中。例如,你可能需要从 sales_2022sales_2023 表中提取销售数据,并将这些数据合并到一个报告中。

sql
SELECT product_id, sales_amount
FROM sales_2022
UNION
SELECT product_id, sales_amount
FROM sales_2023;

5. 总结

UNION 操作符是 SQL 中一个非常有用的工具,它允许你将多个 SELECT 语句的结果集合并为一个结果集。UNION 会自动去除重复的行,而 UNION ALL 则会保留所有行,包括重复的行。通过本文的介绍和示例,你应该已经掌握了 UNION 操作符的基本用法,并了解了它在实际应用中的一些场景。

6. 附加资源与练习

练习 1

假设你有两个表 studentsteachers,它们都包含姓名和年龄信息。请编写一个 SQL 查询,将这两个表的结果合并,并去除重复的行。

练习 2

假设你有两个表 orders_2022orders_2023,它们都包含订单号和订单金额信息。请编写一个 SQL 查询,将这两个表的结果合并,并保留所有行,包括重复的行。

附加资源

通过不断练习和探索,你将能够更好地掌握 UNION 操作符的使用,并在实际项目中灵活应用。