SQL-Aufgaben
Dies ist eine Sammlung von SQL-Aufgaben zur Beispieldatenbank Schule.
Die Aufgaben sind nach technischen Gesichtspunkten und Schwierigkeitsgrad gegliedert.
Erläuterungen zu SQL am Beispiel der Datenbank "Schule" finden sich im Artikel SQL.
Testen kann man SQL-Abfragen auf der Datenbank Schule hier. Die Zugangsdaten werden im Informatikunterricht mitgeteilt.
Beispieldatenbank Schule
- An der Beispieldatenbank Schule können alle möglichen Datenbankabfragen durchprobiert werden.
- Die Beispieldatenbank ist mit Absicht sehr schmal gehalten, damit man die Ergebnisse von SQL-Abfragen noch überprüfen kann.
- Testen kann man SQL-Abfragen auf der Datenbank Schule hier. Die Zugangsdaten gibt's bei Herrn Kaibel
Eine Tabelle
Die folgenden Aufgaben beziehen sich auf nur eine Tabelle.
SELECT, FROM, WHERE, ORDER BY, DISTINCT
Die folgenden Abfragen benutzen die Befehle SELECT, FROM, WHERE und ggf. ORDER BY.
- Eine Liste aller Schüler mit Name und Vorname, alphabetisch sortiert nach dem Namen.
- Eine Liste der Räume: Raumnummer und Anzahl der Plätze, sortiert nach der Anzahl der Plätze und zwar so, dass die großen Räume zuerst kommen.
- Eine Liste der Etagen in dem Gebäude; jede Etage soll in der Liste nur einmal erscheinen.
Aggregatfunktionen: COUNT, SUM, AVG, MAX, MIN
- Wieviele Schüler gibt es insgesamt?
- Wieviele Stunden Unterricht werden insgesamt erteilt?
- Wieviele Stunden Sport werden erteilt?
- Wieviele Plätze hat der größte Raum?
- Wieviele Plätze haben die Räume in der oberen Etage durchschnittlich?
GROUP BY, AS
Die folgenden Abfragen benutzen zusätzlich die Befehle GROUP BY und AS.
- Eine Liste der Etagen, in der vermerkt ist, wieviele Räume es jeweils in der Etage gibt.
- Eine Liste der Etagen, in der vermerkt ist, wiviele Plätze es jeweils in der Etage gibt.
- Eine Liste aller Unterrichtsfächer, in der steht, wieviele Stunden sie jeweils unterrichtet werden; die Unterrichtsfächer mit vielen Stunden sollen oben stehen.
Mehrere Tabellen
Die folgenden Abfragen beziehen sich auf mehrere Tabellen. Dafür braucht man folgende Technik: Abfrage über mehrere verknüpfte Tabellen
SELECT, FROM, WHERE
Hier werden nur die Befehle SELECT, FROM und WHERE benutzt.
- Eine Liste der Schüler, aus der hervorgeht, in welcher Klasse sie jeweils sind.
- Eine Liste der Klassen, jeweils mit Klassenlehrer.
- Eine Liste der Unterrichtsfächer der Klasse 8B.
- Eine Liste der Räume, in denen die 8B Unterricht hat.
- Eine Liste der Schüler, die Unterricht in Raum R112 Unterricht haben.
ORDER BY, GROUP BY, COUNT, SUM, AVG, MAX, MIN, AS
- Eine Liste der Klassen mit der Anzahl der Schüler; sortiert nach der Anzahl der Schüler.
- Eine Liste der Klassen, aus der hervorgeht, wieviele Stunden Unterricht die jeweilige Klasse hat. Die Liste soll nach der Anzahl der Stunden sortiert sein.
- Die Klasse, die am meisten Unterricht hat; mit der Anzahl der Unterrichtsstunden. Man addiert für jede Klasse die Unterrichtsstunden, sortiert dann nach der Stundenzahl absteigend, und führt dann LIMIT 1 aus, um nur die erste Zeile zu bekommen.
- Eine Liste der Räume, aus der hervorgeht, wie viele Stunden Unterricht in jedem Raum erteilt wird.
UNION
- Eine Liste, in der Vor- und Nachnamen von Lehrern und Schülern auftauchen.
- Disziplinarkonferenz für Schüler Schmidt: Eingeladen werden seine Fachlehrer und alle Klassenlehrer.
- "Die Sportler: " Eine Liste, in der alle Schüler und Lehrer vermerkt werden, die mit Sport etwas zu tun haben.
IN, NOT IN
- Welche Klassen haben keinen Sportunterricht?
- In welchen Räumen findet nie Sport statt?
- Welche Schüler sind Klassenkameraden von Anne Ebert?
- Welche Lehrer sind Fachkollegen von Georg Buttenmüller? (Es reicht, dass sie ein gemeinsames Fach haben.)
LEFT JOIN, RIGHT JOIN
Jetzt sollen bei der Abfrage über mehrere Tabellen auch die Datensätze berücksichtigt werden, die keine Entsprechung in der anderen Tabelle haben, wie z.B. der Schüler Wiesenhoff, der in keiner Klasse ist. Dafür braucht man folgende Technik: Left Join / Right Join
- Eine Liste ALLER Schüler, aus der hervorgeht, in welcher Klasse sie jeweils sind. Auch Schüler ohne Klasse (z.B. Wiesenhoff) sollen aufgeführt werden.
- Eine Liste ALLER Klassen, jeweils mit Klassenlehrer.
LEFT JOIN, RIGHT JOIN und UNION
Manchmal braucht man für jeden Eintrag in der Liste eine Zahl, auch wenn die Entsprechung in einer Tabelle fehlt.
Dann muss man zwei SQL-Abfragen mit UNION kombinieren:
- eine Abfrage über mehrere Tabellen
- einen LEFT JOIN für die Datensätze, denen die Entsprechung fehlt.
- Eine Liste ALLER Schüler, in der steht, wieviel Unterricht sie haben. Für die Schüler Zimmermann und Wiesenhoff soll in dieser Übersicht als Stundenzahl '0' erscheinen.
- Eine Liste aller Räume, in der steht, wie viele verschiedene Klassen dort Unterricht haben. Bei Räumen, in denen kein Unterricht stattfindet, soll eine 0 stehen.
IS NULL
Hier sollen die "Drückeberger" gesucht werden, d.h. man ist nur an Datensätzen interessiert, die keine Entsprechung in der anderen Tabelle haben.
- Eine Liste der Schüler, die keine Klasse haben.
- Eine Liste der Lehrer, die nicht unterrichten.
- Eine Liste der Räume, in denen kein Unterricht stattfindet.
Abfragen mit mehreren Variablen für eine Tabelle
- Welche Schüler sind in der Klasse von Anne Ebert?
- Welche Fachlehrer unterrichten in der Klasse von Lehrer Buttenmüller?
SQL-Abfragen über selbstdefinierte Tabellen
Für die folgenden Fragen braucht man SQL-Abfragen über selbstdefinierte Tabellen.
- Eine Liste aller Klassen, in der angezeigt wird, wieviel Prozent Sport sie haben.
- Eine Liste aller Schüler, in der für jeden Schüler die Anzahl der AGs und die Anzahl der Schulstunden vermerkt ist. (Innere Tabellen: 1. Liste Schüler + Anzahl AGs; 2. Liste Schüler + Summe Unterrichtsstunden)
- Eine Liste der Fächer, in der die Anzahl der Unterrichtsstunden und der Prozentsatz am gesamt erteilten Unterricht aufgeführt ist. (Innere Tabelle: die Summe der Unterrichtsstunden)
- Wieviele Stunden Unterricht haben die Klassen durchschnittlich?
- Die "Streber-Klassen": Welche Klassen haben überdurchschnittlich viele Stunden Unterricht?
- Das Fach, das am meisten unterrichtet wird, mit Anzahl der Stunden.
Zur Kontrolle: Sport. - Eine Liste aller Schüler, in der für jeden Schüler vermerkt ist, wie viele Stunden er weniger hat als der Schüler mit der maximalen Stundenanzahl.
Zur Kontrolle: Die meisten Stunden hat Schwarzmüller mit 13 Stunden
Weitere schwierige Abfragen
Für die folgenden Fragen muss man geeignete SQL-Sprachelemente kombinieren.
- Raum R112 sieht immer furchtbar aus. Der Direktor möchte deswegen mit den Klassenlehrern von allen Klassen sprechen, die in R112 Unterricht haben.
- Wieviel Prozent der insgesamt erteilten Unterrichtsstunden sind Sportstunden?
- Welcher Lehrer unterrichtet am meisten? (Mit Angabe der Stundenzahl.)
- Der Direktor hätte gerne eine Liste der Lehrer, in der aufgeführt wird, wie viele Unterrichtsstunden sie erteilen. Auch die "Drückeberger" sollen in der Liste aufgeführt werden (mit 0 Stunden).
- Eine Liste der Etagen mit den durchschnittlichen Raumgrößen. Die Liste soll nach den Durchschnittswerten sortiert werden.
- Eine Liste der Schüler, die nie in Raum R112 Unterricht haben.
- Eine Liste aller Schüler und Lehrer, die in Raum R112 Unterricht haben / unterrichten.
- In welchem Raum finden die meisten Unterrichtsstunden statt?
- In welchen Räumen finden weniger Unterrichtsstunden statt als in Raum R112? Die Liste soll auch die Räume einschließen, in denen kein Unterricht stattfindet.