UNION和UNION ALL有什么区别?

UNIONUNION ALL什么区别?


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 ALL示例:

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

结果:

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

UNION和UNION ALL都连接了两个不同SQL的结果。 他们在处理重复的方式上有所不同。

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

  • UNION ALL不会删除重复项,因此它比UNION更快。

  • 注意:使用此命令时,所有选定的列需要具有相同的数据类型。

    示例:如果我们有两个表,1)Employee和2)Customer

  • 员工表数据:
  • 客户表格数据:
  • UNION示例(它删除所有重复记录):
  • 在这里输入图像描述

  • UNION ALL示例(它只是连接记录,不会消除重复,因此它比UNION更快):
  • 在这里输入图像描述


    UNION删除重复项,而UNION ALL则不删除重复项。

    为了删除重复项,必须对结果集进行排序,这可能会影响UNION的性能,具体取决于要排序的数据量以及各种RDBMS参数的设置(对于使用WORKAREA_SIZE_POLICY=AUTO Oracle PGA_AGGREGATE_TARGETSORT_AREA_SIZESOR_AREA_RETAINED_SIZE如果WORKAREA_SIZE_POLICY=MANUAL )。

    基本上,如果它可以在内存中执行,那么排序会更快,但同样适用于数据量的警告。

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

    我会评论第一篇文章,以评论“性能低得多”的评论,但没有足够的声望(点数)来这样做。

    链接地址: http://www.djcxy.com/p/41867.html

    上一篇: What is the difference between UNION and UNION ALL?

    下一篇: Difference between EXISTS and IN in SQL?