Mengenoperatoren in SQL
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