PostgreSQL UNION
Der Operator `UNION` in PostgreSQL wird verwendet, um die Ergebnismengen von zwei oder mehr `SELECT`-Abfragen zu einer einzigen Ergebnismenge zusammenzufassen und doppelte Zeilen zu entfernen. Sie stellt sicher, dass die kombinierte Ergebnismenge eindeutig ist. Die Reihenfolge der Ergebnismenge wird nicht durch `UNION` bestimmt, sondern muss explizit mit einer `ORDER BY`-Klausel angegeben werden.
Verwendung
Der "UNION"-Operator wird verwendet, wenn du die Ergebnisse mehrerer "SELECT"-Anweisungen zu einem zusammenhängenden Datensatz aggregieren musst. Sie ist besonders nützlich, um Tabellen mit ähnlichen Strukturen zusammenzuführen.
SELECT column1, column2, ...
FROM table1
UNION
SELECT column1, column2, ...
FROM table2;
In dieser Syntax führt `UNION` die Ausgaben der beiden `SELECT`-Anweisungen zusammen und verwirft dabei alle doppelten Zeilen. Die impliziten Spaltennamen in der Ergebnismenge werden von der ersten "SELECT"-Anweisung abgeleitet.
Beispiele
1. Basic UNION
SELECT city
FROM customers
UNION
SELECT city
FROM suppliers;
In diesem Beispiel wird eine Liste von Städten aus den Tabellen "Kunden" und "Lieferanten" zusammengeführt, wobei Duplikate entfernt werden, um eine eindeutige Liste zu erhalten.
2. UNION mit unterschiedlichen Spaltennamen
SELECT first_name AS name
FROM employees
UNION
SELECT supplier_name AS name
FROM suppliers;
Hier werden Spalten mit unterschiedlichen Namen mit `UNION` kombiniert. Der Alias "Name" gilt für die Ergebnismenge, und die Konsistenz der Aliase ist entscheidend für die Lesbarkeit und Wartung. Die Spalten müssen vom gleichen Datentyp sein.
3. UNION mit ORDER BY
SELECT product_name
FROM products
UNION
SELECT service_name
FROM services
ORDER BY 1;
In diesem Beispiel werden Produkt- und Servicenamen in einer Liste zusammengefasst und die gesamte Ergebnismenge alphabetisch geordnet. Die `ORDER BY`-Klausel verwendet die Spaltenposition, was im Allgemeinen empfohlen wird, um Mehrdeutigkeiten zu vermeiden.
Tipps und bewährte Praktiken
- Achte auf die Kompatibilität der Spalten. Die Anzahl und die Datentypen der Spalten in jedem `SELECT` müssen übereinstimmen.
- Verwende `UNION ALL` für die Leistung. Wenn Duplikate zulässig sind, vermeidet `UNION ALL` den Aufwand für das Sortieren und Entfernen von Duplikaten.
- Sei vorsichtig mit `ORDER BY`. Nur der letzte `SELECT` kann eine `ORDER BY`-Klausel enthalten, die sich auf die gesamte Ergebnismenge auswirkt. Verweise auf die Namen der Ausgabespalten oder verwende die Spaltenpositionen, um Mehrdeutigkeiten zu vermeiden.
- Prüfe die NULL-Behandlung. Stelle sicher, dass Spalten in Abfragen einheitlich mit "NULL"-Werten umgehen, um unerwartete Ergebnisse zu vermeiden.
- Erwäge die Indizierung. Die Indizierung von Tabellen, die in `UNION`-Abfragen verwendet werden, kann die Leistung optimieren, indem sie den Abruf von Daten beschleunigt.
- Verstehe die Auswirkungen auf die Leistung. Die Verwendung von `UNION` kann im Vergleich zu `UNION ALL` zusätzliche Verarbeitung für die Sortierung und die Beseitigung von Duplikaten erfordern.