Zurück zur Artikelliste Artikel
6 Leseminuten

Einführung in die SQL-Mengenoperatoren: Union, Union All, Minus und Intersect

Haben Sie schon einmal von Begriffen wie Union und Intersection in SQL gehört? Es handelt sich dabei um Beispiele für Mengenoperatoren, die sich als nützlich erweisen, wenn Sie Informationen aus mehreren Tabellen oder Abfragen kombinieren müssen. In diesem Artikel werden wir sie genauer unter die Lupe nehmen.

Mit SQL-Abfragen können wir aus großen Informationsmengen die wichtigsten Teile auswählen. Natürlich können wir nicht erwarten, dass alle benötigten Daten in einer Tabelle gespeichert sind. Nehmen wir an, wir wollen alle Aspekte einer bestimmten Schlüsseldatengruppe in einer Ergebnistabelle darstellen (z. B. einen Bericht mit den Namen aller Kunden, die von jeder Abteilung eines großen Unternehmens bedient werden). Diese Datensätze können sich in vielen verschiedenen Tabellen befinden, so dass wir in SQL Mengenoperatoren wie Vereinigung und Schnittmenge benötigen, um sie in einer Tabelle zusammenzufassen oder um gemeinsame Elemente zu finden.

Bei solchen Operationen nehmen wir zwei oder mehr Ergebnisse aus SELECT Anweisungen und erstellen eine neue Tabelle mit den gesammelten Daten. Dies geschieht mit Hilfe eines SQL-Set-Operators. Operatoren wie MINUS, UNION oder INTERSECT werden häufig in SQL-Abfragen verwendet. Schauen wir uns an, wie sie funktionieren.

Die Beispieltabellen

Nehmen wir an, wir haben eine sehr einfache Datenbank, die Informationen über Bücher und Filme speichert. Sie hat nur zwei Tabellen, BOOKS und MOVIES, die Buch- bzw. Filmtitel und eine ID-Nummer enthalten. Wenn Sie sich diese Tabellen ansehen, werden Sie feststellen, dass ein Titel in beiden Tabellen vorkommt:

Table: BOOKS
ID Title
1 The Witcher
2 Harry Potter
3 Nineteen Eighty-Four
4 The Great Gatsby

Table: MOVIES
ID Title
1 Iron Man
2 Harry Potter
3 Dr Strange
4 Matrix

Der UNION-Set-Operator

Was wäre, wenn wir eine Tabelle mit dem gesamten Inhalt der Tabellen BOOKS und MOVIES Tabellen? Dies ist der perfekte Zeitpunkt, um den UNION set-Operator zu verwenden.

UNION führt die Ergebnisse von zwei SELECT-Anweisungen zusammen. Wichtig: UNION Anweisungen geben nur UNIQUE-Werte zurück. Nachfolgend sehen Sie ein Venn-Diagramm, das diesen Vorgang und den Code, der ihn ausführt, darstellt:

SELECT * FROM BOOKS
UNION
SELECT * FROM MOVIES

Hier ist das Ergebnis:

ID Title
1 The Witcher
2 Harry Potter
3 Nineteen Eighty-Four
4 The Great Gatsby
5 Iron Man
6 Dr Strange
7 Matrix

Alle Buch- und Filmtitel befinden sich jetzt in einer Tabelle. Beachten Sie, dass "Harry Potter" - ein Element, das in beiden Tabellen vorkommt - nur einmal in den Ergebnissen angezeigt wird. Wie bereits erwähnt, gibt der UNION Set-Operator keine doppelten Werte zurück.

Der UNION ALL Mengenoperator

Sie haben wahrscheinlich schon gemerkt, dass UNION ALL dem UNION sehr ähnlich ist, allerdings mit einer Ausnahme: UNION ALL gibt alle Daten aus allen Tabellen zurück, egal ob es sich um Duplikate handelt oder nicht. Führen wir die gleiche Operation wie im UNION-Beispiel durch und sehen wir, was wir erhalten:

SELECT * FROM BOOKS
UNION ALL
SELECT * FROM MOVIES

Ergebnis:

ID Title
1 The Witcher
2 Harry Potter
3 Nineteen Eighty-Four
4 The Great Gatsby
5 Iron Man
6 Harry Potter
7 Dr Strange
8 Matrix

Dieses Mal erscheint der kleine Assistent zweimal in der Ergebnistabelle.

