Rückblick
Vier Lektionen, ein Satzbau: SELECT … FROM … WHERE … ORDER BY … LIMIT. Alles, was in diesem Kapitel dazukam, hängt an einer dieser fünf Stellen. Wenn du das im Kopf hast, kannst du jede Abfrage über eine Tabelle schreiben.
Das kann ich jetzt
- Ich kann Spalten auswählen (Projektion) und ihnen mit
ASeinen Namen geben. (2.1) - Ich kann Zeilen auswählen (Selektion) und Bedingungen mit
AND,OR,NOTverknüpfen – mit Klammern, wo nötig. (2.2) - Ich kann mit
LIKE,INundBETWEENumgehen. (2.2) - Ich kann Ergebnisse sortieren, Doppelte entfernen und die Ausgabe begrenzen. (2.3)
- Ich kann in einer Abfrage rechnen und weiß, wann eine Division ganzzahlig wird. (2.4)
- Ich kann den Unterschied zwischen einem Syntax- und einem Semantikfehler an einem Beispiel erklären. (2.1)
Gemischte Aufgaben
Aufgabe 1: Fünf Abfragen
a) Name und Kapazität aller Bühnen, die mindestens 1000 Menschen fassen – die größte zuerst.
b) Alle vorkommenden Ticketkategorien mit ihrem Preis, jede nur einmal, teuerste zuerst.
c) Alle Bands aus Deutschland oder Oesterreich, die nach 2010 gegründet wurden, alphabetisch nach Namen.
d) Alle Auftritte, die länger als 60 Minuten dauern: Datum, Beginn und die Dauer in Stunden, auf eine Nachkommastelle gerundet.
e) Die fünf Auftritte mit den meisten Zuschauern – Datum, Beginn und Zuschauerzahl.
Tipp 1: In welcher Reihenfolge denke ich?
Immer dieselben vier Fragen, in dieser Reihenfolge:
- Aus welcher Tabelle? →
FROM - Welche Zeilen? →
WHERE - Welche Spalten? →
SELECT - In welcher Ordnung, wie viele? →
ORDER BY,LIMIT
Tipp 2: zu b) und d)
Zu b): „Jede nur einmal" ist das Stichwort für DISTINCT. Achte darauf, dass sich DISTINCT auf die ganze Zeile bezieht, nicht nur auf die erste Spalte.
Zu d): Minuten in Stunden heißt teilen durch 60. Schreib 60.0 statt 60, sonst rechnet SQLite ganzzahlig und alles wird 1 oder 2.
Aufgabe 2: Vier fehlerhafte Abfragen
Jede dieser Abfragen ist falsch. Sag für jede: Ist es ein Syntaxfehler oder ein Semantikfehler? Was ist die Wirkung, und wie lautet die richtige Fassung?
-- a)
SELECT name FROM band WHERE herkunftsland = Deutschland;
-- b)
SELECT name, kapazitaet FROM buehne ORDER BY kapazitaet WHERE kapazitaet > 1000;
-- c)
SELECT name FROM band WHERE gruendungsjahr > 2010 OR gruendungsjahr < 2020;
-- d)
SELECT datum, zuschauer FROM auftritt LIMIT 3;
Zu d) gehört die Frage: Die Abfrage läuft fehlerfrei. Warum ist sie als Antwort auf „Zeig mir die drei bestbesuchten Auftritte" trotzdem falsch?
Tipp
Syntaxfehler heißt: Das Datenbanksystem versteht den Satz nicht und weigert sich. Semantikfehler heißt: Es versteht ihn, führt ihn aus – und liefert etwas anderes, als du wolltest. Die zweite Sorte ist die gefährliche.
Aufgabe 3: Abfragen lesen
Formuliere für jede Abfrage einen deutschen Satz, der sagt, wonach sie sucht. Sag außerdem voraus, wie viele Zeilen etwa herauskommen – wenige, etwa die Hälfte oder fast alle.
-- a)
SELECT vorname, nachname FROM person WHERE nachname LIKE '%er';
-- b)
SELECT DISTINCT herkunftsland FROM band ORDER BY herkunftsland;
-- c)
SELECT kategorie, preis, ROUND(preis * 0.9, 2) AS ermaessigt
FROM ticket
WHERE preis BETWEEN 50 AND 200;
-- d)
SELECT name FROM band WHERE LENGTH(name) > 12 ORDER BY name;
Prüfe deine Vorhersagen danach im Übungsbereich.