Was ist der Unterschied zwischen UNION und UNION ALL?
Frage
Was ist der Unterschied zwischen UNION
und UNION ALL
?
Lösung
UNION
entfernt doppelte Einträge (wo alle Spalten, in der die Ergebnisse sind die gleichen), UNION ALL
nicht.
Es ist ein performance-hit, wenn mit UNION
statt UNION ALL
, da der Datenbank-server muss zusätzliche Arbeit zu entfernen Sie doppelte Zeilen, aber in der Regel Sie tun nicht wollen die Duplikate (vor allem bei der Entwicklung von reports).
UNION Beispiel:
SELECT 'foo' AS bar UNION SELECT 'foo' AS bar
Ergebnis:
+-----+
| bar |
+-----+
| foo |
+-----+
1 row in set (0.00 sec)
UNION ALL Beispiel:
SELECT 'foo' AS bar UNION ALL SELECT 'foo' AS bar
Ergebnis:
+-----+
| bar |
+-----+
| foo |
| foo |
+-----+
2 rows in set (0.00 sec)
Andere Tipps
Sowohl UNION und UNION ALL verketten, das Ergebnis von zwei verschiedenen SQL-Anweisungen aus.Sie unterscheiden sich in der Art, wie Sie Duplikate verarbeiten.
UNION führt eine AUSGEPRÄGTE auf das Ergebnis gesetzt, sodass keine doppelten Zeilen.
UNION ALL keine Duplikate entfernen, und es daher schneller als die UNION.
Hinweis: Bei der Verwendung dieser Befehle alle ausgewählten Spalten müssen denselben Datentyp haben.
Beispiel:Wenn wir haben zwei Tabellen, 1) Mitarbeiter und 2) der Kunde
- Employee-Tabelle Daten:
- Customer-Tabelle Daten:
- UNION Beispiel (Es entfernt alle doppelten Datensätze):
- UNION ALL Beispiel (Es ist einfach verketten Datensätze, nicht beseitigen Sie Duplikate, so dass es schneller als UNION):
UNION
entfernt Duplikate, in der Erwägung, dass UNION ALL
nicht.
Um Duplikate entfernen der Ergebnismenge müssen sortiert werden, und diese Mai einen Einfluss auf die Leistungsfähigkeit der UNION, je nach der Menge der Daten, die sortiert wird, und die Einstellungen der verschiedenen RDBMS-Parameter ( Für Oracle PGA_AGGREGATE_TARGET
mit WORKAREA_SIZE_POLICY=AUTO
oder SORT_AREA_SIZE
und SOR_AREA_RETAINED_SIZE
wenn WORKAREA_SIZE_POLICY=MANUAL
).
Im Grunde, ist die Art schneller, wenn es kann durchgeführt werden in Erinnerung, aber den gleichen Nachteil des Datenvolumens gilt.
Natürlich, wenn Sie benötigen die Daten zurückgegeben, ohne Duplikate dann Sie muss verwenden Sie UNION, abhängig von der Quelle der Daten.
Ich würde kommentiert haben den ersten post zu qualifizieren ", ist viel weniger performant" Kommentar, aber nicht genügend Ruf (Punkte) zu tun.
In ORACLE:UNION unterstützt nicht BLOB (oder CLOB) Spaltentypen, UNION ALL nicht.
Der grundlegende Unterschied zwischen UNION und UNION ALL union " operation beseitigt die doppelten Zeilen aus der Ergebnismenge, aber union all gibt alle Zeilen nach dem Beitritt.
von http://zengin.wordpress.com/2007/07/31/union-vs-union-all/
Vermeiden Sie Duplikate und noch viel schneller laufen als UNION DISTINCT (das ist eigentlich dasselbe wie UNION), die durch ausführen der Abfrage wie diese:
SELECT * FROM mytable WHERE a=X UNION ALL SELECT * FROM mytable WHERE b=Y AND a!=X
Beachten Sie die AND a!=X
Teil.Dies ist viel schneller dann die UNION.
Nur meine zwei Cent hinzu, um die Diskussion hier:man konnte verstehen, die UNION
Betreiber ist eine Reine, SET-orientierte UNION - z.B.set A={2,4,6,8}, B={1,2,3,4}, A UNION B = {1,2,3,4,6,8}
Beim Umgang mit Mengen, die Sie würde nicht wollen zahlen 2 und 4 erscheinen zweimal, als ein element entweder ist oder nicht in einem Satz.
In die Welt von SQL, obwohl, möchten Sie vielleicht, um zu sehen, alle Elemente, die aus den beiden Sätzen, die zusammen in einer "Tasche" {2,4,6,8,1,2,3,4}.Und für diesen Zweck T-SQL bietet der Betreiber UNION ALL
.
UNION
Die UNION
Befehl verwendet wird, um Informationen aus zwei Tabellen, ähnlich wie die JOIN
Befehl.Allerdings, wenn Sie die UNION
Befehl alle selektierten Spalten müssen denselben Datentyp haben.Mit UNION
, nur unterschiedliche Werte ausgewählt werden.
UNION ALL
Die UNION ALL
Befehl ist gleich der UNION
Befehl, mit der Ausnahme, dass UNION ALL
wählt alle Werte.
Der Unterschied zwischen Union
und Union all
ist, dass Union all
nicht doppelte Zeilen entfernen, sondern es zieht Sie alle Zeilen aus allen Tabellen, die für Ihre Abfrage Besonderheiten und vereint Sie in eine Tabelle ein.
Ein UNION
Anweisung effektiv ist eine SELECT DISTINCT
auf die Ergebnisse setzen.Wenn Sie wissen, dass alle Datensätze zurückgegeben, sind einzigartig von Ihrer union-Nutzung UNION ALL
statt, es gibt schnellere Ergebnisse.
Nicht sicher, dass es darauf ankommt, in welcher Datenbank
UNION
und UNION ALL
sollte auf allen SQL-Servern.
Sie sollten es vermeiden, unnötige UNION
s Sie werden enormen performance-Leck.Als Faustregel gilt verwenden UNION ALL
wenn Sie nicht sicher sind, welche zu verwenden.
union wird verwendet, um wählen Sie verschiedene Werte aus zwei Tabellen wo, wie union all verwendet wird, um alle Werte inklusive Duplikate aus den Tabellen
UNION - Ergebnisse in verschiedene records
während
UNION - Ergebnisse, die Sie in alle Datensätze einschließlich der Duplikate.
Beide sind blockierende Operatoren und daher habe ich persönlich lieber mit JOINS über Blockierende Operatoren(UNION, INTERSECT, UNION, etc. jederzeit.
Um zu verdeutlichen, weshalb die Union-operation schlecht im Vergleich zu Union Kasse-das folgende Beispiel.
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'
Im folgenden sind die Ergebnisse der UNION-und UNION-Operationen.
Einer UNION-Anweisung effektiv macht ein SELECT DISTINCT auf die Ergebnisse setzen.Wenn Sie wissen, dass alle Datensätze zurückgegeben, sind einzigartig von Ihrer union, die Verwendung von UNION ALL statt, es gibt schnellere Ergebnisse.
Verwendung von UNION-Ergebnisse in Distinct Art Operationen im Ausführungsplan.Beweis zum Beweis dieser Aussage ist unten dargestellt:
(Microsoft SQL Server Online Buchen)
UNION [ALL]
Gibt an, dass mehrere Ergebnis-sets miteinander kombiniert werden und kehrte als ein einzelnes ResultSet.
ALLE
Enthält alle Zeilen in das Ergebnis.Diese Duplikate enthält.Wenn nicht angegeben, werden doppelte Zeilen entfernt.
UNION
wird zu lange dauern wie eine doppelte Zeilen finden wie DISTINCT
angewandt auf die Ergebnisse.
SELECT * FROM Table1
UNION
SELECT * FROM Table2
ist äquivalent zu:
SELECT DISTINCT * FROM (
SELECT * FROM Table1
UNION ALL
SELECT * FROM Table2) DT
Eine Nebenwirkung der Anwendung
DISTINCT
über die Ergebnisse ist eine Sortieren Betrieb auf die Ergebnisse.
UNION ALL
Ergebnisse werden angezeigt beliebig um auf die Ergebnisse, Aber UNION
Ergebnisse werden angezeigt ORDER BY 1, 2, 3, ..., n (n = column number of Tables)
angewendet auf die Ergebnisse.Sie sehen diese Seite, wenn Sie haben keine doppelte Reihe.
Es ist gut zu verstehen, mit einem Venn-diagramm.
hier ist die link auf die Quelle.Es ist eine gute Beschreibung.
Ich füge ein Beispiel,
UNION, es ist die Verschmelzung mit deutlichen --> langsamer, weil Sie müssen vergleichen (In Oracle SQL developer, wählen Sie Abfrage, drücken Sie die Taste F10, um zu sehen, Kosten-Analyse).
UNION ALL, es ist die Verschmelzung ohne deutliche --> schneller.
SELECT to_date(sysdate, 'yyyy-mm-dd') FROM dual
UNION
SELECT to_date(sysdate, 'yyyy-mm-dd') FROM dual;
und
SELECT to_date(sysdate, 'yyyy-mm-dd') FROM dual
UNION ALL
SELECT to_date(sysdate, 'yyyy-mm-dd') FROM dual;
UNION
führt den Inhalt von zwei strukturell-kompatible Tabellen in einer einzigen Tabelle kombiniert.
- Unterschied:
Der Unterschied zwischen UNION
und UNION ALL
ist, dass UNION will
ohne doppelte Datensätze in der Erwägung, dass UNION ALL
gehören Sie doppelte Datensätze.
Union
Ergebnismenge in aufsteigender Reihenfolge sortiert in der Erwägung, dass UNION ALL
ResultSet ist nicht sortiert
UNION
führt eine DISTINCT
auf Ihr Ergebnis einstellen, so wird es zu beseitigen Sie alle doppelten Zeilen.In der Erwägung, dass UNION ALL
nicht Duplikate entfernen und ist daher schneller als UNION
.*
Hinweis: Die Leistung UNION ALL
wird in der Regel besser als UNION
, da UNION
benötigt der server zu tun, das weitere arbeiten alle Duplikate zu entfernen.Also, in Fällen, in denen es sicher ist, dass es keine Duplikate, oder wo Duplikate ist kein problem, die Verwendung von UNION ALL
zu empfehlen wäre aus performance-Gründen.
Angenommen, Sie haben zwei Tabellen Lehrer & Student
Beide haben 4 Spalte mit verschiedenen Namen wie diese
Teacher - ID(int), Name(varchar(50)), Address(varchar(50)), PositionID(varchar(50))
Student- ID(int), Name(varchar(50)), Email(varchar(50)), PositionID(int)
Sie können gelten UNION oder UNION ALL für diejenigen, die zwei Tabellen die gleiche Anzahl von Spalten.Sie haben aber verschiedene Namen oder Datentyp.
Wenn Sie sich bewerben UNION
Betrieb über 2 Tabellen, vernachlässigt alle doppelten Einträge(alle Spalten mit dem Wert der Zeile in einer Tabelle ist dieselbe von einer anderen Tabelle).Wie diese
SELECT * FROM Student
UNION
SELECT * FROM Teacher
das Ergebnis wird sein
Wenn Sie sich bewerben UNION ALL
Betrieb auf 2 Tischen, es gibt alle Einträge mit "duplizieren" (wenn es einen Unterschied zwischen jeder Spalte Wert der Zeile in 2 Tabellen).Wie diese
SELECT * FROM Student
UNION ALL
SELECT * FROM Teacher
Leistung:
Offensichtlich UNION ALL die Leistung ist besser, dass UNION wie Sie eine zusätzliche Aufgabe zu entfernen Sie die doppelten Werte.Sie können überprüfen, ob Ausführung Geschätzte Zeit durch drücken Strg+L am MSSQL
Eine weitere Sache, die ich hinzufügen möchte-
Union:- Ergebnismenge in aufsteigender Reihenfolge sortiert.
Union All:- Result-set wird nicht sortiert.zwei Abfrage-Ausgabe wird einfach angehängt.
In sehr einfachen Worten den Unterschied zwischen UNION und UNION ALL ist, dass die UNION ohne doppelte Datensätze in der Erwägung, dass die UNION ALL gehören doppelte Datensätze.
Unterschied Zwischen Union Vs Union ALL In Sql
Was Ist Union In SQL?
Der UNION-operator wird verwendet, um zu kombinieren, das Ergebnis von zwei oder mehr Daten-set .
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
Wichtig!Unterschied zwischen Oracle-und Mysql:Nehmen wir an, dass t1 t2 haben keine doppelten Zeilen zwischen Ihnen, aber Sie haben doppelte Zeilen individuell.Beispiel:t1 hat sich der Umsatz von 2017 und t2 von 2018
SELECT T1.YEAR, T1.PRODUCT FROM T1
UNION ALL
SELECT T2.YEAR, T2.PRODUCT FROM T2
In ORACLE UNION ALL-ruft alle Zeilen aus beiden Tabellen.Das gleiche geschieht in MySQL.
Jedoch:
SELECT T1.YEAR, T1.PRODUCT FROM T1
UNION
SELECT T2.YEAR, T2.PRODUCT FROM T2
In ORACLE, Die UNION ruft alle Zeilen aus beiden Tabellen, weil es keine doppelten Werte zwischen t1 und t2.Auf der anderen Seite in der MySQL die Ergebnismenge wird weniger Zeilen, weil es doppelte Zeilen in Tabelle t1 und im t2-Tabelle!
UNION löscht doppelte Datensätze in der anderen hand UNION ALL nicht.Aber man braucht, zu prüfen, die Massen von Daten, die verarbeitet werden und der Spaltenname und Datentyp muss gleich sein.
da die union intern "unterschiedliche" Verhalten zum auswählen der Zeilen, daher ist es teurer in Bezug auf Zeit und Leistung.wie
select project_id from t_project
union
select project_id from t_project_contact
das gibt mir 2020 records
auf der anderen Seite
select project_id from t_project
union all
select project_id from t_project_contact
gibt mir mehr als 17402 Zeilen
auf Vorrang-Perspektive sowohl hat die gleiche Rangfolge.
Wenn es ist keine ORDER BY
, ein UNION ALL
vielleicht bringen Zeilen zurück, als es geht, in der Erwägung, dass eine UNION
würde Sie warten, bis die sehr Ende der Abfrage, bevor er Ihnen das gesamte Ergebnis auf einmal.Dies kann einen Unterschied machen in einer time-out-situation - eine UNION ALL
hält die Verbindung aufrecht, wie es war.
Wenn Sie also eine time-out-Problem, und es gibt keine Sortierung, und Duplikate sind nicht ein Problem, UNION ALL
eher hilfreich.
UNION und UNION ALL verwendet, um zu kombinieren zwei oder mehrere Abfrage-Ergebnisse.
UNION Befehl wählt deutliche und zugehörige Informationen aus zwei Tabellen, die eliminiert doppelte Zeilen.
Auf der anderen Seite, UNION ALL " wählt alle Werte aus beiden Tabellen, die zeigt alle Zeilen.
Der einzige Unterschied ist :
"UNION" entfernt doppelte Zeilen.
"UNION ALL" nicht entfernen Sie doppelte Zeilen.