1706 Stimmen

Was ist der Unterschied zwischen UNION und UNION ALL?

Was ist der Unterschied zwischen UNION y UNION ALL ?

1 Stimmen

1 Stimmen

Union all enthält alle ids in der linken und rechten tabelle. wobei union eindeutige ids in der linken und rechten tabelle enthält. union all erlaubt doppelte ids. union funktioniert wie set in python und erzeugt eindeutige ids

4voto

pedram Punkte 6527

UNION führt den Inhalt von zwei strukturell kompatiblen Tabellen zu einer einzigen kombinierten Tabelle zusammen.

  • Der Unterschied:

Der Unterschied zwischen UNION y UNION ALL ist das UNION will doppelte Datensätze auslassen, während UNION ALL wird doppelte Datensätze enthalten.

Union Die Ergebnismenge wird in aufsteigender Reihenfolge sortiert, während UNION ALL Ergebnismenge ist nicht sortiert

UNION führt eine DISTINCT auf seine Ergebnismenge, so dass es alle doppelten Zeilen eliminiert. Während UNION ALL entfernt keine Duplikate und ist daher schneller als UNION .*

Hinweis : Die Leistung von UNION ALL wird in der Regel besser sein als UNION da UNION erfordert, dass der Server die zusätzliche Arbeit übernimmt, alle Duplikate zu entfernen. In Fällen, in denen es sicher ist, dass es keine Duplikate geben wird, oder in denen Duplikate kein Problem darstellen, ist die Verwendung von UNION ALL wäre aus Leistungsgründen zu empfehlen.

1 Stimmen

"Union Result set is sorted in ascending order" -- Es sei denn, es gibt eine ORDER BY sind sortierte Ergebnisse nicht garantiert. Vielleicht haben Sie einen bestimmten SQL-Anbieter im Sinn (selbst dann, aufsteigende Reihenfolge, was genau...?), aber diese Frage hat keine vendor=spezifischen Tags.

0 Stimmen

"führt den Inhalt von zwei strukturell kompatiblen Tabellen zusammen" - ich denke, Sie haben diesen Teil sehr gut formuliert :)

2voto

Aris Mist Punkte 79

Wichtig! Unterschied zwischen Oracle und Mysql: Nehmen wir an, t1 und t2 haben keine doppelten Zeilen untereinander, aber sie haben einzelne doppelte Zeilen. Beispiel: t1 hat Umsätze aus 2017 und t2 aus 2018

SELECT T1.YEAR, T1.PRODUCT FROM T1

UNION ALL

SELECT T2.YEAR, T2.PRODUCT FROM T2

In ORACLE holt UNION ALL alle Zeilen aus beiden Tabellen. Dasselbe geschieht auch in MySQL.

Allerdings:

SELECT T1.YEAR, T1.PRODUCT FROM T1

UNION

SELECT T2.YEAR, T2.PRODUCT FROM T2

Unter ORACLE UNION holt alle Zeilen aus beiden Tabellen, da es keine doppelten Werte zwischen t1 und t2 gibt. Auf der anderen Seite in MySQL die Ergebnismenge wird weniger Zeilen haben, weil es doppelte Zeilen in der Tabelle t1 und auch in der Tabelle t2 geben wird!

1 Stimmen

Das ist falsch. x union y es select distinct * from (x union all y) . select 1 from dual union select 1 from dual & (select 1 from dual union all select 1 from dual) union select 1 from dual geben beide 1 Zeile zurück. PS: Ich weiß nicht, ob Sie mit t1 & t2 T1 & T1 meinen, aber es kommt darauf an, was in den Selects steht. PS Für das UNION (distinct)-Beispiel sagen Sie nicht klar, was in Bezug auf Duplikate eingegeben wird und für jedes DBMS, was es zurückgibt oder warum. Verwenden Sie genügend Wörter, Sätze und Verweise auf Teile der Beispiele, um klar zu sein.

2voto

Pawan Kumar Punkte 134

UNION entfernt doppelte Datensätze, während UNION ALL dies nicht tut. Aber man muss die Menge der zu verarbeitenden Daten überprüfen und die Spalte und der Datentyp müssen gleich sein.

da Union intern das Verhalten "distinct" verwendet, um die Zeilen auszuwählen, und daher zeit- und leistungsaufwändiger ist. wie

select project_id from t_project
union
select project_id from t_project_contact  

das ergibt 2020 Datensätze

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

unter dem Gesichtspunkt des Vorrangs haben beide den gleichen Vorrang.

2voto

AjV Jsy Punkte 5481

Wenn es keine ORDER BY , a UNION ALL Zeilen zurückbringen kann, während ein UNION würde Sie bis zum Ende der Abfrage warten lassen, bevor Sie die gesamte Ergebnismenge auf einmal erhalten. Dies kann in einer Timeout-Situation einen Unterschied machen - ein UNION ALL hält die Verbindung gewissermaßen am Leben.

Wenn Sie also ein Zeitüberschreitungsproblem haben und es keine Sortierung gibt und Duplikate kein Problem sind, UNION ALL kann sehr hilfreich sein.

0 Stimmen

Aber Ihr erster Teil der Ergebnisse könnte aus einer einzigen Zeile bestehen, die mehrmals dupliziert wurde: Wie nützlich ist das?!

2voto

Rahul Sawant Punkte 1139

Eine Sache möchte ich noch hinzufügen.

Gewerkschaft :- Die Ergebnismenge wird in aufsteigender Reihenfolge sortiert.

Union Alle :- Die Ergebnismenge ist nicht sortiert. Zwei Abfrageausgaben werden einfach angehängt.

0 Stimmen

Wahr! UNION kann die Reihenfolge der beiden Teilergebnisse ändern.

10 Stimmen

Das ist falsch. A UNION se NO sortiert das Ergebnis in aufsteigender Reihenfolge. Jede Sortierung, die Sie in einem Ergebnis sehen, ohne dass Sie order by ist rein zufällig. Dem DBMS steht es frei, jede Strategie anzuwenden, die es für effizient hält, um die Duplikate zu entfernen. Diese puede Das kann ein Sortieralgorithmus sein, aber auch ein Hash-Algorithmus oder etwas ganz anderes - und die Strategie wird sich mit der Anzahl der Zeilen ändern. A union dass erscheint mit 100 Zeilen sortiert wird, nicht mit 100.000 Zeilen

5 Stimmen

Ohne eine ORDER BY-Klausel in der Abfrage steht es dem RDBMS frei, die Zeilen in jede Reihenfolge. Die Feststellung, dass die Ergebnismenge einer UNION-Operation "in aufsteigender Reihenfolge" zurückgegeben wird, ist nur eine Nebenprodukt einer von der Datenbank durchgeführten "sort unique"-Operation. Das beobachtete Verhalten ist no garantiert. Verlassen Sie sich also nicht darauf. Wenn die Spezifikation die Rückgabe von Zeilen in einer bestimmten Reihenfolge vorsieht, dann fügen Sie eine entsprechende ORDER BY Klausel.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X