77 Stimmen

SQL: Unterschied zwischen UNION und UNION ALL

Info von Stefan Trost | Letztes Update am 29.12.2022 | Erstellt am 23.07.2016

Was ist eigentlich der Unterschied zwischen einer Verknüpfung mit UNION beziehungsweise UNION ALL in einer SQL-Abfrage? In diesem Artikel möchte ich dieser Frage nachgehen und anhand einiger Beispiele demonstrieren.

Der grundlegende 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 dabei ein Datensatz, in dem alle Spalten des Ergebnisses die gleichen Inhalte haben.

Beispiel

Schauen wir uns dafür zunächst ein Beispiel an. 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.

AntwortenPositivNegativ

Über den Autor

AvatarSoftware von Stefan Trost finden Sie auf sttmedia.de. Benötigen Sie eine individuelle Software nach Ihren eigenen Wünschen? Schreiben Sie uns: sttmedia.de/kontakt
Profil anzeigen

 

Ähnliche Themen

Wichtiger Hinweis

Bitte beachten Sie: 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.