我不是問他們之間的區別,我的問題是我們什麼時候需要使用「Union All」?「Union all」有什麼用?
回答
如果您確實需要使用UNION時可能會刪除的多個「副本」行,則可以使用UNION ALL。在查詢結束時它也可以更快,因爲數據庫引擎不需要確定結果集之間的重複內容。
+1用於指定UNION ALL的可能場景 – Christian 2010-10-11 07:02:52
+1用於提及性能 - 這幾乎是至關重要的,需要了解UNION與UNION ALL對於更大表的影響,其中UNION的執行速度將比UNION ALL慢幾個數量級對於大的結果集(因爲在大多數情況下刪除重複意味着建立臨時索引;對於較小的結果集,這不會太昂貴,結果集的大小是返回的行數*) – Unreason 2010-10-11 07:10:11
我會說「可以容忍」多個副本反對「需要」。例如,當你說'WHERE ForeignKey IN(SELECT ID FROM view1 UNION ALL SELECT ID FROM view2)'。你不需要兩者兼顧,但是你可以放心使用 – 2012-06-22 18:33:54
當我們不需要從記錄排除重複的行
- 聯盟將刪除重複
- UNION ALL不不刪除重複
例
SELECT 1 AS foo
UNION
SELECT 1 AS foo
= one row
SELECT 1 AS foo
UNION ALL
SELECT 1 AS foo
= two rows
如果您正在進行大量JOIN並且有冗餘行,您會使用GROUP BY而不是UNION嗎? UNION和DISTINCT有什麼區別? – 2010-10-11 07:05:58
@meder:GROUP BY刪除重複項是濫用:它是爲了聚合。 DISTINCT是每個SELECT。也就是說,我可以有SELECT DISTINCT .. UNION ALL SELECT ...如果需要的話。這意味着去除重複的第一個子句,但是取出UNION上的所有行。 – gbn 2010-10-11 07:25:58
當你需要使用它們時以您的要求結束。 UNION和UNION ALL之間的區別在於UNION ALL不刪除重複的行。
Union all
用於連接多個數據集到一個單一的數據集,但它不會刪除重複
您使用UNION ALL來連接(追加)兩個結果集到一個單一的結果集,當他們有相同的列(數量和類型)。
一個例子可以更清晰:
mysql> select * from tmp1;
+------+
| a |
+------+
| foo1 |
| foo2 |
+------+
2 rows in set (0.00 sec)
mysql> select * from tmp2;
+------+
| a |
+------+
| foo2 |
| foo3 |
| foo4 |
+------+
3 rows in set (0.00 sec)
mysql> select * from tmp1 union select * from tmp2;
+------+
| a |
+------+
| foo1 |
| foo2 | # DUPLICATES REMOVED.
| foo3 |
| foo4 |
+------+
4 rows in set (0.00 sec)
mysql> select * from tmp1 union all select * from tmp2;
+------+
| a |
+------+
| foo1 |
| foo2 |
| foo2 | # DUPLICATES NOT REMOVED.
| foo3 |
| foo4 |
+------+
5 rows in set (0.00 sec)
來到的問題當使用UNION ALL?
如果您不關心結果集是否有重複行或者您知道不會有任何重複項,請使用UNION ALL
而不是UNION
。
爲什麼Union
或Union all
?
Ans: 如果您正在查看來自兩個或更多不同表格(我的意思是關係)的一些數據,那麼您可以使用它。
因爲結果將會是一個表格,並且每個表格都應該有一個關鍵字,並且UNION
可以確保唯一的行,所以理論上應該始終使用UNION
。但是,因爲UNION ALL
不確保唯一行,所以UNION ALL
可以執行得更好,因此如果您可以確定兩個表都已經包含唯一行,那麼在實踐中可能會首選。
相同的邏輯適用於SELECT DISTINCT
和SELECT ALL
之間的選擇,BTW。
默認情況下,UNION將消除重複值。如果用UNIONALL替換UNION,則不會消除重複值。 :)
- 1. 爲什麼UNION ALL有和沒有括號表現不一樣?
- 2. UNION vs UNION ALL的性能
- 3. TSQL union all - error
- 4. 這個UNION ALL mysql查詢有什麼問題?
- 5. 使用UNION ALL和INNER JOIN
- 6. UNION ALL把戲ORACLE
- 7. Postgresql:創建表時,UNION ALL比UNION慢?
- 8. 爲什麼UNION ALL似乎要等兩個查詢結束?
- 9. 爲什麼c#沒有union?
- 10. Getteing與UNION ALL SQL查詢
- 11. MS Access:SQL查詢「Union All」
- 12. 訂購的蜂巢UNION ALL
- 13. 多個表中的UNION ALL
- 14. 如何刪除union all?
- 15. UNION ALL - 獲取表名
- 16. SQL - 如何UNION ALL IF @RowCount
- 17. MySQL的UNION ALL - 值優先
- 18. MySql語法(Join,UNION ALL)?
- 19. 如何讓UNION ALL更快?
- 20. 如何在LINQ中使用union all?
- 21. 在STUFF/XML路徑中使用UNION ALL
- 22. 如何在JPA中使用UNION ALL?
- 23. 應使用哪種Union ALL方法?
- 24. 用UNION ALL填充輸入數據集ALL SQL查詢
- 25. 我使用UNION ALL,那麼我想ORDER BY globaly
- 26. 使用UNION ALL模糊定義的Oracle SQL列所有
- 27. Union All - Union None?僅查找非重複項?
- 28. SQL_CALC_FOUND_ROWS和UNION查詢(而不是UNION ALL)與LIMIT
- 29. Union與Union ALL如果行是唯一的
- 30. union和join有什麼區別?
謝謝,你所有的答案說,只有兩個要點1.)重複行和2)。性能。這意味着我們可以使用其中的任何一個,所以我不明白爲什麼我們不能在這個查詢中使用union。 與TempData的作爲 ( 選擇32 COL1,CHAR(32)如COL2 UNION ALL 選擇COL1 + 1,焦炭(從TempData的COL1 + 1)其中,COL1 <127 ) SELECT * FROM的TempData – 2010-10-11 07:28:14
@Jeevan Bhatt - 當您在查詢中使用'UNION'而不是'UNION ALL'會發生什麼?你在用什麼數據庫? – 2010-10-11 11:01:54
@Jeevan Bhatt - 查看了一下你的查詢我相信有一些語法錯誤會阻止它執行。 CTE中的第一個子查詢缺少一個FROM子句,而第二個子查詢是指CTE內的CTE,這是不允許的。你想要完成什麼? – 2010-10-11 11:06:10