XP0
SQL — MODUL 03 · JOIN
Klasse 9 · Informatik · Datenbanken

MODUL 03 — JOIN

Bisher haben wir immer nur eine Tabelle abgefragt. Aber die Stärke einer Datenbank liegt darin, dass Informationen über Fremdschlüssel verknüpft sind.

Mit JOIN verbinden wir mehrere Tabellen zu einer gemeinsamen Ergebnistabelle — zum Beispiel: Wer hat welches Buch ausgeliehen?

Dieselbe Datenbank wie in Modul 01 und 02: Schueler · Buch · Ausleihe

WIE HÄNGEN DIE TABELLEN ZUSAMMEN?

Die Tabelle Ausleihe ist die Verbindungsstelle. Sie enthält keine Namen oder Titel — nur IDs, die auf die anderen Tabellen verweisen.

SCHUELER
SchuelerID
Name
Klasse
Geburtsdatum
AUSLEIHE
AusleiheID
SchuelerID
BuchID
DatumAusleihe
DatumRueckgabe
BUCH
BuchID
Titel
Autor
Genre
Preis

Rot = Fremdschlüssel in Ausleihe  ·  Blau = Primärschlüssel in Schueler/Buch

J · INNER JOIN — ZWEI TABELLEN200 XP

INNER JOIN — GRUNDPRINZIP

INNER JOIN verbindet zwei Tabellen über eine gemeinsame Spalte. Nur Zeilen, bei denen der Schlüssel auf beiden Seiten existiert, erscheinen im Ergebnis.

SELECT spalten FROM tabelle1 INNER JOIN tabelle2 ON tabelle1.schluessel = tabelle2.schluessel;

Bei mehrdeutigen Spaltennamen (z.B. SchuelerID kommt in beiden Tabellen vor) muss der Tabellenname vorangestellt werden: Schueler.SchuelerID

BEISPIEL — ALLE SPALTEN 0 XP

Schüler und ihre Ausleihen verknüpft — alle Spalten beider Tabellen:

AUFGABE I1 +10 XP

Verknüpfe Buch und Ausleihe über BuchID. Zeige alle Spalten.

BESTIMMTE SPALTEN

SPALTEN AUSWÄHLEN BEIM JOIN

Statt * wählt man gezielt Spalten — mit Tabellenpräfix wenn nötig:

SELECT Schueler.Name, Ausleihe.DatumAusleihe FROM Schueler INNER JOIN Ausleihe ON Schueler.SchuelerID = Ausleihe.SchuelerID;

Spalten, die nur in einer Tabelle vorkommen (z.B. Name, Titel), brauchen keinen Präfix — aber es schadet nicht, ihn trotzdem zu schreiben.

BEISPIEL — SPALTEN WÄHLEN 0 XP

Name des Schülers und Ausleihdatum — nur diese zwei Spalten:

AUFGABE I2 +15 XP

Zeige Titel des Buches und DatumAusleihe für alle Ausleihen. Verknüpfe Buch und Ausleihe.

JOIN + WHERE

JOIN + WHERE — FILTERN NACH DEM VERKNÜPFEN

WHERE kommt nach dem JOIN — erst werden die Tabellen verknüpft, dann wird gefiltert. Spalten aus beiden Tabellen können im Filter verwendet werden.

SELECT Schueler.Name, Ausleihe.DatumAusleihe FROM Schueler INNER JOIN Ausleihe ON Schueler.SchuelerID = Ausleihe.SchuelerID WHERE Schueler.Klasse = '9a';
BEISPIEL — JOIN + WHERE 0 XP

Alle Ausleihen der Klasse 9a — Name und Datum:

AUFGABE I3 — JOIN + WHERE +15 XP

Zeige Titel und Genre aller Bücher, die noch nicht zurückgegeben wurden (DatumRueckgabe IS NULL).

AUFGABE I4 — JOIN + DATUM +20 XP

Zeige Name des Schülers, Klasse und DatumAusleihe für alle Ausleihen im November 2024. Sortiere nach Name.

AUFGABE I5 — KOMBINIERT +20 XP

Zeige Name und Klasse aller Schüler aus Klasse 9b oder 9c, die ein Buch ausgeliehen haben, das noch nicht zurückgegeben wurde. Jeden Schüler nur einmal anzeigen (DISTINCT).

