XP0
SQL — MODUL 05
Jahrgangsstufe 12 · Informatik GK · Datenbanken
MODUL 05 — ERWEITERTE ABFRAGEN

SCHEMA — ERWEITERUNG AUS DER NORMALISIERUNG

In Modul 04 haben wir die Schulbibliothek normalisiert. Dabei entstand eine neue Tabelle: Ausleihposition. Ein Schüler kann jetzt mehrere Bücher auf einmal ausleihen — jedes Buch bekommt eine eigene Zeile in Ausleihposition.

Dieses Modul arbeitet mit diesem vollständigen Schema:

SCHUELER
SchuelerIDINTEGER · PK
NameTEXT
KlasseTEXT
GeburtsdatumDATE
BUCH
BuchIDINTEGER · PK
TitelTEXT
AutorTEXT
GenreTEXT
ErscheinungsjahrINTEGER
PreisREAL · NULL möglich
AUSLEIHE
AusleiheIDINTEGER · PK
SchuelerIDINTEGER · FK
DatumAusleiheDATE
DatumRueckgabeDATE · NULL möglich
AUSLEIHPOSITION
PositionIDINTEGER · PK
AusleiheIDINTEGER · FK
BuchIDINTEGER · FK
DATEN ERKUNDEN
ALLE TABELLEN ANSCHAUEN

Führe die Abfragen aus, um die Daten kennenzulernen:

O · LEFT JOIN100 XP

LEFT JOIN — ALLE ZEILEN DER LINKEN TABELLE

INNER JOIN zeigt nur Zeilen, bei denen auf beiden Seiten ein Treffer existiert. LEFT JOIN zeigt alle Zeilen der linken Tabelle — auch wenn es rechts keinen Treffer gibt. Fehlende Werte erscheinen als NULL.

SELECT spalten FROM linke_tabelle l LEFT JOIN rechte_tabelle r ON l.schluessel = r.schluessel;

Typischer Einsatz: „Zeige alle X — auch die ohne Y."

INNER JOIN vs. LEFT JOIN

Führe beide Abfragen aus und vergleiche die Anzahl der Ergebniszeilen:

VERGLEICH — INNER vs. LEFT 0 XP
IS NULL NACH LEFT JOIN

NULL ALS FILTER — NIE AUSGELIEHEN

Nach einem LEFT JOIN kann man mit WHERE … IS NULL gezielt die Zeilen herausfiltern, für die es keinen Treffer rechts gab:

SELECT b.Titel FROM Buch b LEFT JOIN Ausleihposition ap ON b.BuchID = ap.BuchID WHERE ap.AusleiheID IS NULL;
BEISPIEL — NIE AUSGELIEHENE BÜCHER 0 XP

Welche Bücher wurden noch nie ausgeliehen?

AUFGABE O1 — +10 XP +10 XP

Welche Schüler haben noch nie etwas ausgeliehen? Zeige Name und Klasse.

AUFGABE O2 — +15 XP +15 XP

Zeige alle Bücher mit ihrer AusleiheID — auch Bücher die nie ausgeliehen wurden. Sortiere so dass die nie ausgeliehenen zuerst erscheinen.

VIER TABELLEN
BEISPIEL — VOLLSTÄNDIGE AUSLEIHLISTE 0 XP

Wer hat welches Buch ausgeliehen — alle vier Tabellen mit Aliasen:

AUFGABE O3 — +20 XP +20 XP

Zeige alle Schüler mit Name, Klasse und Buchtitel — auch Schüler die nichts ausgeliehen haben sollen erscheinen (dann steht NULL beim Titel).

P · GROUP BY125 XP

GROUP BY — GRUPPEN BILDEN

In Modul 02 haben wir Aggregatfunktionen ohne GROUP BY genutzt — das Ergebnis war immer eine Zahl für die ganze Tabelle. Mit GROUP BY berechnet man die Aggregatfunktion pro Gruppe.

SELECT spalte, COUNT(*) AS Anzahl FROM tabelle GROUP BY spalte;

Wichtig: Im SELECT dürfen nur Spalten stehen die in GROUP BY genannt sind — oder Aggregatfunktionen.

BEISPIEL — GROUP BY OHNE JOIN 0 XP

Wie viele Bücher gibt es pro Genre?

AUFGABE P1 — +10 XP +10 XP

Welcher Durchschnittspreis gilt pro Genre? Runde nicht — zeige den rohen AVG-Wert.

AUFGABE P2 — +15 XP +15 XP

Wie oft wurde jedes Buch ausgeliehen? Zeige Titel und Anzahl — häufigstes zuerst.

KOMPLEXERE GRUPPEN
BEISPIEL — GROUP BY MIT ZWEI JOINS 0 XP

Wie viele Bücher hat jeder Schüler insgesamt ausgeliehen?

AUFGABE P3 — +20 XP +20 XP

Wie viele Ausleihen hat jede Klasse insgesamt?

AUFGABE P4 — +25 XP +25 XP

Wie viele Bücher hat jeder Schüler insgesamt ausgeliehen — auch Schüler mit 0 Ausleihen sollen erscheinen. Meiste zuerst.

Q · HAVING125 XP

HAVING — GRUPPEN FILTERN

WHERE filtert Zeilen — bevor gruppiert wird.
HAVING filtert Gruppen — nachdem gruppiert wurde.

SELECT spalte, COUNT(*) AS Anzahl FROM tabelle GROUP BY spalte HAVING COUNT(*) > 3;

Faustregel: Wenn die Bedingung eine Aggregatfunktion enthält (COUNT, AVG, …) → HAVING. Sonst → WHERE.

BEISPIEL — HAVING OHNE JOIN 0 XP

Welche Genres haben mehr als 3 Bücher?

AUFGABE Q1 — +10 XP +10 XP

Welche Genres haben einen Durchschnittspreis über 12€? Zeige Genre und Durchschnitt.

AUFGABE Q2 — +15 XP +15 XP

Welche Autoren haben mehr als ein Buch in der Bibliothek?

HAVING MIT JOIN
BEISPIEL — HAVING MIT JOIN 0 XP

Welche Bücher wurden mehr als 2 Mal ausgeliehen?

AUFGABE Q3 — +20 XP +20 XP

Welche Klassen haben mehr als 5 Ausleihen insgesamt?

AUFGABE Q4 — +25 XP +25 XP

Welche Schüler haben mehr als 3 Bücher insgesamt ausgeliehen? Zeige Name und Anzahl, meiste zuerst.

ERGEBNIS MODUL 05

Du hast die Blöcke O (LEFT JOIN), P (GROUP BY) und Q (HAVING) bearbeitet:

0 von 350 XP

O · LEFT JOIN

O10/10
O20/15
O30/20

P · GROUP BY

P10/10
P20/15
P30/20
P40/25

Q · HAVING

Q10/10
Q20/15
Q30/20
Q40/25

ERGEBNIS

Weiter in Modul 06: Subqueries