目录

  1. UNION 简介
  2. UNION 语法
  3. UNION 使用场景
  4. UNION 示例
  5. UNION 与 UNION ALL 的区别
  6. UNION 注意事项
  7. 参考资料

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 table1FROM table2:指定查询的数据表。
  • WHERE condition1WHERE condition2:可选条件,根据需要过滤数据。
  • UNION:用于将两个查询结果合并。

需要注意的是,UNION 仅返回唯一的结果集,这意味着它会自动去除重复的行。


UNION 使用场景

  1. 合并多个查询结果:当需要从多个表或多个查询中返回数据,并将这些结果合并为一个统一的输出时,UNION 非常有用。
  2. 跨多个表查询:当数据分布在多个表中,且这些表具有相似结构时,UNION 可以用来将它们合并,以提供一个完整的视图。
  3. 合并相同类型的数据:当你需要将多次查询的结果合并,并且保证没有重复的记录时,UNION 是一种理想的选择。
  4. 数据整合:当查询的结果需要整合,且必须消除重复行时,UNION 是解决这一问题的标准方法。

UNION 示例

示例 1:基本的 UNION

假设有两张表:employeescontractors,它们都包含 employee_idname 列。我们希望查询所有员工和合同工的名称,并将其合并为一个列表。

employees

employee_idname
1John
2Jane

contractors

employee_idname
3Alice
4Bob

查询:

SELECT name
FROM employees

UNION

SELECT name
FROM contractors;

结果:

name
John
Jane
Alice
Bob
  • 这里,UNION 合并了两个 SELECT 查询的结果。注意,它去除了重复的记录,因此如果某些名字在两个表中都有,结果中只会出现一次。

示例 2:带条件的 UNION

假设我们有一个包含员工和合同工的数据库,我们希望分别查询 employees 表中年龄大于 30 的员工,以及 contractors 表中年龄大于 30 的合同工,并将它们合并。

employees

employee_idnameage
1John25
2Jane35

contractors

employee_idnameage
3Alice40
4Bob28

查询:

SELECT name, age
FROM employees
WHERE age > 30

UNION

SELECT name, age
FROM contractors
WHERE age > 30;

结果:

nameage
Jane35
Alice40
  • 在此查询中,UNION 将两个 SELECT 查询的结果合并,去除重复的记录,并返回年龄大于 30 的员工和合同工。

UNION 与 UNION ALL 的区别

1. UNION

  • UNION 会自动去除结果集中的重复记录。
  • 适用于需要去重的场景。

2. UNION ALL

  • UNION ALLUNION 的主要区别在于它不会去除重复的记录。
  • 它会返回所有查询结果的合并,不管是否有重复的数据。

示例:

假设我们有相同的 employeescontractors 表:

SELECT name
FROM employees

UNION ALL

SELECT name
FROM contractors;

结果:

name
John
Jane
Alice
Bob
  • 使用 UNION ALL 时,所有的记录都会被返回,包括重复的记录。

UNION 注意事项

  1. 列数和列类型必须相同:在进行 UNION 时,所有 SELECT 查询的列数和列类型必须匹配。例如,第一个查询返回两列,第二个查询也必须返回两列,且对应列的数据类型必须兼容。
  2. 去重操作UNION 会自动去重返回的结果集,可能会影响查询性能。如果不需要去重,使用 UNION ALL 可以提高查询效率。
  3. 顺序性UNION 会根据每个查询的顺序合并结果集。如果需要按特定顺序排序,应该在 UNION 操作后的结果集上使用 ORDER BY
  4. 性能问题UNION 需要对结果进行去重操作,可能会导致性能问题。使用 UNION ALL 可以避免去重,提高查询速度。
  5. 兼容性:并非所有 SQL 数据库都对 UNIONUNION ALL 有完全相同的支持,特别是在旧版本的数据库中,某些数据库可能会有差异。

参考资料