MySQL Union和Union All区别
UNION 和 UNION ALL 是数据库中用于组合来自多个表的结果集的两个最基本的 SQL 运算符。这些运算符允许我们使用多个 SELECT 查询,检索所需的结果,然后将它们组合成最终输出。在本文中,我们将了解它们之间的不同之处。在进行比较之前,我们将简要讨论这些运算符。
一、什么是Union运算符?
MySQL中的Union运算符允许我们将来自多个 SELECT 查询的两个或多个结果组合成一个结果集。它具有从表中删除重复行的默认功能。此运算符语法始终在第一个SELECT 语句中使用列的名称作为输出的列名。MySQL工会必须遵循以下基本规则:
- 在所有查询中,列的数量和顺序应该相同。
- 每个选择查询的对应列位置必须具有兼容的数据类型。
- 在不同的 SELECT 查询中选择的列名必须是相同的顺序。
- 第一个 SELECT 查询的列名将是输出的列名。
注意:我们必须知道 Union 和 Join 是不同的。
- JOIN 组合来自多个不同表的数据,而 UNION 组合来自多个相似表的数据。
- 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 运算符返回整个记录而不消除不同的值。
热门文章
优秀文章