MySQL 联合查询
在MySQL中,联合查询(UNION)是一种将多个SELECT
语句的结果集合并为一个结果集的操作。联合查询通常用于从多个表中提取数据,并将这些数据组合成一个统一的视图。本文将详细介绍联合查询的语法、使用场景以及注意事项。
什么是联合查询?
联合查询允许你将两个或多个SELECT
语句的结果集合并为一个结果集。每个SELECT
语句的结果集必须具有相同的列数,并且列的数据类型必须兼容。联合查询的结果集会自动去除重复的行,除非你使用UNION ALL
来保留重复行。
基本语法
sql
SELECT column1, column2, ...
FROM table1
UNION
SELECT column1, column2, ...
FROM table2;
UNION
:用于合并两个或多个SELECT
语句的结果集,并去除重复行。UNION ALL
:用于合并两个或多个SELECT
语句的结果集,但保留所有行,包括重复行。
联合查询的使用场景
联合查询在以下场景中非常有用:
- 合并多个表的数据:当你需要从多个表中提取数据并将它们合并为一个结果集时。
- 去除重复数据:当你需要从多个查询中去除重复的行时。
- 简化复杂查询:当你需要将多个查询的结果集合并为一个结果集时,可以使用联合查询来简化查询逻辑。
代码示例
假设我们有两个表:employees
和contractors
,它们分别存储了公司员工和合同工的信息。我们希望将这两个表中的员工姓名合并为一个列表。
表结构
sql
CREATE TABLE employees (
id INT PRIMARY KEY,
name VARCHAR(100)
);
CREATE TABLE contractors (
id INT PRIMARY KEY,
name VARCHAR(100)
);
插入数据
sql
INSERT INTO employees (id, name) VALUES (1, 'Alice'), (2, 'Bob');
INSERT INTO contractors (id, name) VALUES (1, 'Charlie'), (2, 'Alice');
使用联合查询
sql
SELECT name FROM employees
UNION
SELECT name FROM contractors;
输出结果
+---------+
| name |
+---------+
| Alice |
| Bob |
| Charlie |
+---------+
在这个例子中,Alice
在两个表中都出现了,但由于我们使用了UNION
,结果集中只保留了一个Alice
。
使用UNION ALL
如果我们希望保留重复的行,可以使用UNION ALL
:
sql
SELECT name FROM employees
UNION ALL
SELECT name FROM contractors;
输出结果
+---------+
| name |
+---------+
| Alice |
| Bob |
| Charlie |
| Alice |
+---------+
在这个例子中,Alice
出现了两次,因为我们使用了UNION ALL
。
实际应用场景
场景1:合并销售数据
假设我们有两个表:online_sales
和offline_sales
,分别存储了在线销售和线下销售的数据。我们希望将这两个表中的销售数据合并为一个结果集。
sql
SELECT product_id, quantity, sale_date FROM online_sales
UNION
SELECT product_id, quantity, sale_date FROM offline_sales;
场景2:合并用户数据
假设我们有两个表:active_users
和inactive_users
,分别存储了活跃用户和非活跃用户的信息。我们希望将这两个表中的用户数据合并为一个结果集。
sql
SELECT user_id, username, email FROM active_users
UNION
SELECT user_id, username, email FROM inactive_users;
注意事项
- 列数和数据类型:每个
SELECT
语句的列数和数据类型必须相同或兼容。 - 排序:如果需要对联合查询的结果进行排序,可以在最后一个
SELECT
语句后添加ORDER BY
子句。 - 性能:联合查询可能会影响查询性能,尤其是在处理大量数据时。使用
UNION ALL
可以提高性能,因为它不需要去除重复行。
总结
联合查询是MySQL中一个非常有用的工具,它允许你将多个SELECT
语句的结果集合并为一个结果集。通过使用UNION
或UNION ALL
,你可以灵活地处理数据,并根据需要去除或保留重复行。在实际应用中,联合查询可以帮助你简化复杂的查询逻辑,并提高数据处理的效率。
附加资源
练习
- 创建两个表
table1
和table2
,分别插入一些数据,然后使用联合查询将这两个表的数据合并为一个结果集。 - 修改上述查询,使用
UNION ALL
来保留重复行,并观察结果。 - 尝试在联合查询中使用
ORDER BY
对结果集进行排序。
通过完成这些练习,你将更好地理解联合查询的使用方法和应用场景。