Datenbanken speichern Infos oft über mehrere Tabellen verteilt. Lerne, wie du sie mit Joins wieder richtig zusammensetzt!
Modul 1: Inner Join & WHERE
Der Klassiker! Lerne, wie du Daten verknüpfst, die exakt zueinander passen. Inklusive dem Trick, wie sich ein Join über die WHERE-Klausel lösen lässt.
Modul 2: Left & Right Join
Was passiert, wenn auf der anderen Seite Daten fehlen? Lerne Outer Joins kennen, um auch Datensätze ohne Gegenstück zu finden.
Modul 3: Prüfungssimulation
Verknüpfe Tabellen unter Realbedingungen! 10 zufällige Aufgaben aus dem IT-Support-Alltag warten auf dich.
Warum überhaupt Joins?
In guten (relationalen) Datenbanken werden Daten nicht alle in eine riesige Tabelle gestopft. Stattdessen teilt man sie in Themengebiete auf, um Dopplungen zu vermeiden. So existieren Kunden und ihre Verträge in getrennten Tabellen.
Unsere Übungsdatenbank
Wir arbeiten mit den Tabellen KUNDEN und VERTRAEGE. Sie sind über die Spalte KundenID miteinander verbunden (Primary Key & Foreign Key).
Tabelle: KUNDEN
KundenID
Firmenname
Ort
1
TechCorp
Berlin
2
WebSolutions
Hamburg
3
CloudNet
München
Tabelle: VERTRAEGE
VertragsID
KundenID
Tarif
101
1
Premium
102
1
Cloud Storage
103
2
Basic Support
Wichtige Regel für die Übungen: Bitte verwende in den Eingabefeldern immer die vollständigen Tabellennamen (z.B. KUNDEN.KundenID) und keine Abkürzungen/Aliasse (wie k.KundenID).
Der "Implizite" Join (Der WHERE-Trick)
Bevor das Schlüsselwort JOIN offiziell eingeführt wurde (und auch heute noch häufig genutzt wird), hat man Tabellen einfach durch Kommata getrennt im FROM-Teil aufgerufen und in der WHERE-Klausel definiert, wo sie sich überschneiden.
SELECT * FROM Tabelle1, Tabelle2
WHERE Tabelle1.ID = Tabelle2.ID;
Ohne die WHERE-Bedingung würde SQL jeden Kunden mit jedem Vertrag kombinieren (ein sogenanntes "Kreuzprodukt"). Erst das WHERE KUNDEN.KundenID = VERTRAEGE.KundenID sorgt dafür, dass nur zusammengehörige Paare ausgegeben werden. Dies entspricht exakt der Logik eines Inner Joins.
Aufgabe 1: Der Komma-Join
Wähle alle Spalten (*) aus den Tabellen KUNDEN und VERTRAEGE. Verbinde sie über die KundenID mittels der WHERE-Klausel.
Nutze: FROM KUNDEN, VERTRAEGE WHERE KUNDEN.KundenID = ...
Der offizielle Weg: INNER JOIN
Die moderne und übersichtlichere Methode ist der explizite INNER JOIN. Er trennt die Verknüpfungs-Bedingung (die ins ON kommt) sauber von den echten Suchfiltern (die weiterhin ins WHERE kommen).
INNER JOIN: Liefert nur die Schnittmenge. Datensätze, die in BEIDEN Tabellen einen Partner haben. Hat ein Kunde keinen Vertrag, taucht er im Ergebnis nicht auf.
SELECT * FROM Tabelle1
INNER JOIN Tabelle2
ON Tabelle1.ID = Tabelle2.ID;
Aufgabe 2: Der INNER JOIN
Erstelle die gleiche Abfrage wie eben, nutze nun aber den INNER JOIN und ON anstelle des Kommas und der WHERE-Klausel.
Struktur: FROM KUNDEN INNER JOIN VERTRAEGE ON KUNDEN.KundenID = ...
Aufgabe 3: Bestimmte Spalten
Oft brauchen wir nicht alle Spalten. Nutze einen INNER JOIN (Verbindung über KundenID), um dir nur den Firmenname aus KUNDEN und den Tarif aus VERTRAEGE anzeigen zu lassen.
Tipp: Gib im SELECT am besten Tabellenname.Spaltenname an!
Schreibe nach dem SELECT explizit: KUNDEN.Firmenname, VERTRAEGE.Tarif. Der Rest bleibt wie beim normalen INNER JOIN.
Wenn Daten fehlen: Outer Joins
Beim Inner Join fallen alle Kunden heraus, die keinen Vertrag haben. Aber was, wenn das Vertriebsteam eine Liste aller Kunden verlangt – inklusive ihrer Verträge, sofern vorhanden?
Hier kommen die Outer Joins ins Spiel: LEFT JOIN und RIGHT JOIN.
Der LEFT JOIN
LEFT JOIN: Erzwungene Ausgabe der kompletten linken Tabelle. Gibt es in der rechten Tabelle keinen Treffer, wird die Zeile trotzdem angezeigt – die leeren Felder werden mit NULL aufgefüllt.
SELECT * FROM LinkeTabelle
LEFT JOIN RechteTabelle
ON ...
Aufgabe 4: Alle Kunden anzeigen
Wähle alle Spalten (*) und nutze einen LEFT JOIN, um die Tabelle KUNDEN (links) mit VERTRAEGE (rechts) über die KundenID zu verbinden.
Achte darauf, KUNDEN als erste Tabelle (links vom JOIN) und VERTRAEGE als zweite Tabelle (rechts vom JOIN) zu schreiben.
Der RIGHT JOIN
RIGHT JOIN: Erzwungene Ausgabe der kompletten rechten Tabelle. Das Gegenstück zum Left Join. In der Praxis drehen Entwickler oft einfach die Tabellen im Code um und nutzen wieder einen Left Join.
Aufgabe 5: Von rechts nach links
Führe einen RIGHT JOIN aus: Die Tabelle KUNDEN steht links, die Tabelle VERTRAEGE rechts. Verknüpfe wieder über die KundenID und hole alle Spalten (*).
Genau wie Aufgabe 4, tausche nur das Wort LEFT gegen RIGHT aus.
Die Leichen im Keller: IS NULL
Eine der mächtigsten Funktionen von Outer Joins ist das Finden von Datensätzen, die kein Gegenstück haben (z.B. Kunden ohne Verträge, oder bestellte Artikel, die nicht im Lager existieren).
Du machst einen LEFT JOIN und hängst ein WHERE RechteTabelle.ID IS NULL an. Damit filterst du alle Datensätze heraus, bei denen die rechte Seite leer geblieben ist.
Aufgabe 6: Kunden ohne Vertrag
Hole alle Spalten (*) mit einem LEFT JOIN (KUNDEN links, VERTRAEGE rechts). Filtere das Ergebnis anschließend mit einer WHERE-Klausel so, dass nur die Datensätze angezeigt werden, bei denen VERTRAEGE.VertragsID IS NULL ist.
Mache einen normalen LEFT JOIN und hänge ans Ende an: WHERE VERTRAEGE.VertragsID IS NULL