Übungen
Die folgenden SQL-Abfragen basieren auf der Datenbank "terra4", die folgende Struktur aufweist:
Falls du eine eigene MySQL- oder SQLite-Datenbank hast, dann kannst du für die folgenden Aufgaben die Daten importieren; ansonsten kannst du SQL auch direkt in den Aufgaben ausprobieren.
Download der terra4-Datenbank für MySQL und für SQLite.
Aufgabe 1
- Wie viele Orte sind insgesamt in der Datenbank?
- Wie viele Orte sind davon in Frankreich?
- Was ist die durchschnittliche Einwohnerzahl der französischen Orte?
Beachte, dass in unserer Übungsdatenbank für die einzelnen Länder sehr unterschiedlich viele Orte gespeichert sind.
Aufgabe 2
In welchen Staaten liegen Millionenstädte (mehr als 1 Mio. Einwohner)?
Zähle die Anzahl der Städte pro Land!
Erweiterung: Sortiere nach der Anzahl der Städte absteigend.
Aufgabe 3
Wie viele Einwohner haben die Länder eines Kontinents im Schnitt / minimal / maximal?
Aufgabe 4
Welche Orte liegen an mehr als einem Fluss?
Hilfe: Nutze den HAVING
-Teil!
Kleine Erweiterung: Gib auch noch das Land mit aus und sortiere nach der Anzahl absteigend!
Achte einmal auf den Ort "Koblenz"; diesen gibt es in der Schweiz und in Deutschland - jeweils an zwei Flüssen.
Wird dieser korrekt ausgegeben?
Hilfe: Du kannst auch nach zwei Attributen gruppieren: GROUP BY land.Name, ort.Name
Auch eine Gruppierung nach einem nicht angezeigten Attribut ist möglich: GROUP BY ort.ONR
Deine Ausgabe wird einige Zeilen mehr anzeigen - und vielleicht auch in anderer Reihenfolge.
Aufgabe 5
Wie viele Flüsse fließen durch Deutschland (soweit in der Datenbank erfasst)?
Hilfe: Ermittle zunächst mittels SELECT DISTINCT
alle Flussnamen.
Im zweiten Schritt zähle die Flüsse. Auch hier gibt es einen Befehl, um Duplikate nur einmal zu zählen:
COUNT(DISTINCT fluss.Name)
.
Aufgabe 6
Summiere die Einwohner der Orte der asiatischen Länder pro Land.
Gib auch die Einwohnerzahl aus der land-Tabelle mit aus. Warum stimmen die Werte nicht überein?
Kannst du die Ausgabe noch so verbessern, dass die Werte leichter vergleichbar sind?
Die Zahlen im Beispiel können durch Aktualisierung der Datenbank inzwischen abweichen.
Aufgabe 7 - zum Exkurs Subselect
Für diese Aufgabe musst du wahrscheinlich eine Subselect-Anweisung verwenden.
Welche Orte in Frankreich liegen jeweils am weitesten im Norden, Osten, Süden und Westen?
Erstaunlich? Vielleicht suchst du die Orte einmal auf einer Karte!
Schaffst du es, alle diese Orte in einem SELECT-Befehl herauszufinden?
Aufgabe 8 - für Experten!
Für diese Aufgabe musst du wahrscheinlich mehrfache Subselect-Anweisung verwenden.
Für welchen Fluss sind die meisten Orte verzeichnet?
Achtung Spoiler! Da das wirklich schwierig ist, hier die Auflösung zum Klicken.
Kannst du die Lösung nachvollziehen?
SELECT fluss.*, COUNT(*) AS Anzahl
FROM fluss, stadtfluss
WHERE fluss.FNR = stadtfluss.FNR
GROUP BY fluss.FNR
HAVING Anzahl =
(SELECT MAX(Anzahl)
FROM
(SELECT FNR,COUNT(*) AS Anzahl
FROM stadtfluss
GROUP BY FNR) AS MeineTabelle
)
Quellen
- [1]: Wappen Reunion - Urheber: Manassas - Lizenz: Creative Commons BY-SA 2.5