UNION和UNION ALL之间的区别是什么?

UNION "和 "UNION ALL "之间有什么区别?

对该问题的评论 (2)
解决办法

UNION'删除重复的记录(结果中的所有列都相同),UNION ALL'不删除。

当使用 "UNION "而不是 "UNION ALL "时,会有性能上的影响,因为数据库服务器必须做额外的工作来删除重复的记录,但通常你不希望有重复的记录(特别是在开发报告时)。

UNION 示例。

SELECT 'foo' AS bar UNION SELECT 'foo' AS bar

结果:

+-----+
| bar |
+-----+
| foo |
+-----+
1 row in set (0.00 sec)

UNION所有的例子。

SELECT 'foo' AS bar UNION ALL SELECT 'foo' AS bar

结果:

+-----+
| bar |
+-----+
| foo |
| foo |
+-----+
2 rows in set (0.00 sec)
评论(13)

UNION和UNION ALL都是将两个不同的SQL的结果连接起来。 它们的不同之处在于处理重复记录的方式。

  • UNION对结果集执行DISTINCT,消除任何重复的记录。

  • UNION ALL不删除重复的记录,因此它比UNION快。

注意:在使用此命令时,所有选择的列都需要是相同的数据类型。

例子:**使用此命令时,所有选择的列需要是相同的数据类型。 如果我们有两个表,1)Employee和2)Customer。

  1. 员工表数据。

![在此输入图像描述][1]

  1. 客户表数据。

![在此输入图像描述][2] 。

  1. UNION 示例 (它删除了所有重复的记录)。

![在此输入图片说明][3]

  1. UNION ALL 例子(它只是连接记录,而不是消除重复的记录,所以比UNION快)。

![在此输入图片描述][4] 。

[1]: http://i.stack.imgur.com/huYEL.png [2]: http://i.stack.imgur.com/FEaKe.png [3]: http://i.stack.imgur.com/lLiS1.png [4]: http://i.stack.imgur.com/n5gvq.png

评论(1)

UNION'会删除重复的数据,而UNION ALL'不会。

为了去除重复的数据,必须对结果集进行排序,这*可能会对UNION的性能产生影响,这取决于被排序的数据量以及各种RDBMS参数的设置(对于OraclePGA_AGGREGATE_TARGET来说,如果WORKAREA_SIZE_POLICY=AUTO或者SORT_AREA_SIZESOR_AREA_RETAINED_SIZE如果WORKAREA_SIZE_POLICY=MANUAL)。

基本上,如果能在内存中进行排序,速度会更快,但关于数据量的注意事项同样适用。

当然,如果你需要返回的数据没有重复,那么你*必须使用UNION,这取决于你的数据来源。

我本想在第一篇文章中评论一下,以限定"是性能更低的&quot。 的评论,但是没有足够的信誉(积分)来做。

评论(2)

在ORACLE中。 UNION不支持BLOB(或CLOB)列类型,UNION ALL支持。

评论(0)

UNION和UNION ALL的基本区别在于,union操作从结果集中消除了重复的记录,而union all在连接后返回所有记录。

从http://zengin.wordpress.com/2007/07/31/union-vs-union-all/

评论(0)

你可以通过运行这样的查询来避免重复,并且仍然比UNION DISTINCT(实际上和UNION一样)运行得快。

SELECT * FROM mytable WHERE a=X UNION ALL SELECT * FROM mytable WHERE b=Y AND a!=X

请注意AND a!=X部分。 这比UNION快得多。

评论(2)

我只想对这里的讨论说两句。 我们可以把 "UNION "运算符理解为一个纯粹的、面向SET的UNION--如 集A={2,4,6,8},集B={1,2,3,4},A UNION B={1,2,3,4,6,8}。

当处理集合时,你不希望数字2和4出现两次,因为一个元素要么是,要么不是在一个集合中。

但在SQL的世界里,你可能想把两个集合中的所有元素放在一个"bag&quot中。 {2,4,6,8,1,2,3,4}. 为此,T-SQL提供了操作符UNION ALL

评论(2)

