📜  Union和Union All之间的区别

📅  最后修改于: 2020-11-19 02:03:15             🧑  作者: Mango

Union和Union All之间的区别

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

什么是联盟运算符?

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

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

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

注意:我们必须知道联合和联接是不同的。

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

下面的视觉表示更清楚地说明了这一点:

要阅读有关Union运算符的更多信息,请单击此处。

什么是Union All?

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

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

联合与联合所有运营商

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

UNION UNION ALL
It combines the result set from multiple tables and returns distinct records into a single result set. It combines the result set from multiple tables and returns all records into a single result set.
Following is the basic syntax of UNION operator:
SELECT column_list FROM table1

UNION
SELECT column_list FROM table2;
Following is the basic syntax of UNION ALL operator:
SELECT column_list FROM table1

UNION ALL
SELECT column_list FROM table2;
It has a default feature to eliminate the duplicate rows from the output. It has no feature to eliminate the duplicate rows from the output.
Its performance is slow because it takes time to find and then remove duplicate records. Its performance is fast because it does not eliminate the duplicate rows.
Most database users prefer to use this operator. Most database users do not prefer to use this operator.

联合和联合所有示例

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

表:学生

表: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运算符返回整个记录而不消除不同的值。