Frage Was ist der Unterschied zwischen UNION und UNION ALL?


Was ist der Unterschied zwischen UNION und UNION ALL?


1112
2017-09-08 15:19


Ursprung


Antworten:


UNION entfernt doppelte Datensätze (wobei alle Spalten in den Ergebnissen identisch sind), UNION ALL nicht.

Es gibt einen Leistungseinbruch bei der Verwendung UNION Anstatt von UNION ALL, da der Datenbankserver zusätzliche Arbeit leisten muss, um die doppelten Zeilen zu entfernen, aber normalerweise möchten Sie die Duplikate nicht (besonders bei der Entwicklung von Berichten).

UNION Beispiel:

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

Ergebnis: 

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

UNION ALLE Beispiel:

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

Ergebnis:

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

1371
2017-10-14 16:09



Sowohl UNION als auch UNION ALL verketten das Ergebnis von zwei verschiedenen SQL. Sie unterscheiden sich in der Art, wie sie mit Duplikaten umgehen.

  • UNION führt eine DISTINCT-Operation für die Ergebnismenge durch und eliminiert so doppelte Zeilen.

  • UNION ALL entfernt keine Duplikate und ist daher schneller als UNION.

Hinweis: Bei Verwendung dieser Befehle müssen alle ausgewählten Spalten denselben Datentyp haben.

Beispiel: Wenn wir zwei Tabellen haben, 1) Mitarbeiter und 2) Kunde

  1. Mitarbeiter-Tabellendaten:

enter image description here

  1. Kundentabelle Daten:

enter image description here

  1. UNION Beispiel (Es entfernt alle doppelten Datensätze):

enter image description here

  1. UNION ALL Beispiel (Es werden nur Datensätze verknüpft, Dubletten werden nicht entfernt, daher ist es schneller als UNION):

enter image description here


234
2017-09-18 12:34



UNION entfernt Duplikate, während UNION ALL nicht.

Um Duplikate zu entfernen, muss die Ergebnismenge sortiert werden kann Auswirkungen auf die Leistung der UNION haben, abhängig von der Menge der zu sortierenden Daten und den Einstellungen verschiedener RDBMS - Parameter (Für Oracle PGA_AGGREGATE_TARGET mit WORKAREA_SIZE_POLICY=AUTO oder SORT_AREA_SIZE und SOR_AREA_RETAINED_SIZE ob WORKAREA_SIZE_POLICY=MANUAL ).

Grundsätzlich ist die Sortierung schneller, wenn sie im Speicher ausgeführt werden kann, aber die gleiche Einschränkung bezüglich der Datenmenge gilt.

Wenn Sie Daten benötigen, die ohne Duplikate zurückgegeben werden, dann natürlich Muss Verwenden Sie UNION, abhängig von der Quelle Ihrer Daten.

Ich hätte den ersten Beitrag kommentiert, um den "viel weniger performant" -Kommentar zu qualifizieren, aber ich habe nicht genügend Reputation (Punkte), um dies zu tun.


42
2017-09-08 17:10



In ORACLE: UNION unterstützt keine BLOB- (oder CLOB-) Spaltentypen, UNION ALL tut dies auch.


27
2017-09-08 15:20



Der grundlegende Unterschied zwischen UNION und UNION ALL besteht darin, dass die union-Operation die doppelten Zeilen aus der Ergebnismenge eliminiert, aber union alle alle Zeilen nach dem Verbinden zurückgibt.

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


18
2017-08-13 00:03



Du kannst Duplikate vermeiden und immer noch viel schneller als UNION DISTINCT laufen (was genau dasselbe wie UNION ist), indem du eine Abfrage wie diese ablegst:

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

Beachten Sie die AND a!=X Teil. Das ist viel schneller als UNION.


12
2018-06-06 09:55



Um nur meine zwei Cent zu der Diskussion hier hinzuzufügen: Man könnte das verstehen UNION Operator als eine reine, SET-orientierte UNION - z.B. setze A = {2,4,6,8}, setze B = {1,2,3,4}, A UNION B = {1,2,3,4,6,8}

Wenn Sie mit Sets arbeiten, möchten Sie nicht, dass die Nummern 2 und 4 zweimal als Element erscheinen ist oder ist nicht in einem Set.

In der Welt von SQL möchten Sie vielleicht alle Elemente aus den beiden Sets in einem "Beutel" {2,4,6,8,1,2,3,4} sehen. Und zu diesem Zweck bietet T-SQL dem Betreiber an UNION ALL.


12
2017-08-16 16:50



UNION
Das UNION Der Befehl wird verwendet, um verwandte Informationen aus zwei Tabellen auszuwählen JOIN Befehl. Bei Verwendung der UNION Befehl Alle ausgewählten Spalten müssen vom selben Datentyp sein. Mit UNIONEs werden nur bestimmte Werte ausgewählt.

UNION ALLE
Das UNION ALL Befehl ist gleich dem UNION Befehl, außer das UNION ALL Wählt alle Werte aus.

Der Unterschied zwischen Union und Union all ist das Union all löscht doppelte Zeilen nicht, sondern zieht nur alle Zeilen aus allen Tabellen, die Ihren Abfrageeigenschaften entsprechen, und kombiniert sie zu einer Tabelle.

EIN UNION Aussage macht effektiv a SELECT DISTINCT auf den Ergebnissen eingestellt. Wenn Sie wissen, dass alle zurückgegebenen Datensätze aus Ihrer Vereinigung eindeutig sind, verwenden Sie UNION ALL stattdessen gibt es schnellere Ergebnisse.


9
2017-09-08 15:43