J · INNER JOIN — DREI TABELLEN175 XP

DREI TABELLEN VERKNÜPFEN

Man kann mehrere INNER JOINs hintereinander schreiben. Jeder neue JOIN hängt eine weitere Tabelle an:

SELECT spalten FROM Schueler INNER JOIN Ausleihe ON Schueler.SchuelerID = Ausleihe.SchuelerID INNER JOIN Buch ON Ausleihe.BuchID = Buch.BuchID;

Damit hat man alle Informationen in einer Ergebnistabelle: den Schülernamen, das Ausleihdatum und den Buchtitel — ohne eine ID nachschlagen zu müssen.

WIE DER JOIN AUFGEBAUT WIRD

Schueler INNER JOIN Ausleihe ON SchuelerID = SchuelerID
INNER JOIN Buch ON BuchID = BuchID
BEISPIEL — VOLLSTÄNDIGE LISTE 0 XP

Wer hat was wann ausgeliehen — alle drei Tabellen:

AUFGABE J1 +15 XP

Zeige Name, Klasse, Buchtitel und Genre für alle Ausleihen. Alle drei Tabellen verknüpfen.

DREI TABELLEN + WHERE
BEISPIEL — MIT FILTER 0 XP

Welche Schüler aus 9a haben Krimis ausgeliehen?

AUFGABE J2 — MIT FILTER +20 XP

Zeige Name, Buchtitel und DatumAusleihe für alle Ausleihen von Fantasy-Büchern. Sortiere nach Name.

AUFGABE J3 — DATUM + FILTER +20 XP

Zeige Name, Klasse, Titel und DatumAusleihe für alle Ausleihen im 4. Quartal 2024 (Oktober–Dezember), sortiert nach Datum.

AUFGABE J4 — ALLES ZUSAMMEN +25 XP

Zeige Name, Titel und Preis für alle Ausleihen, die noch nicht zurückgegeben wurden und bei denen der Buchwert über 12 Euro liegt. Sortiere nach Preis absteigend.

AUFGABE J5 — MEISTERAUFGABE +30 XP

Zeige Name, Klasse, Titel, Genre und DatumAusleihe für alle Schüler aus Klasse 9a, 9b oder 9c, die ein Buch der Genres Roman oder Fantasy ausgeliehen haben. Nur Ausleihen ab 2024-10-01. Sortiere nach Klasse, dann Name.

L · ALIASE — TABELLEN UMBENENNENBONUS

AS — KÜRZERE NAMEN FÜR TABELLEN

Bei langen Abfragen mit mehreren Tabellen wird Schueler.Name, Ausleihe.DatumAusleihe usw. schnell unübersichtlich. Mit AS gibt man einer Tabelle einen kurzen Spitznamen — den Alias.

-- ohne Alias (lang): SELECT Schueler.Name, Ausleihe.DatumAusleihe FROM Schueler INNER JOIN Ausleihe ON Schueler.SchuelerID = Ausleihe.SchuelerID; -- mit Alias (kurz): SELECT s.Name, a.DatumAusleihe FROM Schueler AS s INNER JOIN Ausleihe AS a ON s.SchuelerID = a.SchuelerID; -- AS kann weggelassen werden: FROM Schueler s INNER JOIN Ausleihe a ON s.SchuelerID = a.SchuelerID;

Der Alias gilt nur innerhalb dieser einen Abfrage. Gebräuchlich sind einzelne Buchstaben: s für Schueler, a für Ausleihe, b für Buch.

BEISPIEL — DREI TABELLEN MIT ALIAS 0 XP

Die Meisteraufgabe K5 — jetzt kompakt mit Aliasen:

Das Ergebnis ist identisch mit K5 — nur der Code ist kürzer und lesbarer.

AUFGABE L1 — BONUS +20 XP

Schreibe die folgende Abfrage mit Aliasen um (s, a, b):
Name, Titel und Preis aller noch nicht zurückgegebenen Ausleihen, bei denen der Preis über 12 Euro liegt, absteigend nach Preis.

ERGEBNIS MODUL 03

Du hast alle Aufgaben der Blöcke J, K und L bearbeitet. Hier ist dein Ergebnis:

0 von 395 XP

ERGEBNIS

Klasse 9 abgeschlossen · In Klasse 12 folgen: LEFT JOIN · GROUP BY · Subqueries · Normalisierung