## Subquery (subquery)

Eine Subquery (subquery) spezifiziert eine Ergebnistabelle, die in bestimmten Prädikaten und beim Ändern von Spaltenwerten verwendet werden kann.

Eine skalare Subquery (scalar_subquery) ist eine spezielle Subquery.

### Syntax

<subquery> ::= (<query_expression>)

<scalar_subquery> ::= <subquery>

### Beispiele

SQL-Tutorial, Subquery: Innere Abfragen

### Erläuterung

Subqueries können in einer SET UPDATE-Klausel einer UPDATE-Anweisung verwendet werden. In diesem Fall darf die Subquery nur eine Ergebnistabelle, die höchstens eine Zeile enthält, bilden.

Subqueries können in einer INSERT-Anweisung verwendet werden (INSERT-Anweisung).

In folgenden Prädikaten können Subqueries verwendet werden:

· Vergleichsprädikat

· EXISTS-Prädikat

· IN-Prädikat

· Mengenvergleichsprädikat

#### Correlated Subqueries

Gewisse Prädikate können Subqueries enthalten. Diese Subqueries können wiederum Subqueries enthalten, usw. Eine Subquery, die Subqueries enthält, ist von höherer Stufe als die in ihr enthaltenen Subqueries.

· In der Suchbedingung einer Subquery dürfen Spaltennamen auftreten, die zu Tabellen gehören, die in höheren Stufen in der FROM-Klausel enthalten sind. Eine Subquery dieser Art heißt Correlated Subquery.

· Tabellen, die in dieser Weise in Subqueries verwendet werden, werden als Correlated Tables bezeichnet. Mehr als 16 Correlated Tables sind in einer SQL-Anweisung nicht zulässig.

· Spalten, die derart in Subqueries verwendet werden, heißen Correlated Columns. Ihre Anzahl in einer SQL-Anweisung ist auf 64 beschränkt.

Wenn der qualifizierende Tabellen- oder Referenzname nicht eindeutig eine Tabelle höherer Stufe bezeichnet, wird unter diesen nicht eindeutigen Tabellen die Tabelle niedrigster Stufe genommen.

Wird der Spaltenname nicht durch den Tabellennamen oder den Referenznamen qualifiziert, wird in den Tabellen höherer Stufen gesucht. Der Spaltenname muss dann in allen Tabellen der FROM-Klausel, zu der die gefundene Tabelle gehört, eindeutig sein.

Wird eine Correlated Subquery verwendet, gehen die Werte einer oder mehrerer Spalten einer Zwischenergebniszeile einer höheren Stufe in die Suchbedingung einer Subquery niederer Stufe ein, wobei das Ergebnis der Subquery für die endgültige Qualifikation der Zwischenergebniszeile der höheren Stufe verwendet wird.

#### Skalare Subquery (scalar_subquery)

Skalare Subqueries entstehen durch Einschränkung der Ergebnismenge einer Ergebnistabelle auf höchstens einen Wert.

Skalare Subqueries können als Ausdruck (expression)verwendet werden.

Skalare Subqueries sind nicht in einer GROUP- oder ORDER-Klausel erlaubt.

Skalare Subquery in der Liste der einzufügenden Werte in einer INSERT-Anweisung:

INSERT INTO hotel.hotel VALUES((SELECT MAX(hno)+10 FROM hotel), 'Three Seasons', 90014, 'Los Angeles', '247 Broad Street')

Skalare Subquery in einer selektierten Spalte:

SELECT hno, price, (SELECT MIN(price) FROM hotel.room) FROM hotel.room