SQL UNION 操作符
在 SQL 中,UNION
操作符用于将两个或多个 SELECT
语句的结果集合并为一个结果集。UNION
操作符会自动去除重复的行,而 UNION ALL
则会保留所有行,包括重复的行。本文将详细介绍 UNION
操作符的使用方法,并通过实际案例帮助你更好地理解其应用场景。
1. 什么是 UNION 操作符?
UNION
操作符用于合并两个或多个 SELECT
语句的结果集。每个 SELECT
语句必须具有相同数量的列,并且列的数据类型必须兼容。UNION
操作符会自动去除重复的行,而 UNION ALL
则会保留所有行,包括重复的行。
UNION
:合并结果集并去除重复行。UNION ALL
:合并结果集并保留所有行,包括重复行。
2. UNION 操作符的基本语法
SELECT column1, column2, ...
FROM table1
UNION
SELECT column1, column2, ...
FROM table2;
示例 1:使用 UNION 合并两个表的结果
假设我们有两个表 employees
和 contractors
,它们都包含员工的姓名和职位信息。我们想要合并这两个表的结果,并去除重复的行。
SELECT name, position
FROM employees
UNION
SELECT name, position
FROM contractors;
输入:
employees
表:
name | position |
---|---|
Alice | Software Engineer |
Bob | Data Scientist |
Charlie | Product Manager |
contractors
表:
name | position |
---|---|
Alice | Software Engineer |
David | UX Designer |
Eve | Data Scientist |
输出:
name | position |
---|---|
Alice | Software Engineer |
Bob | Data Scientist |
Charlie | Product Manager |
David | UX Designer |
Eve | Data Scientist |
注意:UNION
操作符会自动去除重复的行。如果你希望保留所有行,包括重复的行,可以使用 UNION ALL
。
3. UNION ALL 操作符
UNION ALL
操作符与 UNION
类似,但它不会去除重复的行。如果你确定结果集中不会有重复的行,或者你希望保留所有行,可以使用 UNION ALL
。
示例 2:使用 UNION ALL 合并两个表的结果
SELECT name, position
FROM employees
UNION ALL
SELECT name, position
FROM contractors;
输出:
name | position |
---|---|
Alice | Software Engineer |
Bob | Data Scientist |
Charlie | Product Manager |
Alice | Software Engineer |
David | UX Designer |
Eve | Data Scientist |
注意:UNION ALL
会保留所有行,包括重复的行。因此,在使用 UNION ALL
时,请确保你确实需要保留重复的行。
4. UNION 操作符的实际应用场景
场景 1:合并多个数据源
假设你有一个电子商务网站,数据存储在不同的表中。你可能需要从多个表中获取用户信息,并将这些信息合并到一个结果集中。
SELECT user_id, name, email
FROM registered_users
UNION
SELECT user_id, name, email
FROM guest_users;
场景 2:生成报告
在生成报告时,你可能需要从多个表中提取数据,并将这些数据合并到一个结果集中。例如,你可能需要从 sales_2022
和 sales_2023
表中提取销售数据,并将这些数据合并到一个报告中。
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
假设你有两个表 students
和 teachers
,它们都包含姓名和年龄信息。请编写一个 SQL 查询,将这两个表的结果合并,并去除重复的行。
练习 2
假设你有两个表 orders_2022
和 orders_2023
,它们都包含订单号和订单金额信息。请编写一个 SQL 查询,将这两个表的结果合并,并保留所有行,包括重复的行。
附加资源
通过不断练习和探索,你将能够更好地掌握 UNION
操作符的使用,并在实际项目中灵活应用。