Mengenoperatoren in SQL

aus GlossarWiki, der Glossar-Datenbank der Fachhochschule Augsburg

Definition

Mengenoperatoren verbinden zwei Abfragen zu einem Resultat.

Beispieltabelle:

Tabelle student                         Tabelle lehrender

matrikel_nr  name  vorlesung            matrikel_nr   name   vorlesung
----------------------------            ------------------------------
911574      Meier   Java                878999       Kowa    Datenbanken
676676      Schulz  Datenbanken         665544       Müller  XML


Union

UNION bildet die Vereinigung zweier Relationen indem Zeilen der ersten Menge oder des ersten Operanden mit allen Zeilen der zweiten Menge zusammengefasst werden. Zeilen, die in der Ergebnismenge zweimal vorkommen, werden zu einer einzigen Zeile zusammengefaßt. Die Datentypen der Spalten müssen kompatibel sein, d.h. es muß entweder ein impliziter Cast (z.B. int auf double) möglich sein, oder wenn dies nicht möglich ist, muß ein expliziter Cast erfolgen. - dies bezieht sich auch auf die Anordnung der Spalten in der Abfrage.

SELECT name  FROM student
UNION
SELECT name FROM lehrender

Ergebniss:

name
-----------
Meier
Schulz
Kowa
Müller


UNION ALL

UNION ALL vereinigt alle Zeilen der ersten Menge oder des ersten Operanden mit allen Zeilen der zweiten Menge. Im Unterschied zu UNION werden auch die Duplikate ausgegeben.


INTERSECT

INTERSECT überprüft die Zeilen der beiden Eingangsmengen und gibt nur jene Zeilen aus, die in beiden Eingangsmengen vorkommen. Die Durchschnittsmenge wird aus den zwei Relationen gebildete. Auch hier werden vor dem Erstellen der Ergebnismenge die redundanten Zeilen ausgeschaltet.

SELECT vorlesung FROM student
INTERSECT
SELECT vorlesung FROM lehrender

Ergebniss:

vorlesung
-----------
Datenbanken

MINUS

MINUS gibt die Zeilen aus, die in der ersten Menge, NICHT aber in der zweiten Menge enthalten sind. Zeilen, die in der ersten Menge zweimal vorkommen, werden auf Redundanz überprüft und komprimiert, bevor der Vergleich mit der zweiten Menge beginnt.

SELECT vorlesung FROM student
MINUS
SELECT vorlesung FROM lehrender

Ergebniss

vorlesung
------------
Java


Quellen