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

10voto

michael-mammut Punkte 2325

Mit einem Venn-Diagramm ist es gut zu verstehen.

hier ist die Link zur Quelle. Es gibt eine gute Beschreibung.

enter image description here

6 Stimmen

Ihr zweites Bild suggeriert, dass sich die beiden Dinge gegenseitig ausschließen, was nicht der Fall ist. Das Bild sollte eher dasselbe zeigen wie das erste, aber mit der "Schnittpunkt-Ellipse". () ein zweites Mal gezeigt. Eigentlich, wenn ich es mir recht überlege, denn die union all Ergebnis keine Menge ist, sollten Sie nicht versuchen, es in einem Venn-Diagramm zu zeichnen!

0 Stimmen

Venn-Diagramme stellen Mengen dar, aber SQL-Tabellen sind Taschen und keine Mengen. Sie haben also nicht erklärt, wie man sie lesen kann. Und das erweist sich als sehr komplex. So komplex, dass sie nicht zum Erklären geeignet sind. Auch das zweite Diagramm ist kein Venn-Diagramm. Außerdem haben Sie keine korrekte Quellenangabe gemacht. Hilfe-Center Meta-Stapelüberlauf Meta Stack Exchange PS Warum sind Bilder von Text, Code und mathematischen Ausdrücken nicht erwünscht?

9voto

shA.t Punkte 15790

(Aus Microsoft SQL Server Book Online)

UNION [ALL]

Gibt an, dass mehrere Ergebnismengen kombiniert und als eine einzige Ergebnismenge zurückgegeben werden sollen.

ALLE

Bezieht alle Zeilen in die Ergebnisse mit ein. Dies schließt Duplikate ein. Wenn nicht angegeben, werden doppelte Zeilen entfernt.

UNION wird zu lange dauern, da eine Suche nach doppelten Zeilen wie DISTINCT auf die Ergebnisse angewendet wird.

SELECT * FROM Table1
UNION
SELECT * FROM Table2

ist gleichbedeutend mit:

SELECT DISTINCT * FROM (
    SELECT * FROM Table1
    UNION ALL
    SELECT * FROM Table2) DT

Eine Nebenwirkung der Anwendung DISTINCT über die Ergebnisse ist eine Sortiervorgang zu den Ergebnissen.

UNION ALL Die Ergebnisse werden angezeigt als willkürlich Reihenfolge der Ergebnisse Aber UNION Die Ergebnisse werden angezeigt als ORDER BY 1, 2, 3, ..., n (n = column number of Tables) auf die Ergebnisse angewandt. Sie können diesen Nebeneffekt sehen, wenn Sie keine doppelte Zeile haben.

8voto

Union wird verwendet, um unterschiedliche Werte aus zwei Tabellen auszuwählen während union all verwendet wird, um alle Werte einschließlich Duplikate aus den Tabellen

8voto

Do Nhu Vy Punkte 38281

Ich füge ein Beispiel hinzu,

UNION Es ist eine Zusammenführung mit distinct --> langsamer, weil es einen Vergleich braucht (in Oracle SQL Developer, wählen Sie Query, drücken Sie F10 um die Kostenanalyse zu sehen).

UNION ALL Es ist ein Zusammenführen ohne Unterscheidung --> schneller.

SELECT to_date(sysdate, 'yyyy-mm-dd') FROM dual
UNION
SELECT to_date(sysdate, 'yyyy-mm-dd') FROM dual;

y

SELECT to_date(sysdate, 'yyyy-mm-dd') FROM dual
UNION ALL
SELECT to_date(sysdate, 'yyyy-mm-dd') FROM dual;

4voto

reza.cse08 Punkte 5514

Nehmen wir an, Sie haben zwei Tabellen Lehrer & Studenten

Beide haben 4 Spalte mit anderem Namen wie diese

Teacher - ID(int), Name(varchar(50)), Address(varchar(50)), PositionID(varchar(50))

enter image description here

Student- ID(int), Name(varchar(50)), Email(varchar(50)), PositionID(int)

enter image description here

Sie können UNION oder UNION ALL für die beiden Tabellen anwenden, die die gleiche Anzahl von Spalten haben. Aber sie haben unterschiedliche Namen oder Datentypen.

Wenn Sie sich bewerben UNION Operation auf 2 Tabellen, werden alle doppelten Einträge vernachlässigt (alle Spaltenwerte einer Zeile in einer Tabelle sind die gleichen wie in einer anderen Tabelle). Wie dies

SELECT * FROM Student
UNION
SELECT * FROM Teacher

wird das Ergebnis sein

enter image description here

Wenn Sie sich bewerben UNION ALL Operation auf 2 Tabellen, gibt sie alle Einträge mit Duplikaten zurück (wenn es einen Unterschied zwischen einem Spaltenwert einer Zeile in 2 Tabellen gibt). Wie dies

SELECT * FROM Student
UNION ALL
SELECT * FROM Teacher

Ausgabe enter image description here

Leistung:

Offensichtlich UNION ALL die Leistung ist besser als UNION da sie zusätzlich die Aufgabe haben, die doppelten Werte zu entfernen. Sie können dies überprüfen unter Ausführung Geschätzte Zeit durch die Presse Strg+L unter MSSQL

0 Stimmen

Wirklich? Für ein vierreihiges Ergebnis?! Ich würde denken, dass dies ein Szenario ist, in dem Sie Folgendes verwenden sollten UNION die Absicht zu vermitteln (d.h. keine Duplikate), weil UNION ALL ist es unwahrscheinlich, dass es im wirklichen Leben einen absoluten Leistungsgewinn gibt.

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