Drei oder mehr Tabellen verknüpfen
JOINs verketten und über Zwischenmengen von Ergebnissen nachdenken
Drei oder mehr Tabellen verknüpfen ist eine kostenlose Coding Interview Prep-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Coding Interview Prep-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Coding Interview Prep-Kurs umfasst insgesamt 4 Lektionen.
JOINs bilden eine Kette, keine Verzweigung
Reale Interviewaufgaben beschränken sich selten auf zwei Tabellen. Sie werden JOINs über drei, vier oder mehr Tabellen schreiben müssen. Die zentrale Erkenntnis, die das Chaos überschaubar macht: Ein JOIN über mehrere Tabellen ist einfach eine Abfolge von JOINs über jeweils zwei Tabellen.
Die Datenbank verknüpft zunächst die ersten beiden Tabellen zu einem Zwischenergebnis und verknüpft dieses anschließend mit der dritten Tabelle und so weiter. Wenn Sie einen JOIN nachvollziehen können, können Sie auch eine Kette solcher JOINs nachvollziehen.
Das Schema mit drei Tabellen
Wir erweitern unser Beispiel um eine dritte Tabelle. Nun haben wir Kunden, ihre Bestellungen und die Produkte, auf die die einzelnen Bestellungen verweisen.
customers(id, name)orders(id, customer_id, product_id, amount)products(id, title)
Zwei Beziehungen verknüpfen sie: orders.customer_id = customers.id und orders.product_id = products.id.
customers(id, name)
orders(id, customer_id, product_id, amount)
products(id, title)Die einfache Abfrage mit drei Tabellen
Fügen Sie die JOINs nacheinander hinzu. Jeder JOIN ... ON fügt eine Tabelle hinzu und legt fest, wie sie mit dem bisherigen Ergebnis verbunden wird.
Lesen Sie die Abfrage von oben nach unten: Beginnen Sie mit orders, fügen Sie den passenden Kunden hinzu und danach das passende Produkt. Jede Bestellzeile erhält dadurch einen Namen und einen Produkttitel.
SELECT c.name, p.title, o.amount
FROM orders o
JOIN customers c ON c.id = o.customer_id
JOIN products p ON p.id = o.product_id;In Zwischenergebnismengen denken
Das mentale Modell, das JOINs über mehrere Tabellen einfach macht: Stellen Sie sich nach jedem JOIN die bisher entstandene Zwischenergebnismenge vor.
- Nach JOIN 1: Spalten aus orders und customers.
- Nach JOIN 2: dieses Ergebnis plus die Spalten aus products.
Die nächste ON-Klausel kann auf jede bereits in der Zwischenergebnismenge vorhandene Spalte verweisen. Deshalb beeinflusst die Reihenfolge der JOINs, was Sie in jeder ON-Klausel schreiben können.
Jede ON-Klausel sieht frühere Tabellen
Eine wichtige Konsequenz: Die ON-Klausel eines späteren JOINs darf auf jede Tabelle verweisen, die zuvor per JOIN eingebunden wurde, nicht nur auf die gerade hinzugefügte Tabelle.
Hier verknüpft der dritte JOIN die neue Tabelle mit o (orders), das bereits im Gültigkeitsbereich liegt. Sie könnten auch eine vierte Tabelle mit c oder p verknüpfen, da beide bereits Teil des laufenden Ergebnisses sind.
SELECT c.name, p.title, w.region
FROM orders o
JOIN customers c ON c.id = o.customer_id
JOIN products p ON p.id = o.product_id
JOIN warehouses w ON w.id = o.warehouse_id; -- refers to oMit der zentralen Tabelle beginnen
Ein praktischer Tipp für Vorstellungsgespräche: Beginnen Sie in FROM mit der Faktentabelle / zentralen Tabelle (meist der Tabelle in der Mitte der Beziehungen) und arbeiten Sie sich dann nach außen zu den Lookup-Tabellen vor.
Orders liegt in der Mitte und enthält Fremdschlüssel sowohl auf customers als auch auf products. Wenn Sie dort beginnen, bleiben alle ON-Klauseln einfach und verweisen jeweils auf bereits bekannte Tabellen.
-- orders is central: it links to both sides
FROM orders o
JOIN customers c ON c.id = o.customer_id
JOIN products p ON p.id = o.product_idFan-out vervielfacht sich über Ketten
Alles, was Sie über Fan-out gelernt haben, gilt weiterhin und kumuliert. Wenn jede Bestellung viele Positionen und jede Position viele Steuerzeilen hat, vervielfacht sich die Zeilenanzahl bei jedem Schritt.
Wenn ein Aggregat in einer Abfrage mit mehreren JOINs zu groß ausfällt, vermuten Sie einen Fan-out, der durch einen der mittleren JOINs eingeführt wurde, und prüfen Sie die Granularität jedes JOINs einzeln.
-- rows = orders * items_per_order * tax_rows_per_item
SELECT o.id
FROM orders o
JOIN order_items i ON i.order_id = o.id
JOIN item_taxes t ON t.item_id = i.id;JOIN-Typen in einer Kette mischen
Sie können INNER- und LEFT-JOINs in einer Abfrage kombinieren, aber die Reihenfolge ist entscheidend. Sobald ein LEFT JOIN NULL-Werte einführt, kann ein späterer INNER JOIN, der auf diese NULL-Spalten verweist, die erhaltenen Zeilen wieder entfernen.
Wenn ein Kunde hier beispielsweise keine Bestellung hat, behält der LEFT JOIN ihn mit NULL in product_id. Der folgende INNER JOIN auf products entfernt ihn jedoch wieder – ein leicht zu machender Fehler, wenn man unter Druck steht.
SELECT c.name, p.title
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id
JOIN products p ON p.id = o.product_id;
-- the INNER products join can cancel the LEFT JOINBei Outer JOINs bleiben
Damit Kunden ohne Bestellungen durchgehend erhalten bleiben, muss auch der nachgelagerte JOIN ein LEFT JOIN sein. Die NULL-Werte fließen dann sicher bis zum Ende weiter.
Als Faustregel gilt: Sobald Sie einen Outer JOIN verwenden, bleiben Sie für jede Tabelle, die am optionalen Zweig hängt, bei Outer JOINs.
SELECT c.name, p.title
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id
LEFT JOIN products p ON p.id = o.product_id;
-- customers with no orders are now kept (NULL title)Aliase werden bei größeren Abfragen unverzichtbar
Bei vier oder fünf Tabellen haben mehrere möglicherweise Spaltennamen wie id, name oder created_at gemeinsam. Kurze, einheitliche Aliase verhindern Mehrdeutigkeiten und halten die Abfrage lesbar.
Wählen Sie Aliase, die auf die Tabelle hinweisen (c, o, p), und qualifizieren Sie jede Spalte. Interviewer sehen an Ihrer Verwendung von Aliasen, wie Sie SQL für den Produktionseinsatz schreiben.
SELECT c.id AS customer_id,
o.id AS order_id,
p.id AS product_id,
p.title
FROM orders o
JOIN customers c ON c.id = o.customer_id
JOIN products p ON p.id = o.product_id;Verbindungstabellen für Viele-zu-viele-Beziehungen
Wenn zwei Entitäten in einer Viele-zu-viele-Beziehung stehen, liegt eine dritte Junction-Tabelle (Bridge-Tabelle) zwischen ihnen, und Sie verknüpfen sie über diese Tabelle. Studierende und Kurse werden über enrollments miteinander verbunden.
Zu erkennen, dass Sie den Weg über eine Bridge-Tabelle nehmen müssen, ist selbst ein häufiges Signal im Vorstellungsgespräch.
SELECT s.name, c.title
FROM students s
JOIN enrollments e ON e.student_id = s.id
JOIN courses c ON c.id = e.course_id;Kurzer Test
Denken Sie über eine Kette mit gemischten JOINs nach.
Zusammenfassung: Drei oder mehr Tabellen verbinden
Nehmen Sie Folgendes mit ins Vorstellungsgespräch:
- Ein JOIN über mehrere Tabellen ist eine Kette aus Zwei-Tabellen-JOINs; betrachten Sie nach jedem Schritt das Zwischenergebnis.
- Eine spätere ON-Klausel kann auf jede frühere Tabelle in der Kette verweisen.
- Beginnen Sie mit der zentralen Tabelle und arbeiten Sie sich zu den Lookup-Tabellen vor.
- Fan-out verstärkt sich über JOINs hinweg; prüfen Sie die Granularität bei jedem Schritt.
- Ein INNER JOIN nach einem LEFT JOIN kann ihn aufheben; bleiben Sie bei Outer JOINs, damit optionale Zeilen erhalten bleiben.
- Viele-zu-viele-Beziehungen werden über eine Bridge-Tabelle verknüpft.
Häufig gestellte Fragen
Ist die Lektion „Drei oder mehr Tabellen verknüpfen“ kostenlos?
Ja — der vollständige Text von „Drei oder mehr Tabellen verknüpfen“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Coding Interview Prep-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Coding Interview Prep-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Drei oder mehr Tabellen verknüpfen“?
JOINs verketten und über Zwischenmengen von Ergebnissen nachdenken Du übst Coding Interview Prep mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Coding Interview Prep zu starten?
Keine Vorkenntnisse erforderlich. Coding Interview Prep auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.
Wie lange dauert die Lektion „Drei oder mehr Tabellen verknüpfen“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Coding Interview Prep-Lektion Code schreiben und ausführen?
Ja. Jede Coding Interview Prep-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Wie INNER JOIN Zeilen zusammenführt
- ON oder WHERE bei JOINs
- JOIN-Fan-out und Zeilenvervielfachung
- Drei oder mehr Tabellen verknüpfen