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.

  1. Zunächst formulieren wir eine SQL-Anweisung, die die durchschnittlichen Anschaffungskosten aller vorhandenen Fahrzeuge ermittelt.

    SQL
    SELECT 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.
  2. 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.

    SQL
    SELECT *
    FROM Fahrzeug
    WHERE Anschaffungskosten > (SELECT AVG(Anschaffungskosten) FROM Fahrzeug);
    Abb. 3-117: SQL-Anweisung
Aufgabe

Aufgabe 3-15: Unterabfragen

Datenbank Firmenwagen

Erstellen Sie jeweils eine SQL-Anweisung, die als Abfrageergebnis eine Tabelle mit den gewünschten Daten zurückgibt:

  1. Ermitteln Sie alle Daten der Versicherungsverträge, für die der geringste Beitrag zu zahlen ist. Lösung
    Lösung
    SQL
    SELECT *
    FROM versicherungsvertrag
    WHERE beitrag=(SELECT MIN(Beitrag) FROM versicherungsvertrag);
    Abb. 3-118: SQL-Anweisung
  2. Ermitteln Sie die Modellbezeichnung, das Kennzeichen und die Anschaffungskosten der teuersten Firmenwagen. Lösung
    Lösung
    SQL
    SELECT 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