MySQL 联合查询
在MySQL中,联合查询(UNION)是一种将多个SELECT
语句的结果集合并为一个结果集的操作。联合查询通常用于从多个表中提取数据,并将这些数据组合成一个统一的视图。本文将详细介绍联合查询的语法、使用场景以及注意事项。
什么是联合查询?
联合查询允许你将两个或多个SELECT
语句的结果集合并为一个结果集。每个SELECT
语句的结果集必须具有相同的列数,并且列的数据类型必须兼容。联合查询的结果集会自动去除重复的行,除非你使用UNION ALL
来保留重复行。
基本语法
SELECT column1, column2, ...
FROM table1
UNION
SELECT column1, column2, ...
FROM table2;
UNION
:用于合并两个或多个SELECT
语句的结果集,并去除重复行。UNION ALL
:用于合并两个或多个SELECT
语句的结果集,但保留所有行,包括重复行。
联合查询的使用场景
联合查询在以下场景中非常有用:
- 合并多个表的数据:当你需要从多个表中提取数据并将它们合并为一个结果集时。
- 去除重复数据:当你需要从多个查询中去除重复的行时。
- 简化复杂查询:当你需要将多个查询的结果集合并为一个结果集时,可以使用联合查询来简化查询逻辑。
代码示例
假设我们有两个表:employees
和contractors
,它们分别存储了公司员工和合同工的信息。我们希望将这两个表中的员工姓名合并为一个列表。
表结构
CREATE TABLE employees (
id INT PRIMARY KEY,
name VARCHAR(100)
);
CREATE TABLE contractors (
id INT PRIMARY KEY,
name VARCHAR(100)
);
插入数据
INSERT INTO employees (id, name) VALUES (1, 'Alice'), (2, 'Bob');
INSERT INTO contractors (id, name) VALUES (1, 'Charlie'), (2, 'Alice');
使用联合查询
SELECT name FROM employees
UNION
SELECT name FROM contractors;
输出结果
+---------+
| name |
+---------+
| Alice |
| Bob |
| Charlie |
+---------+
在这个例子中,Alice
在两个表中都出现了,但由于我们使用了UNION
,结果集中只保留了一个Alice
。
使用UNION ALL
如果我们希望保留重复的行,可以使用UNION ALL
:
SELECT name FROM employees
UNION ALL
SELECT name FROM contractors;
输出结果
+---------+
| name |
+---------+
| Alice |
| Bob |
| Charlie |
| Alice |
+---------+
在这个例子中,Alice
出现了两次,因为我们使用了UNION ALL
。