Union 与 Union All 的区别

2025年3月17日 | 阅读 3 分钟

UNION 和 UNION ALL 是数据库中最常用的两个 SQL 运算符,用于合并多个表的查询结果集。这些运算符允许我们使用多个 SELECT 查询,检索所需结果,然后将它们合并为最终输出。在本文中,我们将探讨它们之间的区别。在进行比较之前,我们将简要介绍这些运算符。

什么是 Union 运算符?

MySQL Union 运算符允许我们将来自多个 SELECT 查询的两个或多个结果合并到一个结果集中。它有一个默认功能,即删除表中的重复行。该运算符的语法始终使用第一个 SELECT 语句中的列名作为输出的列名。

MySQL Union 必须遵循以下基本规则

  • 所有查询中的列数和顺序应相同。
  • 每个 SELECT 查询的相应列位置必须具有兼容的数据类型。
  • 不同 SELECT 查询中选择的列名必须按相同顺序排列。
  • 第一个 SELECT 查询的列名将是输出的列名。

注意:我们必须知道 Union 和 Join 是不同的。

  1. JOIN 合并来自多个不同表的数据,而 UNION 合并来自多个相似表的数据。
  2. JOIN 水平追加输出,而 UNION 垂直合并结果集。

以下可视化表示更清楚地解释了这一点

Union vs Union All

要了解有关 Union 运算符的更多信息,请点击此处

什么是 Union All?

UNION ALL 运算符将来自多个 SELECT 查询的两个或多个结果合并,并将所有记录返回到一个结果集中。它不会删除 SELECT 语句输出中的重复行。

我们可以通过以下可视化表示来理解它。

Union vs Union All

Union 与 Union All 运算符

下表以快捷的方式解释了它们的主要区别

UNIONUNION ALL
它合并来自多个表的查询结果集,并返回不重复的记录到一个结果集中。它合并来自多个表的查询结果集,并返回所有记录到一个结果集中。
以下是 UNION 运算符的基本语法
SELECT column_list FROM table1
UNION
SELECT column_list FROM table2;
以下是 UNION ALL 运算符的基本语法
SELECT column_list FROM table1
UNION ALL
SELECT column_list FROM table2;
它有一个默认功能,可以消除输出中的重复行。它没有消除输出中重复行的功能。
它的性能较慢,因为它需要时间来查找然后删除重复记录。它的性能较快,因为它不消除重复行。
大多数数据库用户倾向于使用此运算符。大多数数据库用户不倾向于使用此运算符。

Union 和 Union All 示例

让我们通过一个示例来理解 Union 和 Union All 运算符之间的区别。假设我们有一个名为“Student”和“Student2”的表,其中包含以下数据

表:Student

Union vs Union All

表:Student2

Union vs Union All

以下 SQL 语句使用 UNION 查询返回两个表中的不重复城市名称

执行上述语句后,我们将获得以下输出,因为 Union 运算符只返回不重复的值。

Union vs Union All

以下 SQL 语句使用 UNION ALL 查询返回所有城市名称,包括重复项

执行上述语句后,我们将获得以下输出,因为 Union All 运算符在不消除重复值的情况下返回所有记录。

Union vs Union All
下一个主题MySQL VARCHAR