UNION和UNION ALL有什么区别?
" UNION"和" UNION ALL"有什么区别?
解决方案
回答
The basic difference between UNION and UNION ALL is union operation eliminates the duplicated rows from the result set but union all returns all rows after joining.
来自http://zengin.wordpress.com/2007/07/31/union-vs-union-all/
回答
" UNION"会删除重复的记录(结果中的所有列都相同),而" UNION ALL"则不会。
使用" UNION"而不是" UNION ALL"会降低性能,因为数据库服务器必须做其他工作才能删除重复的行,但是通常我们不希望重复(特别是在开发报表时)。
SELECT 'foo' AS bar UNION SELECT 'foo' AS bar
结果:
+-----+ | bar | +-----+ | foo | +-----+ 1 row in set (0.00 sec)
SELECT 'foo' AS bar UNION ALL SELECT 'foo' AS bar
结果:
+-----+ | bar | +-----+ | foo | | foo | +-----+ 2 rows in set (0.00 sec)
回答
Not sure that it matters which database
" UNION"和" UNION ALL"应可在所有SQL Server上使用。
我们应该避免不必要的" UNION",因为它们是巨大的性能泄漏。根据经验,如果不确定使用哪个,请使用" UNION ALL"。
回答
在ORACLE中:UNION不支持BLOB(或者CLOB)列类型,而UNION ALL则支持。
回答
" UNION"会删除重复项,而" UNION ALL"不会删除重复项。
为了删除重复项,必须对结果集进行排序,这可能会影响UNION的性能,具体取决于要排序的数据量以及各种RDBMS参数的设置(对于Oracle的PGA_AGGREGATE_TARGET和WORKAREA_SIZE_POLICY =AUTO
或者SORT_AREA_SIZE
和SOR_AREA_RETAINED_SIZE
(如果WORKAREA_SIZE_POLICY = MANUAL
)。
基本上,如果可以在内存中执行排序,则速度会更快,但是关于数据量的警告同样适用。
当然,如果我们需要返回没有重复的数据,则必须使用UNION,具体取决于数据的来源。
我本来会在第一篇文章中发表评论,以限定"表现差得多"的评论,但声誉(得分)不足。
回答
联合用于从两个表中选择不同的值
其中,all用作选择所有值,包括
表中的重复项