3.10 Unterabfragen
Wird in einer Berechnung oder einer Bedingung ein Wert benötigt, der selbst das Ergebnis einer Abfrage ist, wird an dieser Stelle eine Unterabfrage eingefügt, die den entsprechenden Wert ermittelt.
Beispiel
Gewünscht wird eine Übersicht, die alle Daten aller vorhandenen Fahrzeuge zeigt, deren Anschaffungskosten über dem Durchschnitt liegen.
-
Zunächst formulieren wir eine SQL-Anweisung, die die durchschnittlichen Anschaffungskosten aller vorhandenen Fahrzeuge ermittelt.
SQLSELECT AVG(Anschaffungskosten)
FROM Fahrzeug;Abb. 3-115: SQL-Anweisung Abfrageergebnis
AVG(Anschaffungskosten) 27007.647059 Abb. 3-116: Abfrageergebnis der SQL-Anweisung aus Abb. 3-115. -
Anschließend erstellen wir eine SQL-Anweisung, die alle Daten aller vorhandenen Fahrzeuge abfragt. In der
WHERE-Klausel geben wir dabei die Bedingung vor, dass nur die Fahrzeuge berücksichtigt werden, deren Anschaffungskosten über dem Durchschnitt liegen. Als Durchschnitt geben wir jedoch keine Zahl an, sondern die SQL-Anweisung aus Abb. 3-115, die als Unterabfrage fungiert genau diesen Wert ermittelt.SQLSELECT *
FROM Fahrzeug
WHERE Anschaffungskosten > (SELECT AVG(Anschaffungskosten) FROM Fahrzeug);Abb. 3-117: SQL-Anweisung
Aufgabe 3-15: Unterabfragen
Datenbank Firmenwagen
Erstellen Sie jeweils eine SQL-Anweisung, die als Abfrageergebnis eine Tabelle mit den gewünschten Daten zurückgibt:
-
Ermitteln Sie alle Daten der Versicherungsverträge, für die der geringste Beitrag zu zahlen ist.
Lösung
Lösung
SQLSELECT *
FROM versicherungsvertrag
WHERE beitrag=(SELECT MIN(Beitrag) FROM versicherungsvertrag);Abb. 3-118: SQL-Anweisung -
Ermitteln Sie die Modellbezeichnung, das Kennzeichen und die Anschaffungskosten der teuersten Firmenwagen.
Lösung
Lösung
SQLSELECT Bezeichnung, Kennzeichen, Anschaffungskosten
FROM Fahrzeug INNER JOIN Fahrzeugmodell ON Fahrzeug.Fahrzeugmodell_ID=Fahrzeugmodell.ID
WHERE anschaffungskosten = (SELECT MAX(anschaffungskosten) FROM fahrzeug);Abb. 3-119: SQL-Anweisung