Jetzt kennen wir den Hauptunterschied zwischen diesen beiden Operatoren. Aber wann sollten wir UNION und wann UNION ALL verwenden? Zunächst sollten Sie wissen, dass es einen großen Unterschied in der Effizienz zwischen den beiden Operatoren gibt. Nehmen wir an, wir müssen zwei Abfrageergebnisse zusammenführen, die jeweils 10.000 Elemente enthalten. UNION wird alle Duplikate entfernen und alle Elemente in der Ergebnistabelle sortieren. Dieser Sortiervorgang nimmt viel Zeit in Anspruch und arbeitet mit einer großen Anzahl von Elementen.

Insgesamt kann UNION viermal langsamer sein als UNION ALL, das keine Duplikate beseitigt und die Daten nicht sortiert. Wenn wir uns nicht um Duplikate kümmern und schnell arbeiten wollen, ist UNION ALL die perfekte Lösung. Wenn wir aber wissen, dass es unser Hauptziel ist, eindeutige Elemente zu haben, dann ist UNION viel hilfreicher.

Der MINUS-Set-Operator

MINUS ist ein wenig anders. Nehmen wir an, wir wollen nur Buchtitel sehen, die nicht auch Filmtitel sind. Wir müssen alles aus der Tabelle "minus" nehmen BOOKS Tabelle, die auch in der MOVIES Tabelle ist. Der Operator MINUS set ist für diese Art von Aufgabe gedacht.

SELECT * FROM BOOKS
MINUS
SELECT * FROM MOVIES

Das Ergebnis:

ID Title
1 The Witcher
2 Nineteen Eighty-Four
3 The Great Gatsby

Jetzt erscheint "Harry Potter" nicht in der Ergebnistabelle; es ist der Titel eines Buches und eines Films. Dank des MINUS Mengenoperators können wir nur die Titel sehen, die in der ersten Tabelle vorkommen und in der zweiten nicht vorhanden sind.

Übrigens verwenden einige Datenbanken das Schlüsselwort EXCEPT statt MINUS. Keine Sorge - die Funktion und die Ergebnisse sind genau dieselben.

Der INTERSECT-Set-Operator

OK, wir wissen also, wie wir mit den Operatoren UNION und MINUS einige Elemente addieren und subtrahieren können. Aber was tun wir, wenn wir wissen wollen, was zwei Abfragen gemeinsam haben?

Dies ist die Hauptaufgabe des INTERSECT Operators. Schauen wir uns an, wie er funktioniert.

SELECT * FROM BOOKS
INTERSECT
SELECT * FROM MOVIES

Und das Ergebnis:

ID Title
1 Harry Potter

Sie wissen jetzt, dass "Harry Potter" (und nur "Harry Potter") in beiden Tabellen vorhanden ist. Er ist also das einzige Element in der Ergebnistabelle.

Minus, Vereinigung, Schnittmenge in SQL: Praktische Tipps

Bei Minus, Union und Schnittmenge in SQL gibt es einige Dinge zu beachten:

  1. Wenn die Spaltennamen oder Aliasnamen, die verglichen werden, unterschiedlich sind, wird die Ergebnisspalte nach der Spalte in der ersten SELECT Abfrage aufgerufen.
  2. Sie können entweder Abfrageergebnisse oder Tabellen mit Mengenoperatoren verwenden.
  3. Die zu vergleichenden Spalten müssen vom gleichen Typ und von gleicher Anzahl sein.
  4. Die Ergebnistabelle wird immer mehr Spalten mit höherer Genauigkeit haben.

Die Operatoren MINUS, UNION und INTERSECT sortieren immer die zurückgegebenen Ergebnisse; UNION ALL nicht. Wenn Sie eine bestimmte Sortierreihenfolge oder einen bestimmten Typ wünschen, können Sie am Ende der Abfrage ein ORDER BY verwenden. Aber denken Sie daran, dass dadurch die gesamte Abfrage sortiert wird! Wir können nicht ORDER BY vor einem SQL-Set-Operator verwenden oder versuchen, jede SELECT einzeln zu sortieren.

Wir sollten auch erwähnen, dass wir Mengenoperatoren wie Minus, Union und Schnittmenge in SQL in allen Arten von Abfragen verwenden können. Wir müssen nicht alle Datensätze aus beiden Tabellen auswählen, sondern können mit den Ergebnissen der bestehenden Abfragen arbeiten.

Es ist erstaunlich, was wir mit Mengenoperatoren wie Minus, Union und Schnittmenge in SQL alles machen können. Dank ihnen können wir interessante Daten leicht finden und präsentieren. Sammeln Sie praktische Erfahrungen im Umgang mit SQL-Mengenoperatoren und anderen Funktionen mit dem LearnSQL.de's SQL für Anfänger Kurs. Starten Sie eine neue spannende Datenreise auf die richtige Art!