目录
UNION 简介
UNION
是 SQL 中用于将多个 SELECT
语句的结果合并成一个结果集的操作符。它可以将两个或多个查询的结果合并,去除重复的记录,返回一个综合的结果集。通过 UNION
,可以将来自不同表或相同表的查询结果集合并成一个。
UNION
适用于以下场景:
- 合并不同查询的结果,形成一个统一的结果集。
- 将相同列的多次查询结果整合,简化查询过程。
UNION 语法
UNION
的基本语法如下:
SELECT column1, column2, ...
FROM table1
WHERE condition1
UNION
SELECT column1, column2, ...
FROM table2
WHERE condition2;
说明:
SELECT column1, column2, ...
:选择要从每个表中返回的列。FROM table1
和FROM table2
:指定查询的数据表。WHERE condition1
和WHERE condition2
:可选条件,根据需要过滤数据。UNION
:用于将两个查询结果合并。
需要注意的是,UNION
仅返回唯一的结果集,这意味着它会自动去除重复的行。
UNION 使用场景
- 合并多个查询结果:当需要从多个表或多个查询中返回数据,并将这些结果合并为一个统一的输出时,
UNION
非常有用。 - 跨多个表查询:当数据分布在多个表中,且这些表具有相似结构时,
UNION
可以用来将它们合并,以提供一个完整的视图。 - 合并相同类型的数据:当你需要将多次查询的结果合并,并且保证没有重复的记录时,
UNION
是一种理想的选择。 - 数据整合:当查询的结果需要整合,且必须消除重复行时,
UNION
是解决这一问题的标准方法。
UNION 示例
示例 1:基本的 UNION
假设有两张表:employees
和 contractors
,它们都包含 employee_id
和 name
列。我们希望查询所有员工和合同工的名称,并将其合并为一个列表。
表 employees
:
employee_id | name |
---|---|
1 | John |
2 | Jane |
表 contractors
:
employee_id | name |
---|---|
3 | Alice |
4 | Bob |
查询:
SELECT name
FROM employees
UNION
SELECT name
FROM contractors;
结果:
name |
---|
John |
Jane |
Alice |
Bob |
- 这里,
UNION
合并了两个SELECT
查询的结果。注意,它去除了重复的记录,因此如果某些名字在两个表中都有,结果中只会出现一次。
示例 2:带条件的 UNION
假设我们有一个包含员工和合同工的数据库,我们希望分别查询 employees
表中年龄大于 30 的员工,以及 contractors
表中年龄大于 30 的合同工,并将它们合并。
表 employees
:
employee_id | name | age |
---|---|---|
1 | John | 25 |
2 | Jane | 35 |
表 contractors
:
employee_id | name | age |
---|---|---|
3 | Alice | 40 |
4 | Bob | 28 |
查询:
SELECT name, age
FROM employees
WHERE age > 30
UNION
SELECT name, age
FROM contractors
WHERE age > 30;
结果:
name | age |
---|---|
Jane | 35 |
Alice | 40 |
- 在此查询中,
UNION
将两个SELECT
查询的结果合并,去除重复的记录,并返回年龄大于 30 的员工和合同工。
UNION 与 UNION ALL 的区别
1. UNION
:
UNION
会自动去除结果集中的重复记录。- 适用于需要去重的场景。
2. UNION ALL
:
UNION ALL
与UNION
的主要区别在于它不会去除重复的记录。- 它会返回所有查询结果的合并,不管是否有重复的数据。
示例:
假设我们有相同的 employees
和 contractors
表:
SELECT name
FROM employees
UNION ALL
SELECT name
FROM contractors;
结果:
name |
---|
John |
Jane |
Alice |
Bob |
- 使用
UNION ALL
时,所有的记录都会被返回,包括重复的记录。
UNION 注意事项
- 列数和列类型必须相同:在进行
UNION
时,所有SELECT
查询的列数和列类型必须匹配。例如,第一个查询返回两列,第二个查询也必须返回两列,且对应列的数据类型必须兼容。 - 去重操作:
UNION
会自动去重返回的结果集,可能会影响查询性能。如果不需要去重,使用UNION ALL
可以提高查询效率。 - 顺序性:
UNION
会根据每个查询的顺序合并结果集。如果需要按特定顺序排序,应该在UNION
操作后的结果集上使用ORDER BY
。 - 性能问题:
UNION
需要对结果进行去重操作,可能会导致性能问题。使用UNION ALL
可以避免去重,提高查询速度。 - 兼容性:并非所有 SQL 数据库都对
UNION
和UNION ALL
有完全相同的支持,特别是在旧版本的数据库中,某些数据库可能会有差异。
发表回复