3 3 Stimmen

SQL: Unterschied zwischen UNION und UNION ALL

Frage von Compi | 23.07.2016 um 15:45 Uhr

Was ist eigentlich der Unterschied zwischen einer Verknüpfung mit UNION beziehungsweise UNION ALL in einer SQL-Abfrage?

Kann mir jemand zusätzlich auch ein Beispiel für MySQL geben, damit ich mir das besser vorstellen kann?

AntwortenPositivNegativ

Stefan Trost

Profil anzeigen | Nachricht
Avatar
4Beste Antwort
4 Stimmen

Der Unterschied liegt darin, dass UNION alle doppelten Datensätze entfernt, während UNION ALL dies nicht tut. 

Entsprechend ist UNION ALL schneller und performanter, weil das Ergebnis nicht nach doppelten Reihen durchsucht werden muss. Ein doppelter Datensatz ist ein Datensatz, in dem alle Spalten des Ergebnisses die gleichen Inhalte haben.

Beispiel

Angenommen wir haben zwei Tabellen, nennen wir sie team1 und team2.

Tabelle "team1"
vorname  punkte
Anna     10
Thomas   12
Katrin   8

Tabelle "team2"
vorname  punkte
Anna     7
Rüdiger  10
Klaus    2

In dieser Tabelle steht der Name (Spalte "vorname") und eine Punktzahl (Spalte "punkte") einiger Teammitglieder (normalerweise würde man hier natürlich eher ein Tabellen-Layout bevorzugen in dem alle Teams in einer Tabelle stehen, für das Beispiel ist es so aber anschaulicher).

UNION ALL

Als erstes möchten wir die Namen aus beiden Tabellen mit "UNION ALL" auslesen. Dazu benutzen wir folgende Abfrage:

SELECT vorname FROM team1
UNION ALL
SELECT vorname FROM team2

Als Ergebnis erhalten wir:

Anna
Thomas
Katrin 
Anna
Rüdiger 
Klaus

Es werden also alle Namen ausgelesen, der Namen "Anna" erscheint zweimal in der Liste.

UNION

Nun formulieren wir dieselbe Abfrage mit "UNION":

SELECT vorname FROM team1
UNION
SELECT vorname FROM team2

Als Ergebnis erhalten wir:

Anna
Thomas
Katrin 
Rüdiger 
Klaus

Wieder werden alle Namen ausgegeben, jedoch werden vor der Ausgabe alle doppelten Zeilen aus dem Ergebnis entfernt. Dadurch erscheint der Name "Anna" dieses Mal nur einmal im Ergebnis.

Wenn alle Datensätze verschieden sind

Wenn wir nun in unserem Beispiel nicht nur den Namen auslesen, sondern auch die Punktzahl, können wir folgende Abfragen für "UNION" und "UNION ALL" formulieren:

SELECT vorname, punkte FROM team1
UNION ALL
SELECT vorname, punkte FROM team2
SELECT vorname, punkte FROM team1
UNION
SELECT vorname, punkte FROM team2

Dieses Mal bekommen wir allerdings bei beiden Abfragen dasselbe Ergebnis:

Anna     10
Thomas   12
Katrin   8
Anna     7
Rüdiger  10
Klaus    2

Da die Datensätze "Anna - 10" und "Anna - 7" unterschiedlich sind, erscheinen sie beide dem Ergebnis. Hätte "Anna" in beiden Zeilen dieselbe Punktzahl, wäre die Zeile wieder als "doppelt" aussortiert worden.
23.07.2016 um 19:46 Uhr

AntwortenPositiv Negativ
Antworten

Ähnliche Themen

Wichtiger Hinweis

Die Beiträge auf askingbox.de sind Beiträge von Nutzern und sollen keine professionelle Beratung ersetzen. Sie werden nicht von Unabhängigen geprüft und spiegeln nicht zwingend die Meinung von askingbox.de wieder. Mehr erfahren.

Jetzt mitmachen

Stellen Sie Ihre eigene Frage oder schreiben Sie Ihren eigenen Artikel auf askingbox.de. So gehts.