Mengenoperationen in SQL sind eine Art von Operationen, die es ermöglichen, die Ergebnisse mehrerer Abfragen zu einem einzigen Ergebnis-Set zu kombinieren . [ 1 ]
Zu den Mengenoperatoren in SQL gehören UNION, INTERSECT, und EXCEPT, die mathematisch den Konzepten von Vereinigung , Schnittmenge und Mengendifferenz entsprechen .
UNION-Betreiber
In SQL kombiniert die UNIONKlausel die Ergebnisse zweier SQL-Abfragen zu einer einzigen Tabelle mit allen übereinstimmenden Zeilen . Die beiden Abfragen müssen die gleiche Anzahl an Spalten und kompatible Datentypen liefern, um zusammengeführt werden zu können. Doppelte Datensätze werden automatisch entfernt, sofern nicht die Klausel UNION ALLverwendet wird.
UNIONDies kann in Data-Warehouse -Anwendungen nützlich sein, in denen Tabellen nicht perfekt normalisiert sind . [ 2 ] Ein einfaches Beispiel wäre eine Datenbank mit Tabellen sales2005, sales2006die identische Strukturen aufweisen, aber aus Performancegründen getrennt sind. Eine UNIONAbfrage könnte Ergebnisse aus beiden Tabellen kombinieren.
Beachten Sie, dass UNION ALLdie Reihenfolge der Zeilen nicht garantiert ist. Zeilen des zweiten Operanden können vor, nach oder vermischt mit Zeilen des ersten Operanden erscheinen. Wenn eine bestimmte Reihenfolge gewünscht ist, ORDER BYmuss die entsprechende Funktion verwendet werden.
Beachten Sie, dass dies UNION ALLwesentlich schneller sein kann als die einfache Variante UNION.
Beispiele
Gegeben seien diese beiden Tabellen:
| Person | Menge |
|---|---|
| Joe | 1000 |
| Alex | 2000 |
| Bob | 5000 |
| Person | Menge |
|---|---|
| Joe | 2000 |
| Alex | 2000 |
| Zach | 35000 |
Diese Anweisung wird ausgeführt:
SELECT * FROM sales2005 UNION SELECT * FROM sales2006 ;Dies führt zu folgendem Ergebnissatz, wobei die Reihenfolge der Zeilen variieren kann, da keine ORDER BYKlausel angegeben wurde:
| Person | Menge |
|---|---|
| Joe | 1000 |
| Alex | 2000 |
| Bob | 5000 |
| Joe | 2000 |
| Zach | 35000 |
Beachten Sie, dass es für Joe zwei Zeilen gibt, da sich diese Zeilen in ihren Spalten unterscheiden. Für Alex gibt es nur eine Zeile, da sich diese Zeilen in beiden Spalten nicht unterscheiden.
UNION ALLführt zu unterschiedlichen Ergebnissen, da Duplikate nicht entfernt werden. Ausführung dieser Anweisung:
SELECT * FROM sales2005 UNION ALL SELECT * FROM sales2006 ;würde zu diesen Ergebnissen führen, wobei die fehlende ORDER BYAussage wiederum Abweichungen zulässt:
| Person | Menge |
|---|---|
| Joe | 1000 |
| Joe | 2000 |
| Alex | 2000 |
| Alex | 2000 |
| Bob | 5000 |
| Zach | 35000 |
Die Diskussion über vollständige äußere Joins enthält auch ein Beispiel, das verwendet UNION.
INTERSECT-Operator
Der SQL- INTERSECTOperator nimmt die Ergebnisse zweier Abfragen und gibt nur die Zeilen zurück, die in beiden Ergebnismengen vorkommen. Für die Duplikatsentfernung INTERSECTunterscheidet der Operator nicht zwischen den beiden Abfragen NULLs. Der INTERSECTOperator entfernt doppelte Zeilen aus der endgültigen Ergebnismenge. Der INTERSECT ALLOperator entfernt keine doppelten Zeilen aus der endgültigen Ergebnismenge; wenn eine Zeile jedoch X-mal in der ersten und Y-mal in der zweiten Abfrage vorkommt, erscheint sie X- mal in der Ergebnismenge.
Beispiel
Die folgende Beispielabfrage INTERSECTgibt alle Zeilen aus der Tabelle „Orders“ zurück, in denen die Menge zwischen 50 und 100 liegt.
SELECT * FROM Orders WHERE Quantity BETWEEN 1 AND 100SCHNEIDENSELECT * FROM Orders WHERE Quantity BETWEEN 50 AND 200 ;AUSSER dem Bediener
Der SQL- EXCEPTOperator nimmt die eindeutigen Zeilen einer Abfrage und gibt die Zeilen zurück, die nicht in einem zweiten Ergebnissatz vorkommen. Für die Zeileneliminierung und Duplikatsbeseitigung EXCEPTunterscheidet der Operator nicht zwischen den Zeilen NULLs. EXCEPT ALLEr entfernt keine Duplikate, aber wenn eine Zeile X-mal in der ersten und Y-mal in der zweiten Abfrage vorkommt, erscheint sie X-mal im Ergebnissatz.
Die Oracle-Plattform bietet insbesondere einen MINUSOperator, der funktional äquivalent zum SQL-StandardoperatorEXCEPT DISTINCT ist . [ 3 ]
Beispiel
Die folgende Beispielabfrage EXCEPTgibt alle Zeilen aus der Tabelle „Orders“ zurück, in denen die Menge zwischen 1 und 49 liegt, sowie diejenigen mit einer Menge zwischen 76 und 100.
Anders formuliert: Die Abfrage gibt alle Zeilen zurück, in denen die Menge zwischen 1 und 100 liegt, mit Ausnahme der Zeilen, in denen die Menge zwischen 50 und 75 liegt.
SELECT * FROM Orders WHERE Quantity BETWEEN 1 AND 100AUSSERSELECT * FROM Orders WHERE Quantity BETWEEN 50 AND 75 ;Beispiel
Das folgende Beispiel ist äquivalent zum obigen Beispiel, jedoch ohne Verwendung des EXCEPTOperators.
SELECT o1 . * FROM ( SELECT * FROM Orders WHERE Quantity BETWEEN 1 AND 100 ) o1 LEFT JOIN ( SELECT * FROM Orders WHERE Quantity BETWEEN 50 AND 75 ) o2 ON o1.id = o2.id WHERE o2.id IS NULLSiehe auch
Referenzen
- ^ „Die Operatoren UNION [ALL], INTERSECT und MINUS“ . Oracle . Abgerufen am 14. Juli 2016 .
- „ Eine Views-Technik zur Verwaltung von Wartung und Leistung in Ihrer großen Data-Warehouse-Umgebung … Diese Technik hat vielen meiner Kunden mit Problemen im Zusammenhang mit zeitkritischen Datenbankdesigns geholfen. Diese Datenbanken weisen in der Regel einen extrem volatilen aktuellen Zeitrahmen (Monat oder Tag) auf, und ältere Daten werden selten aktualisiert. Durch die Verwendung unterschiedlicher Container-DASD-Zuweisungen, Tabellenbereiche, Tabellen und Indexdefinitionen können die Einstellungen an die spezifischen Leistungsanforderungen für diese unterschiedlichen Volatilitätsgrade und Aktualisierungshäufigkeiten angepasst werden. “ Terabyte Data Warehouse Table Design Choices – Part 2 (abgerufen am 25. Juli 2006)
UNION ALLUNION ALL - ^ "E071-03,
EXCEPT DISTINCTTabellenoperator: Verwenden SieMINUSstattdessenEXCEPT DISTINCT"" "Oracle Compliance To Core SQL:2003" . Docs.oracle.com . Abgerufen am 7. Juli 2022 .
Externe Links
- MSDN-Dokumentation zu UNION in Transact-SQL für SQL Server
- Benennung von Elementen in Auswahllisten bei Mengenoperationen
- UNION in MySQL mit Beispielen
- UNION in MySQL
- UNION-Klausel in PostgreSQL
- SQL UNION und UNION ALL
- Sortierreihenfolge innerhalb der UNION-Erklärung
- Entwurf eines Datenflusses zum Laden einer Warehouse-Tabelle
- Oracle 11g-Dokumentation für UNION (ALL), INTERSECT und MINUS
- SQL-Mengenoperatoren