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
Die Tabelle Ausleihe ist die Verbindungsstelle. Sie enthält keine Namen oder Titel — nur IDs, die auf die anderen Tabellen verweisen.
Rot = Fremdschlüssel in Ausleihe · Blau = Primärschlüssel in Schueler/Buch
INNER JOIN verbindet zwei Tabellen über eine gemeinsame Spalte. Nur Zeilen, bei denen der Schlüssel auf beiden Seiten existiert, erscheinen im Ergebnis.
Bei mehrdeutigen Spaltennamen (z.B. SchuelerID kommt in beiden Tabellen vor) muss der Tabellenname vorangestellt werden: Schueler.SchuelerID
Schüler und ihre Ausleihen verknüpft — alle Spalten beider Tabellen:
Verknüpfe Buch und Ausleihe über BuchID. Zeige alle Spalten.
Statt * wählt man gezielt Spalten — mit Tabellenpräfix wenn nötig:
Spalten, die nur in einer Tabelle vorkommen (z.B. Name, Titel), brauchen keinen Präfix — aber es schadet nicht, ihn trotzdem zu schreiben.
Name des Schülers und Ausleihdatum — nur diese zwei Spalten:
Zeige Titel des Buches und DatumAusleihe für alle Ausleihen. Verknüpfe Buch und Ausleihe.
WHERE kommt nach dem JOIN — erst werden die Tabellen verknüpft, dann wird gefiltert. Spalten aus beiden Tabellen können im Filter verwendet werden.
Alle Ausleihen der Klasse 9a — Name und Datum:
Zeige Titel und Genre aller Bücher, die noch nicht zurückgegeben wurden (DatumRueckgabe IS NULL).
Zeige Name des Schülers, Klasse und DatumAusleihe für alle Ausleihen im November 2024. Sortiere nach Name.
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).
Man kann mehrere INNER JOINs hintereinander schreiben. Jeder neue JOIN hängt eine weitere Tabelle an:
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
Wer hat was wann ausgeliehen — alle drei Tabellen:
Zeige Name, Klasse, Buchtitel und Genre für alle Ausleihen. Alle drei Tabellen verknüpfen.
Welche Schüler aus 9a haben Krimis ausgeliehen?
Zeige Name, Buchtitel und DatumAusleihe für alle Ausleihen von Fantasy-Büchern. Sortiere nach Name.
Zeige Name, Klasse, Titel und DatumAusleihe für alle Ausleihen im 4. Quartal 2024 (Oktober–Dezember), sortiert nach Datum.
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.
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.
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.
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.
Die Meisteraufgabe K5 — jetzt kompakt mit Aliasen:
Das Ergebnis ist identisch mit K5 — nur der Code ist kürzer und lesbarer.
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.
Du hast alle Aufgaben der Blöcke J, K und L bearbeitet. Hier ist dein Ergebnis:
Klasse 9 abgeschlossen · In Klasse 12 folgen: LEFT JOIN · GROUP BY · Subqueries · Normalisierung