Exkurs - Subselect
Eine typische Anfrage könnte sein: Welcher Ort hat die meisten Einwohner in Deutschland? Das Ergebnis kennst Du sicher...
Eine einfache Lösung zur Überprüfung könnte folgender SQL-Befehl sein:
SELECT ort.Name, ort.Landesteil, ort.Einwohner
FROM ort, land
WHERE ort.LNR = land.LNR
AND land.Name = 'Deutschland'
ORDER BY Einwohner DESC
Aus der Ergebnistabelle lässt sich leicht Berlin als größte Stadt Deutschlands herauslesen. Viel schöner wäre es ja allerdings, wenn nur ein Datensatz, also Berlin, angezeigt wurde. Das ist aber nicht so einfach möglich.
Vielleicht hast du ja folgenden SQL-Befehl dafür im Sinn, er führt aber nicht zum gewünschten Ergebnis. Kannst du erklären warum?
SELECT ort.*, MAX(ort.Einwohner) AS "größte Einwohnerzahl"
FROM ort, land
WHERE ort.LNR = land.LNR
AND land.Name = 'Deutschland'
Um wirklich den Ort mit den meisten Einwohnern herauszufinden, muss genau der Datensatz gefunden werden, der die meisten Einwohner besitzt. Dafür muss man diese Zahl erst einmal bestimmen:
SELECT MAX(ort.Einwohner) AS "größte Einwohnerzahl"
FROM ort, land
WHERE ort.LNR = land.LNR
AND land.Name = 'Deutschland'
-- Mit diesem Ergebnis kann man nun weitersuchen:
SELECT ort.*
FROM ort, land
WHERE ort.LNR = land.LNR
AND land.Name = 'Deutschland'
AND ort.Einwohner = 3469849 -- Einwohnerzahl von Berlin
Genau diese beiden Schritte lassen sich auch in einen SQL-Befehl zusammenfassen:
SELECT ort.*
FROM ort, land
WHERE ort.LNR = land.LNR
AND land.Name = 'Deutschland'
AND ort.Einwohner =
(SELECT MAX(ort.Einwohner)
FROM ort, land
WHERE ort.LNR = land.LNR
AND land.Name = 'Deutschland')
Du erkennst sicherlich den SELECT-Befehl, der sich wiederum in der WHERE-Bedingung befindet.
Einzelne Werte für die WHERE-Bedingung oder auch Tabellen für den FROM-Teil können wiederum dem Ergebnis eines SELECT-Befehls entspringen. Man nennt solche geschachtelten SELECT-Befehle auch Subselect-Anweisungen.