Database Reference
In-Depth Information
Bei dieser Abfrage werden alle Personen angezeigt, welche seit
dem 1. September 2007 mehr als einen Kurs besucht haben.
Mit der WHERE-Bedingung werden alle Datensätze mit einem
Kursdatum vor dem 1. September 2007 verworfen. Danach
werden die verbleibenden Datensätze nach der Personalnum-
mer gruppiert. Schließlich werden alle Datensatzgruppen, wel-
che die HAVING-Bedingung nicht erfüllen, ebenfalls verwor-
fen. Nach „HAVING“ muss immer eine Gruppenfunktion ste-
hen, da sich „HAVING“ ja auf Datensatzgruppen und nicht auf
einzelne Datensätze bezieht.
6.3.5
Verschachtelte Abfragen (Subqueries)
Häufig tritt der Fall auf, dass Abfragen auf dem Ergebnis vor-
gängiger Abfragen aufbauen. Wenn wir beispielsweise wissen
möchten, welche Kurse Herr Steffen schon besucht hat, dann
war dies bisher nicht möglich, weil die Kursbezeichnung nur in
der Tabelle „Kurse“, nicht aber in der Tabelle „Kursbesuche“ zu
finden ist. Außerdem erhalten wir die Kursnummern von Herrn
Steffen nur, wenn uns seine Personennummer bekannt ist.
Folglich muss mit einer ersten Abfrage ermittelt werden, wel-
che Personennummer Herr Steffen hat. Mit dieser Perso-
nennummer können in einer zweiten Abfrage alle Kursnum-
mern ermittelt werden, welche zu Herrn Steffen gehören. Die
letzte Abfrage baut dann auf der zweiten Abfrage auf, indem
aus der Tabelle „Kurse“ alle Kursbezeichnungen aufgelistet
werden, deren Kursnummern aus der zweiten Abfrage resultie-
ren:
Beispiel:
SELECT KNr, Kursbezeichnung
FROM Kurse
WHERE KNr IN ( SELECT KNr
FROM Kursbesuche
WHERE PNr = ( SELECT PNr
FROM Personen
WHERE Name = 'Steffen'
AND Vorname = 'Felix' ))
ORDER BY Kursbezeichnung;
Search WWH ::




Custom Search