Der SQL UNION Operator kombiniert die Zeilen aus zwei oder mehr Abfragen. Die Bedingung dafür ist, dass alle Abfragen die gleiche Menge an Spalten haben, bei denen die Datentypen kompatibel sind.
SELECT Spalte FROM Tabelle A
UNION
SELECT Spalte FROM TabelleB;
Das heutige Thema lautet: SQL UNION. Vielleicht fragst du dich gerade, was das ist oder wie Du es verwenden kannst? Vielleicht hoffst du, dass dieser Befehl dein aktuelles Problem löst? Keine Sorge, wir haben alle Antworten auf deine Fragen!
SQL UNION im Detail
UNION ist ein SQL-Befehl, der die Ergebnisse von zwei oder mehr SELECT-Anweisungen in einem einzigen Resultat zusammenführt.
Es gibt allerdings wichtige Regeln, die beachtet werden müssen, wenn man den UNION-Befehl in SQL verwendet:
- Die SELECT Anweisungen innerhalb des SQL UNIONs müssen dieselbe Anzahl an Spalten haben.
- Die Spalten müssen den gleichen oder einen kompatiblen Datentypen haben.
- Die Namen der Spalten können sich zwar unterscheiden, aber die Spaltennamen der ersten Abfrage werden übernommen.
Der UNION agiert wie eine SELECT DISTINCT Anweisung und gibt keine doppelten Werte aus. UNION ALL hingegen gibt alle Werte, also auch Duplikate, aus.
Unterschiedlich zum JOIN kann UNION nicht zwei Zeilen zu einer zusammenfügen, sondern hängt nur zusätzliche Zeilen an die Abfrage.
Was ist der Unterschied zwischen SQL UNION und JOIN?
Auf dem ersten Blick ähnelt UNION der Funktionalität von JOINs in SQL, da beide Daten zusammenfügen. Der Unterschied liegt aber darin, wie sie das tun.
JOINs verbinden Tabellen horizontal. Das bedeutet wir suchen eine gemeinsame Spalte in zwei Tabellen und heften die Spalten anhand dieser Spalte an unsere Tabelle. Abhängig vom JOIN-Typen werden manchmal nur Spalten verbunden ohne neue Zeilen hinzuzufügen, Zeilen entfernt oder neue Zeilen hinzugefügt.
UNION verbindet Tabellen vertikal. Ähnlich wie beim Anhängen von Zeilen in einer Excel-Tabelle wird die Tabelle nur nach unten hin länger bzw. kürzer wenn sehr viele Duplikate entfernt werden. Damit kann UNION Tabellen miteinander verbinden, die eigentlich nicht in Beziehung zueinander stehen.
SQL UNION: Beispiel aus der Praxis
Die DataMines Universität hat zwei Tabellen: Studenten und Absolventen.
Bachelor-Absolventen können immer noch Studenten sein, wenn sie an unserer Uni noch ihren Master weitermachen. Möchten wir also alle Menschen, die je an unserer Uni studiert haben oder aktuell studieren, auflisten, müssen wir die Duplikate entfernen, die hier ihren Master weitermachen.
Dafür eignet sich der SQL UNION Befehl anstelle des UNION ALL Befehls, weil dieser Duplikate entfernt.
Studenten-ID | Name |
---|---|
1 | Anna |
2 | Ben |
3 | Clara |
Studenten-ID | Name |
---|---|
3 | Clara |
4 | David |
5 | Emma |
SELECT Studenten-ID, Name FROM studenten
UNION
SELECT Studenten-ID, Name FROM absolventen;
Studenten-ID | Name |
---|---|
1 | Anna |
2 | Ben |
3 | Clara |
4 | David |
5 | Emma |
SQL UNION ALL: Beispiel aus der Praxis
Ein Online Händler möchte nicht nur wissen, welche Städte in seinen Bestellungen vorkommen, sondern auch, wie häufig sie vorkommen. Sein Analyst bittet ihn dafür eine Liste vorzubereiten, in der für jede Bestellung die dazugehörige Stadt aufgelistet ist.
Bestell-ID | Stadt |
---|---|
1 | Berlin |
2 | Hamburg |
3 | Berlin |
Bestell-ID | Stadt |
---|---|
2 | Hamburg |
3 | Berlin |
4 | Köln |
SELECT Stadt FROM Bestellungen_2021
UNION ALL
SELECT Stadt FROM Bestellungen_2022;
Bestell-ID | Stadt |
---|---|
1 | Berlin |
2 | Hamburg |
3 | Berlin |
2 | Hamburg |
3 | Berlin |
4 | Köln |
Mit diesem Datensatz kann der Analyst mittels der Count-Funktion bestimmen, in welchen Städten in den 2021 und 2022 am häufigsten bestellt wurde.
Verwendung von UNION mit WHERE-Klausel
Man kann UNION zusammen mit WHERE verwenden, um gefilterte Resultate zu erhalten. Zum Beispiel, wenn Du nur die Produkte aus Tabelle_E
und Tabelle_F
vereinen möchtest, die mehr als 100 Einheiten verkauft haben.
Dafür musst du für beide Tabellen eine WHERE-Bedingung schreiben. Wenn du das WHERE nur am Ende des Befehls anhängst, wird nur die untere Tabelle_F
gefiltert.
SELECT Produkt FROM Tabelle_E WHERE Verkaufte_Einheiten > 100
UNION
SELECT Produkt FROM Tabelle_F WHERE Verkaufte_Einheiten > 100;
Möchtest du aber erst die Tabellen kombinieren und erst danach filtern, eignet sich eine Common Table Expression, was auch als WITH-Statement bekannt ist. Wir erstellen damit eine Zwischentabelle und filtern diese dann in einem nächsten Schritt.
WITH Tabelle_E_und_F AS (
SELECT Produkt, Verkaufte_Einheiten FROM Tabelle_E
UNION
SELECT Produkt, Verkaufte_Einheiten FROM Tabelle_F
)
SELECT Produkt FROM Tabelle_E_und_F
WHERE Verkaufte_Einheiten > 100;
Häufige SQL UNION-Fehler und deren Lösungen
Trotz seiner Einfachheit kann SQL UNION manchmal etwas knifflig werden.
Anzahl der Spalten ist unterschiedlich
Problem: Die Tabellen, die man mit UNION kombinieren möchte, haben unterschiedlich viele Spalten haben.
Lösung: Hierfür muss man im SELECT-Befehl beider Tabellen prüfen, ob genau gleich viele Spalten ausgegeben werden.
Datentypen sind inkompatibel
Problem: Die entsprechenden Spalten inkompatible Datentypen aufweisen. In solchen Fällen gibt SQL einen Fehler zurück.
Lösung: Sicherstellen, dass die Reihenfolge der SELECT Befehle zwischen beiden UNION-Tabellen logisch ist. Andernfalls haben Daten in einer Tabelle einen Datentypen, der zur Haupttabelle angepasst werden muss. Eine Spalte, die nur Zahlen enthalten soll, kann nicht mit Texten kombiniert werden.
Duplikate werden gelöscht
Problem: Beim SQL UNION Befehl werden nicht alle Ergebnisse ausgegeben. Es scheint als wären Duplikate entfernt.
Lösung: Um Duplikate im Datensatz bestehen zu lassen, muss man den UNION ALL Befehl nutzen.
Zusammenfassung und Schlussfolgerungen
Wir haben gelernt, was SQL UNION ist, seine Regeln und wie es sich von anderen SQL-Kommandos unterscheidet. Außerdem haben wir gesehen, wie es in der Praxis angewendet werden kann und einige häufige Fehler und deren Behebung diskutiert.
Es ist wichtig zu beachten, dass SQL UNION nur ein Werkzeug in Deinem SQL-Toolkit ist. Es gibt viele andere, wie oder JOIN, INTERSECT oder EXCEPT, die je nach Situation nützlich sein können. Der Schlüssel zum Erfolg liegt darin, zu verstehen, wann und wie jedes Werkzeug verwendet werden soll.
Also, mach weiter und experimentiere. Nutze das, was Du gelernt hast, um Deine SQL-Fähigkeiten zu verbessern und Deine Daten effektiver zu verwalten. Wir hoffen, dass dieser Artikel hilfreich war und freuen uns auf Deine Erfolgsgeschichten. Bis zum nächsten Mal!