联合体 "UNION "命令用于从两张表中选择相关信息,与 "JOIN "命令很相似。 但是,当使用UNION命令时,所有被选择的列必须是相同的数据类型。 使用UNION命令时,只选择不同的值。

UNION ALL UNION ALL命令与UNION命令相同,只是UNION ALL选择所有值。

UnionUnion all之间的区别是Union all不会消除重复的行,而只是从所有符合你的查询细节的表中提取所有行,并将它们合并到一个表中。

UNION语句有效地对结果集做了一个SELECT DISTINCT。 如果你知道从你的联合中返回的所有记录都是唯一的,请使用UNION ALL来代替,它能提供更快的结果。

评论(0)

不确定哪个数据库重要

UNIONUNION ALL应该在所有的SQL服务器上工作。

你应该避免不必要的 "UNION",它们是巨大的性能泄漏。作为经验法则,如果你不确定使用哪一个,就使用 "UNION ALL"。

评论(4)

用维恩图来理解就好了。

这里是[链接][1]的来源。 有一个很好的描述。

[![此处输入图片描述][2]][2] 。

[1]: https://vladimiroracle.wordpress.com/sql/set-operators-union-union-all-minus-intersect/ [2]: http://i.stack.imgur.com/M0gvT.png

评论(1)

联合用于从两张表中选择不同的值。 其中,union all用于选择所有值,包括 重复的表

评论(0)

UNION - 结果是不同的记录
<br&gt。 而
<br&gt。 UNION ALL - 结果是所有的记录,包括重复的记录。

两者都是阻塞操作符,因此我个人更喜欢使用JOINS,而不是阻塞操作符(UNION, INTERSECT, UNION ALL等)。 )。

为了说明为什么联合操作比全部联合操作表现差,请看下面的例子。

CREATE TABLE #T1 (data VARCHAR(10))

INSERT INTO #T1
SELECT 'abc'
UNION ALL
SELECT 'bcd'
UNION ALL
SELECT 'cde'
UNION ALL
SELECT 'def'
UNION ALL
SELECT 'efg'

CREATE TABLE #T2 (data VARCHAR(10))

INSERT INTO #T2
SELECT 'abc'
UNION ALL
SELECT 'cde'
UNION ALL
SELECT 'efg'

[![在此输入图像描述][1]][1]

以下是UNION ALL和UNION操作的结果

[![在此输入图像描述][2]][2]

** UNION语句实际上是在结果集上进行SELECT DISTINCT。 如果你知道从你的联合中返回的所有记录都是唯一的,请使用UNION ALL,它能提供更快的结果。

使用UNION的结果是在执行计划中进行区分排序操作。 证明这句话的证明如下所示。

[![在此输入图像描述][3]][3] 。

[1]: http://i.stack.imgur.com/kdD4p.jpg [2]: http://i.stack.imgur.com/LpjWD.jpg [3]: http://i.stack.imgur.com/QmQlL.jpg

评论(4)

(摘自Microsoft SQL Server Book Online)

UNION [ALL] &gt.表示将多个结果集合并并作为单一结果集返回。 指定将多个结果集合并并作为一个结果集返回。

ALL

将所有行纳入结果。 这包括重复的记录。 如果没有指定,重复的记录将被删除。

如果使用 "UNION",则会花费太长的时间,因为像 "DISTINCT "这样的重复行查找方法会应用在结果中。

SELECT * FROM Table1
UNION
SELECT * FROM Table2

相当于:

SELECT DISTINCT * FROM (
    SELECT * FROM Table1
    UNION ALL
    SELECT * FROM Table2) DT

在结果上应用DISTINCT的一个副作用是对结果进行排序操作

UNION ALL的结果会显示为_任意顺序,但是UNION的结果会显示为ORDER BY 1, 2, 3, ..., n (n = Tables的列数)。 当你没有任何重复的行时,你可以看到这个副作用。

评论(0)

我补充一个例子。

UNION中,它与不同的--&gt.合并,速度较慢,因为需要比较。 较慢,因为它需要比较(在Oracle SQL developer中,选择查询,按F10查看成本分析)。

UNION ALL,它是在没有 distinct --&gt.的情况下进行合并。 更快。

