Inf10 1.3 Unterabfragen

Zu den Aufgaben

Möchte man Ergebnisse einer Abfrage in einer weiteren Abfrage benutzen, verwendet man sogenannte Unterabfragen. Grundsätzlich gibt es zwei Möglichkeiten, die Ergebnisse einer Unterabfrage zu nutzen:

  • Ergebnis als Wertevergleich (in WHERE z.B. Aggregatsfunktion)
  • Ergebnis der Unterabfrage als Tabelle (in FROM)

Manche Abfragen erfordern, dass wir das Zwischenergebnis einer Abfrage nutzen, um das Ergebnis zu berechnen. Wir verschachteln dabei die Abfragen ineinander. Die innere der beiden Abfragen nennen wir Unterabfrage.

Merksatz 1.3.1

Beispiel 1:

Gib alle Gemeinden aus, die eine überdurchschnittliche Fläche haben.

Bei dieser Abfrage brauchen wir als Zwischenergebnis die durchschnittliche Fläche aller Gemeinden. Dies erreichen wir mit der Abfrage aller Flächen und der Aggregatsfunktion AVG.

SELECT AVG(flaeche) 
FROM Gemeinde 
WHERE 1

Das Ergebnis dieser Abfrage muss in die Abfrage welche Gemeinden größer sind eingebaut werden:

SELECT name, flaeche
FROM Gemeinde
WHERE flaeche>(SELECT AVG(flaeche) FROM Gemeinde WHERE 1)

Von der Auswertung her wird immer die innerste Abfrage zuerst ausgeführt.

Beispiel 2:

„Gib die Tabelle Nachbargemeinde mit den Namen der Gemeinden statt ihren IDs aus.“

Hier müssen wir in einer Tabelle zwei IDs durch die Gemeindenamen ersetzen. In einer Abfrage können wir über die Projektion Schlüssel=Fremdschlüssel nur eine der beiden verändern:

SELECT name, gemeindeschluessel_2 
FROM Nachbargemeinde, Gemeinde 
WHERE gemeindeschluessel_1=schluessel

Das Ergebnis dieser Abfrage ist eine Tabelle mit Namen der ersten Gemeinde und der ID der zweiten. In einer zweiten äußeren Abfrage können wir das nun auch noch ersetzen:

SELECT g.name, Gemeinde.name
FROM Gemeinde, (SELECT name, gemeindeschluessel_2 FROM Nachbargemeinde, Gemeinde WHERE gemeindeschluessel_1=schluessel) As g
WHERE g.gemeindeschluessel_2=Gemeinde.schluessel

Wir sehen, um die Tabelle, die bei der Unterabfrage erstellt wird, ansprechen zu können müssen wir ihr einen Namen (hier: g mit Befehl As g ) geben.



Aufgabe 1:

Gibt es Gemeinden in der Datenbank, die mehr Einwohner haben als der ganze Regierungsbezirk Schwaben?

Aufgabe 2:

Gib alle Orte aus, die die maximale Anzahl an Radwegen haben (es könnten mehrere sein!).

Aufgabe 3:

Gib alle Orte aus, die mehr Einwohner als Rosenheim, Bad Aibling und Halsbach zusammen haben.

Aufgabe 4:

Gib alle Gemeinden aus, die einen Zoo und einen Freizeitpark haben.

Aufgabe 5:

Kannst du alle Flüge mit Start- und Endflughafen ausgeben, die verspätet waren?

Aufgabe 6:

Erweitere die Abfrage aus Aufgabe 5 so, dass nur die überdurchschnittlich weiten Flüge betrachtet werden.

Aufgabe 7:

Gib alle Künstler aus, die überdurchschnittlich viele Werke erstellt haben.

Aufgabe 8:

Gib Künstler, Werk und jeweilige Ausstellung in der das Werk steht aus.

Aufgabe 9:

Wenn du fertig bist, kannst du versuchen das Murder-Mystery aufzuklären.


Zurück zur Übersicht