MINT lernen

SQL: Daten abfragen

Zwei Textaufgaben mit Hinweisen und Erwartungshorizont zu SQL-Abfragen auf Schul-Datenbanken.

Dein Fortschritt:
0 / 0 Aufgaben
1

Die Schulbibliothek

AFB I–II

Die Schulbibliothek hat ihren Bestand in einer Datenbank erfasst. Ein Ausschnitt der Tabelle buecher ist unten abgebildet.

Tabelle buecher der Schulbibliothek
id titel autor jahr seiten ausgeliehen 1 Momo Ende 1973 304 nein 2 Tschick Herrndorf 2010 256 ja 3 Die Welle Rhue 1981 192 nein 4 Krabat Preußler 1971 336 ja 5 Emil und die Detektive Kästner 1929 176 nein 6 Die Tribute von Panem Collins 2008 416 nein 7 Wunder Palacio 2012 384 ja
jahr = Jahr der Erstausgabe, seiten = Seitenzahl des Bibliotheksexemplars, ausgeliehen = ja/nein.
  1. Entnimm der Abbildung, wie viele Datensätze und wie viele Attribute die Tabelle hat, und gib den Datensatz mit der id 4 an.
  2. Wende die folgende Abfrage auf die Tabelle an und gib die Ergebnistabelle an:
    SELECT titel, seiten FROM buecher WHERE ausgeliehen = 'nein' ORDER BY seiten DESC;
  3. Erstelle eine SQL-Abfrage, die zählt, wie viele Bücher vor 2010 erstmals erschienen sind, und gib das Ergebnis an.

Hinweise

Hinweis zu Aufgabe a)
Datensätze sind Zeilen, Attribute sind Spalten. Die Kopfzeile ist kein Datensatz.
Hinweis zu Aufgabe b)
Erst filtern (WHERE), dann sortieren (ORDER BY), zuletzt nur die Spalten aus SELECT behalten.
Hinweis zu Aufgabe c)
Zum Zählen gibt es COUNT(*). „Vor 2010“ heißt: 2010 selbst zählt nicht mit.

Erwartungshorizont

Erwartungshorizont zu Aufgabe a)

7 Datensätze (Zeilen) und 6 Attribute (id, titel, autor, jahr, seiten, ausgeliehen). Datensatz mit id 4: Krabat, Preußler, 1971, 336 Seiten, ausgeliehen = ja.

Erwartungshorizont zu Aufgabe b)

Nicht ausgeliehen sind Momo, Die Welle, Emil und die Detektive und Die Tribute von Panem. Absteigend nach Seiten sortiert:

Die Tribute von Panem | 416
Momo | 304
Die Welle | 192
Emil und die Detektive | 176

Das Ergebnis ist wieder eine Tabelle mit den zwei Spalten titel und seiten.

Erwartungshorizont zu Aufgabe c)

SELECT COUNT(*) FROM buecher WHERE jahr < 2010;

Ergebnis: 5 (Momo 1973, Die Welle 1981, Krabat 1971, Emil und die Detektive 1929, Die Tribute von Panem 2008). Tschick (2010) und Wunder (2012) zählen nicht.

2

Das Sportfest

AFB II–III

Beim Sportfest laufen die neunten Klassen 800 m. Die Sportfachschaft speichert die Zeiten in Sekunden in der Tabelle laeufe. Wer unter 180 Sekunden bleibt, bekommt eine Ehrenurkunde.

Tabelle laeufe
name  | klasse | zeit_s
------+--------+-------
Ada   | 9a     |    172
Ben   | 9a     |    195
Cem   | 9a     |    185
Dana  | 9b     |    169
Emil  | 9b     |    201
Finn  | 9b     |    178
Greta | 9c     |    175
Hira  | 9c     |    188
  1. Die Abfrage SELECT AVG(zeit_s) FROM laeufe WHERE klasse = '9a'; liefert 184. Interpretiere dieses Ergebnis im Sachzusammenhang.
  2. Leon möchte alle Namen aus der 9a und der 9b mit einer Zeit unter 180 s und schreibt:
    SELECT name FROM laeufe WHERE klasse = '9a' OR klasse = '9b' AND zeit_s < 180;
    Überprüfe, ob seine Abfrage das Gewünschte liefert.
  3. Entwirf eine Abfrage für die Urkundenliste: Name, Klasse und Zeit aller Läuferinnen und Läufer mit Urkunde, die schnellste Person zuerst. Gib auch das Ergebnis an.
  4. Der Sportlehrer meint: „Für acht Zeilen brauche ich keine Datenbank, eine Liste im Heft reicht.“ Diskutiere diese Aussage.

Hinweise

Hinweis zu Aufgabe a)
Rechne nach: Welche Zeilen gehen in den Durchschnitt ein? Was sagt ein Durchschnitt über einzelne Personen aus?
Hinweis zu Aufgabe b)
Wende die Abfrage Zeile für Zeile an. In SQL wird AND vor OR ausgewertet — wie Punkt vor Strich. Klammern ändern die Reihenfolge.
Hinweis zu Aufgabe c)
Welche Bedingung steht in WHERE, nach welcher Spalte wird in welche Richtung sortiert?
Hinweis zu Aufgabe d)
Denke an mehrere Jahrgänge, mehrere Jahre, mehrere Personen, die gleichzeitig zugreifen, und an den Aufwand beim Einrichten.

Erwartungshorizont

Erwartungshorizont zu Aufgabe a)

Es gehen nur Ada, Ben und Cem ein: (172 + 195 + 185) : 3 = 184. Die 9a hat im Mittel 184 s, also 3 min 4 s gebraucht — etwas mehr als die Urkundengrenze von 180 s. Der Durchschnitt sagt aber nichts über Einzelne: Ada liegt mit 172 s darunter und bekommt eine Urkunde, Ben liegt deutlich darüber.

Erwartungshorizont zu Aufgabe b)

Weil AND zuerst ausgewertet wird, liest die Datenbank: klasse = '9a' OR (klasse = '9b' AND zeit_s < 180). Ergebnis: Ada, Ben, Cem, Dana, Finn — also alle aus der 9a, auch Ben (195 s) und Cem (185 s). Das ist nicht gewünscht. Richtig: WHERE (klasse = '9a' OR klasse = '9b') AND zeit_s < 180 liefert Ada, Dana und Finn.

Erwartungshorizont zu Aufgabe c)

SELECT name, klasse, zeit_s FROM laeufe WHERE zeit_s < 180 ORDER BY zeit_s ASC;

Ergebnis: Dana | 9b | 169, Ada | 9a | 172, Greta | 9c | 175, Finn | 9b | 178. Es werden also vier Urkunden gebraucht.

Erwartungshorizont zu Aufgabe d)

Pro Heftliste: Bei acht Zeilen ist sie schneller angelegt, man muss keine Datenbank einrichten und kein SQL können. Contra: In Wirklichkeit laufen alle Klassen und Jahrgänge, jedes Jahr kommen neue Daten dazu; Abfragen wie Durchschnitt, Urkundenliste oder Sortierung liefert SQL sofort und fehlerfrei, und mehrere Lehrkräfte können gleichzeitig darauf zugreifen. Begründetes Ergebnis: Für einen einzelnen Lauf reicht die Liste; für das ganze Sportfest über mehrere Jahre lohnt sich die Datenbank.