SELECT to_date(sysdate, 'yyyy-mm-dd') FROM dual
UNION
SELECT to_date(sysdate, 'yyyy-mm-dd') FROM dual;

SELECT to_date(sysdate, 'yyyy-mm-dd') FROM dual
UNION ALL
SELECT to_date(sysdate, 'yyyy-mm-dd') FROM dual;
评论(0)

假设你有两个表教师 & 学生

两者都有4列不同的名称,像这样。

Teacher - ID(int), Name(varchar(50)), Address(varchar(50)), PositionID(varchar(50))

[![在此输入图像描述][1]][1]

Student- ID(int), Name(varchar(50)), Email(varchar(50)), PositionID(int)

[![在此输入图像描述][2]][2]

**你可以对这两个具有相同列数的表使用UNION或UNION ALL,但它们的名称或数据类型不同。 但它们的名称或数据类型不同。

当你对两个表进行 "UNION "操作时,它忽略了所有重复的条目(一个表的所有列值与另一个表相同)。 就像这样

SELECT * FROM Student
UNION
SELECT * FROM Teacher

结果将是

[![在此输入图像描述][3]][3]

当你对两张表进行 "UNION ALL "操作时,它将返回所有重复的条目(如果两张表中任何一行的列值有差异)。 就像这样

SELECT * FROM Student
UNION ALL
SELECT * FROM Teacher

产出 [![在此输入图像描述][4]][4]

性能:

很明显,UNION ALL的性能比UNION好,因为他们做了额外的任务来删除重复的值。 你可以在MSSQLctrl+L执行估计时间中查看。

[1]: http://i.stack.imgur.com/8uYB7.png [2]: http://i.stack.imgur.com/lyCoB.png [3]: http://i.stack.imgur.com/FNzdi.png [4]: http://i.stack.imgur.com/DTBLt.png

评论(1)

****"UNION "将两个结构上兼容的表的内容合并为一个合并表。

  • 区别。

*"UNION "和 "UNION ALL "之间的区别是 "UNION "将省略重复的记录,而 "UNION ALL "将包括重复的记录。

Union结果集按升序排序,而UNION ALL结果集不排序

UNION对其结果集执行DISTINCT,因此它将消除任何重复的记录。 而UNION ALL不会删除重复的记录,因此它比UNION快。

: *UNION ALL的性能通常会比UNION好,因为UNION需要服务器做额外的工作来删除任何重复的记录。 因此,在确定不会有任何重复的情况下,或在有重复不是问题的情况下,出于性能考虑,建议使用 "UNION ALL"。

评论(2)

还有一件事,我想补充一下

Union:- 结果集按升序排列。

Union All:- 结果集不排序。 二 查询输出只是被追加。

评论(3)

简单来说,UNION和UNION ALL的区别在于,UNION会省略重复的记录,而UNION ALL会包含重复的记录。

评论(0)

Sql中联合与联合ALL的区别

什么是SQL中的联合?

UNION操作符用于将两个或多个数据集的结果集合并。

Each SELECT statement within UNION must have the same number of columns
The columns must also have similar data types
The columns in each SELECT statement must also be in the same order

[联盟VS联盟全部有实例][1]

[1]: http://www.sqlfeathers.com/2018/05/difference-between-union-vs-union-all.html

评论(0)

重要! Oracle和Mysql之间的区别。 比方说,t1 t2之间没有重复的行,但他们有重复的行个别。 例子:t1有2017年的销售额,t2有2018年的销售额。 t1有2017年的销售额,t2有2018年的销售额。

SELECT T1.YEAR, T1.PRODUCT FROM T1

UNION ALL

SELECT T2.YEAR, T2.PRODUCT FROM T2

在ORACLE UNION ALL中,从两张表中获取所有行。 在MySQL中也会出现同样的情况。

然而:然而:

SELECT T1.YEAR, T1.PRODUCT FROM T1

UNION

SELECT T2.YEAR, T2.PRODUCT FROM T2

ORACLE中,UNION从两个表中获取所有的记录,因为t1和t2之间没有重复的值。 另一方面,在MySQL中,结果集的行数较少,因为在表t1和表t2中会有重复的行。

评论(0)