Geschachtelte Anfragen
Bedingungen haben prinzipiell die Struktur
<Attribut> <Operator> <Wert> (z.B.
Name=„John“) wobei die Werte wiederum Attribute, Konstanten oder aber das
Resultat von Unteranfragen sein können, d. h. man muss die Werte von Bedingungen
nicht unbedingt fix definieren, sondern kann sie mittels einer verschachtelten
Anfrage generieren. Anfragen können so beliebig tief verschachtelt werden.
Es gibt drei Typen von Unteranfragen, welche sich durch ihr Resultat unterscheiden:
- Unteranfragen die einen Wert zurückgeben (eine Spalte und eine Zeile)
- Unteranfragen die eine Zeile zurückgeben
- Unteranfragen die meherere Zeilen zurückgeben
Wird nur ein Wert oder eine Zeile zurückgegeben, können die normalen Vergleichsoperatoren verwendet werden.
Werden mehrere Zeilen zurückgeben, kommen spezielle Operatoren zum Einsatz:
IN
sucht ob der Wert in der Unteranfrage vorkommt
<Vergleichsoperator> ALL
die Bedingung muss für alle Zeilen in der Unterabfrage TRUE ergeben
<Vergleichsoperator> ANY (SOME)
die Bedingung muss für mindestens eine Zeile in der Unterabfrage TRUE ergeben

Unteranfragen können auch im FROM Teil einer Anfrage vorkommen.
So kann eine Relation speziell für eine Anfrage zusammengestellt werden. Der Unteranfrage muss mit AS ein Namen zugewiesen
werden:
(<Unterabfrage>) AS <Name>