<< >> Up Title Contents Index

Korrelation

Mit inneren Abfragen lassen sich auch Bedingungen zur Zeilenauswahl formulieren, die nicht für alle Zeilen einer Tabelle, sondern nur für Gruppen von Zeilen gelten sollen.

Zuerst noch das Beispiel einer Anfrage, die den Kunden mit dem höchsten Kontostand aus einer ganzen Tabelle feststellt:

SELECT nachname, plz, ort, konto
       FROM kunde
       WHERE konto =
       (SELECT MAX(konto)
               FROM kunde)

Ergebnis:

Eine Unterabfrage heißt korrelierte Unterabfrage, wenn sie sich auf Spalten von äußeren Tabellen bezieht. Nicht-korrelierte Unterabfragen werden nur einmal ausgewertet. Korrelierte Unterabfragen werden für jede Zeile der äußeren Tabelle ausgewertet, bei geschachtelten Unterabfragen von innen nach außen.

Das folgende ist ein Beispiel für eine Korrelation. Es zeigt die Kunden mit den höchsten Kontoständen an ihren Orten:

SELECT nachname, ort, konto
       FROM kunde dieser_kunde
       WHERE konto =
       (SELECT MAX(konto)
               FROM kunde
               WHERE ort = dieser_kunde.ort)
       ORDER BY ort

Ergebnis:

'dieser_kunde' im Beispiel wird als 'Referenzname' bezeichnet.

Da in dem vorliegenden Beispiel in der inneren und äußeren Abfrage die gleiche Tabelle angesprochen wird, muß ein Referenzname vergeben werden. Seine Aufgabe besteht hier darin, eine Zeile aus dem Ergebnis der Hauptanfrage mit einem Wert in der bedingten Anweisung zu verknüpfen, d. h. damit zu korrelieren.

Es folgt eine ausführliche Beschreibung des Beispiels:

Ein weiteres Beispiel für die Verwendung von Korrelationsvariablen nimmt eine Gruppierung nach dem 'raumtyp' vor. Es werden die Hotels mit ihren Preisen gesucht, die unter dem Durchschnittspreis der jeweiligen Zimmerkategorie liegen.

SELECT hnr, raumtyp, preis
       FROM raum x
       WHERE preis <
       (SELECT AVG (preis)
           FROM raum
           WHERE raumtyp = x.raumtyp)


<< >> Up Title Contents Index