MySQL Union

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

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

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

  • 要使用的所有表的列数和顺序应相同。
  • 数据类型必须与每个 SELECT 查询的相应位置兼容。
  • 不同 SELECT 查询中选择的列名必须顺序相同。

MySQL Union 语法

以下是 MySQL 中 Union 运算符的语法

我们可以通过以下可视化表示来理解 Union 运算符

MySQL Union

在上图中,我们可以看到 Union 运算符删除了重复的行,只返回唯一的行。

Union 与 Join

Union 和 Join 子句是不同的,因为 union 总是垂直地组合结果集,而 join 则水平地附加输出。我们可以通过以下可视化表示来理解它

MySQL Union

MySQL Union 示例

让我们创建两个表,看看 Union 运算符在 MySQL 中是如何工作的。

表:student1

MySQL Union

表:student2

MySQL Union

以下语句通过合并两个表,返回一个包含学生姓名科目的结果集。当您执行此语句时,您会注意到,如果学生姓名和科目在两个表中具有相同的字段,那么每个字段将只列出一次。这是因为 Union 运算符只返回不同的值。

执行上述语句后,我们将得到以下输出。

MySQL Union

在上面的输出中,您可以看到 MySQL Union 使用结果集的列名标题与第一个 SELECT 语句的列名相同。有时您想用不同的标题更改输出列名的标题。我们可以通过在第一个 SELECT 语句中使用列别名来做到这一点。

以下示例更清楚地说明了这一点

它将给出以下输出,其中列名标题分别从“stud_name”更改为“student_name”和“subject”到“course”。

MySQL Union

MySQL Union 与 ORDER BY

如果您想使用 union 运算符对查询返回的结果进行排序,您需要在最后一个 SELECT 语句中使用 ORDER BY 子句。我们可以将每个 SQL SELECT 查询放在括号中,然后像下面的示例所示,在最后一个 SELECT 语句中使用 ORDER BY 子句

成功执行上述语句后,我们将得到以下输出,该输出根据获得的成绩按升序对学生姓名和科目进行排序

MySQL Union

MySQL Union All

此运算符通过将来自多个 SELECT 查询的两个或多个结果合并到一个结果集中来返回所有行。它不会从结果集中删除重复的行。

我们可以通过以下图形表示来理解它

MySQL Union

Union 和 Union All 运算符之间的区别在于,“Union”将来自两个或多个表的所有不同行(消除重复行)返回到一个单一的输出中。相比之下,“Union All”返回所有行,包括重复的行。

语法

以下是 MySQL 中 Union 运算符的语法

示例

让我们以前面创建的表(student1 和 student2)为例,了解 Union All 运算符在 MySQL 中是如何工作的。

以下语句返回所有学生姓名、科目和成绩,包括单个结果中的所有重复行。它还使用 ORDER BY 子句根据获得的成绩按升序对学生姓名进行排序。

当您执行上述语句时,您将得到以下输出,该输出包含结果集中的所有重复行

MySQL Union
下一主题Union vs Union All