Die WHERE-Klausel (where_clause) gibt die Bedingungen für das Bilden einer Ergebnistabelle an.
<where_clause> ::= WHERE <search_condition>
Die Suchbedingung (search_condition) wird auf jede Zeile der durch die FROM-Klausel gebildeten Zwischenergebnistabelle angewendet. Das Ergebnis der WHERE-Klausel ist eine Tabelle, die nur noch diejenigen Zeilen der Ergebnistabelle enthält, für die die Suchbedingung wahr ist.
Die Suchbedingung darf nur Spaltenspezifikationen enthalten, auf die der Benutzer das SELECT-Privileg hat.
Jede direkt in der Suchbedingung enthaltene Spaltenspezifikation muss eindeutig eine Spalte aus den in der FROM-Klausel des Tabellenausdrucks angegebenen Tabellen bezeichnen. Gegebenenfalls ist der Spaltenname durch den Tabellenbezeichner zu qualifizieren. Wenn in der FROM-Klausel für Tabellennamen Referenznamen (reference_name) definiert wurden, sind die Referenznamen als Tabellenbezeichner in der Suchbedingung zu verwenden.
Ein in der Suchbedingung enthaltener Ausdruck (expression) darf bis auf folgende Ausnahme keine Set-Funktion (set_function_spec) enthalten:
SELECT ... FROM uppertab,...
HAVING ... (SELECT ...
WHERE
MIN(uppertab, ...)...
)
Die SELECT-Anweisung in der angegebenen Form ist erlaubt.
In der in einer HAVING-Klausel verwendeten Subquery ist es möglich, WHERE-Klauseln zu verwenden, die Set-Funktionen für die Spalten der in der SELECT … HAVING-Anweisung angegebenen Tabelle enthalten (Correlated Subquery).
Im Fall einer Correlated Subquery kann eine Spaltenspezifikation eine Spalte einer Tabelle bezeichnen, die in einer FROM-Klausel eines anderen Tabellenausdrucks der QUERY-Spezifikation angegeben wurde.
Jede Subquery in der Suchbedingung wird in der Regel nur einmal ausgewertet. Im Fall einer Correlated Subquery wird die Subquery für jede Zeile der durch die FROM-Klausel gebildeten Ergebnistabelle ausgeführt.