Beim Schreiben einer SQL-Anweisung SELECT können Sie zusätzliche Anweisungen SELECT in die Klausel WHERE stellen. Jede zusätzliche Anweisung SELECT startet eine Unterabfrage.
Eine Unterabfrage kann dann wiederum eine weitere, separate Unterabfrage enthalten, deren Ergebnis in die Klausel WHERE der ursprünglichen Unterabfrage eingesetzt wird. Außerdem kann eine Klausel WHERE Unterabfragen in mehreren Suchbedingungen enthalten. Die Unterabfrage kann sich auf andere Tabellen und Spalten als die Hauptabfrage beziehen.
Die folgende Anweisung wählt den Unternehmensbereich (Spalte DIVISION) und den Standort (Spalte LOCATION) aus der Tabelle ORG für den Mitarbeiter aus, dessen ID in der Tabelle STAFF 280 lautet:
SELECT DIVISION, LOCATION FROM ORG WHERE DEPTNUMB = (SELECT DEPT FROM STAFF WHERE ID = 280)
Beim Verarbeiten einer Anweisung bestimmt DB2 zunächst das Ergebnis der Unterabfrage. Das Ergebnis der Unterabfrage aus dem Beispiel ist 66, da der Mitarbeiter mit der ID 280 zur Abteilung 66 gehört. Das Endergebnis wird anschließend aus der Zeile der Tabelle ORG entnommen, deren Spalte DEPTNUMB den Wert 66 hat. Das Endergebnis lautet:
DIVISION LOCATION ---------- ------------- Western San Francisco
Wenn Sie eine Unterabfrage verwenden, wertet der Datenbankmanager sie aus und setzt den resultierenden Wert direkt in die Klausel WHERE ein.
Unterabfragen werden im Abschnitt Unterabfragen mit Korrelationsbezug näher erläutert.