MySQL Union和Union All区别

UNION 和 UNION ALL 是数据库中用于组合来自多个表的结果集的两个最基本的 SQL 运算符。这些运算符允许我们使用多个 SELECT 查询,检索所需的结果,然后将它们组合成最终输出。在本文中,我们将了解它们之间的不同之处。在进行比较之前,我们将简要讨论这些运算符。

一、什么是Union运算符?

MySQL中的Union运算符允许我们将来自多个 SELECT 查询的两个或多个结果组合成一个结果集。它具有从表中删除重复行的默认功能。此运算符语法始终在第一个SELECT 语句中使用列的名称作为输出的列名。MySQL工会必须遵循以下基本规则:

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

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

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

下图对比Union和Join的区别:

要阅读有关 Union 运营商的更多信息,请单击此处

二、什么是Union All?

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

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

三、Union与Union All运算符

以下比较表快速解释了它们的主要区别:

Union Union All
Union将来自多个表的结果集组合起来,并将不同的记录返回到单个结果集中。 Union 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的性能很快,因为它不会消除重复的行。
大多数数据库用户更喜欢使用此运算符。 大多数数据库用户不喜欢使用此运算符。

四、Union和Union All 示例

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

Student表:

Student2表:

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

SELECT City FROM student  
UNION  
SELECT City FROM student2  
ORDER BY City;  

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

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

SELECT City FROM student  
UNION ALL  
SELECT City FROM student2  
ORDER BY City;  

执行上述语句后,我们将得到以下输出,因为 Union All 运算符返回整个记录而不消除不同的值。

热门文章

优秀文章