Unterabfragen können in einer WHERE- oder HAVING-Klausel anstelle eines Ausdrucks verwendet werden. Für eine Unterabfrage kann man verschiedene Syntaxvarianten formulieren.
Syntax:
SELECT
...
... { WHERE | HAVING }
Feld {= | > | < | >= | <=
| <> }
(weitere SELECT Anweisung)
SELECT
...
... { WHERE | HAVING }
Feld [NOT] IN
(weitere SELECT
Anweisung)
SELECT
...
... { WHERE | HAVING }
Feld {= | > | < | >= | <=
| <> }
{ ALL | ANY | SOME }(weitere SELECT Anweisung)
SELECT
...
... WHERE
[NOT] EXISTS
(weitere SELECT Anweisung)
Regeln:
Eine Unterabfrage wird immer als rechtsseitiger Ausdruck einer Vergleichsbedingung ausgedrückt, wobei die Unterabfrage in Klammern zu setzen ist.
Die Unterabfrage muß den gleichen Datentyp liefern, wie der linksseitige Ausdruck.
Wenn ein Vergleich nur mit den Operatoren =,>,<,>=,<=,<> gebildet wird, muß die Unterabfrage so formuliert werden, daß sie nur einen Wert als Ergebnis liefert.
Die Klausel ORDER BY ist innerhalb der Unterabfrage nicht zulässig, sondern erst im Anschluß daran als Weiterführung der Hauptanfrage.
Innerhalb einer Unterabfrage ist die UNION-Klausel nicht erlaubt.