i

Übungen

Die folgenden SQL-Abfragen basieren auf der Datenbank "terra4", die folgende Struktur aufweist:

Schema terra4

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.

SQL FensterDownload der terra4-Datenbank für MySQL und für SQLite.

Aufgabe 1

  1. Wie viele Orte sind insgesamt in der Datenbank?
  2. Wie viele Orte sind davon in Frankreich?
  3. 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

Ergebnis

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

Ergebnis

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

Orte an mehreren Flüssen

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

Ergebnis

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

Suche

v
3.1.5.4
dev.inf-schule.de/datenbanksysteme/terra/aggregation/uebungen
dev.inf-schule.de/3.1.5.4
dev.inf-schule.de/@/page/3kNtU6Xc8P4R9Jwj

Rückmeldung geben