Queries kombinieren, der UNION-Operator
Die Ergebnisse von SQL-Queries lassen sich kombinieren. Dafür gibt es den UNION-Operator.
Allgemeine Struktur einer Query mit UNION
SELECT tabellen_felder FROM tabellen_name
UNION [ALL]
SELECT tabellen_felder FROM tabellen_name;- [ ]optionaler Teil
- tabellen_felder
Die Spalten, die jede der Queries auswählt. Beide Queries müssen gleich viele Spalten liefern, und Spalten an derselben Position müssen kompatible Typen haben.
- tabellen_name
- Die Tabelle, aus der jede der Queries ihre Daten holt.
- ALL
Behält doppelte Zeilen im Ergebnis. Ohne ALL werden Duplikate entfernt.
SchlüsselwortOptional
- Verwechsle das Kombinieren von Queries nicht mit dem Verknüpfen von Tabellen – dafür ist JOIN da.
- Verwechsle das Kombinieren von Queries auch nicht mit Subqueries. Subqueries laufen auf verknüpften Tabellen.
UNION kombiniert Tabellen, die nicht miteinander verknüpft sind, aber eine ähnliche Struktur haben.
Damit UNION korrekt funktioniert, müssen die Ergebnistabellen aller einzelnen SQL-Queries die gleiche Anzahl an Spalten haben – mit kompatiblen Datentypen und in derselben Reihenfolge.
Es gibt zwei weitere Operatoren mit sehr ähnlichem Verhalten wie UNION:
- INTERSECT Kombiniert zwei SELECT-Queries, gibt aber nur die Datensätze des ersten SELECT zurück, die auch im zweiten SELECT vorkommen.
- EXCEPT Kombiniert zwei SELECT-Queries, gibt aber nur die Datensätze des ersten SELECT zurück, die im zweiten SELECT nicht vorkommen.
Anwendungsbeispiele
Angenommen, wir wollen die Namen aller Waren und die Namen aller Familienmitglieder gemeinsam ausgeben (ein ziemlich konstruiertes Beispiel). Da die Datentypen übereinstimmen, geht das problemlos.
MySQL 8.1SELECT DISTINCT Goods.good_name AS name FROM Goods UNION SELECT DISTINCT FamilyMembers.member_name AS name FROM FamilyMembers;