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.
Über den Autor
Software 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
MySQL: Zeilenumbrüche in MySQL
Tipp | 0 Kommentare
Windows: Programm als Administrator ausführen - Einmal, immer oder mit Verknüpfung
Tutorial | 0 Kommentare
Windows Batch Script: Computer herunterfahren
Tutorial | 2 Kommentare
Chinesisches Horoskop: Tierkreiszeichen und Elemente
Info | 0 Kommentare
Ortsfaktoren für verschiedene Orte und Planeten
Info | 1 Kommentar
Ist das Liebeskummer oder was anderes?
Offene Frage | 1 Antwort
PHP: Nur bestimmte Buchstaben, Zahlen und Zeichen in einem String zulassen
Tipp | 10 Kommentare
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.