7.4. Anfragen kombinieren

Die Ergebnisse zweier Anfragen können mit Mengenoperationen vereinigt werden. Die möglichen Operationen sind Vereinigungsmenge (englisch union), Schnittmenge (intersection) und Differenzmenge. Die Syntax ist

anfrage1 UNION [ALL] anfrage2
anfrage1 INTERSECT [ALL] anfrage2
anfrage1 EXCEPT [ALL] anfrage2

anfrage1 und anfrage2 sind Anfragen, die von jeder der bisher beschriebenen Fähigkeiten Gebrauch machen können. Mengenoperationen können auch verschachtelt und verkettet werden, wie zum Beispiel:

anfrage1 UNION anfrage2 UNION anfrage3

Das bedeutet das gleiche wie:

(anfrage1 UNION anfrage2) UNION anfrage3

UNION, die Vereinigungsmengenoperation, hängt das Ergebnis von anfrage2 im Prinzip an das Ergebnis von anfrage1 an (obwohl es keine Gewähr dafür gibt, dass die Zeilen auch in dieser Reihenfolge zurückgegeben werden). Darüber hinaus werden alle doppelten Zeilen, im Sinne von DISTINCT, entfernt, außer wenn UNION ALL verwendet wird.

INTERSECT, die Schnittmengenoperation, ermittelt alle Zeilen, die sowohl im Ergebnis von anfrage1 als auch im Ergebnis von anfrage2 sind. Doppelte Zeilen werden entfernt, außer wenn INTERSECT ALL verwendet wird.

EXCEPT, die Differenzmengenoperation, ermittelt alle Zeilen, die im Ergebnis von anfrage1 aber nicht im Ergebnis von anfrage2 sind. Doppelte Zeilen werden wiederum entfernt, außer wenn EXCEPT ALL verwendet wird.

Um die Vereinigungsmenge, Schnittmenge oder Differenzmenge zweier Anfrage berechnen zu können, müssen die Anfragen vereinigungskompatibel (englisch union compatible) sein, was heißt, dass beide die gleiche Anzahl von Spalten ergeben und dass die entsprechenden Spalten kompatible Datentypen haben, wie in Abschnitt 10.5 erklärt.