Kurs
SQL-Joins werden zwar häufig verwendet, um Daten aus zwei Tabellen zu kombinieren, aber das muss nicht so bleiben. Du kannst sogar Daten aus drei oder mehr Tabellen zusammenführen, um noch komplexere Beziehungen und Erkenntnisse aus deinen Daten zu gewinnen .
In diesem Artikel zeige ich dir Beispiele für die Verknüpfung von drei Tabellen in SQL und gehe dabei auch auf datenbankspezifische Implementierungen und Best Practices ein. Außerdem empfehle ich unsere Kurse Einführung in SQL und SQL lernen für alle wichtigen Grundkenntnisse.
Die Schritte zum Verbinden von 3 Tabellen in SQL
Mit der Verknüpfung von drei Tabellen in SQL kannst du komplexe Abfragen durchführen, um Daten über mehrere Tabellen hinweg abzurufen. Wenn wir drei Tabellen verbinden, verwenden wir die JOIN
Klausel, um die Daten aus diesen Tabellen zu kombinieren.
Angenommen, du hast die folgenden drei Tabellen: Customers
, Products
, und Orders
.
Beispiel einer Tabelle "Kunden" in SQL. Bild vom Autor.
Beispiel einer Tabelle "Produkte" in SQL. Bild vom Autor.
Beispiel für eine Tabelle mit Aufträgen in SQL. Bild vom Autor.
Zunächst kannst du die Tabellen Customers
und Orders
miteinander verbinden, um zu sehen, welche Kunden Bestellungen aufgegeben haben und welche Details sie bestellt haben, z.B. order_id
, order_date
und quantity
.
-- Select data from Customers
SELECT
Customers.customer_id,
Customers.first_name,
Customers.last_name,
Orders.order_id,
Orders.order_date,
Orders.quantity
FROM Customers
-- Join Orders table
INNER JOIN Orders
ON Customers.customer_id = Orders.customer_id;
Beispiel für einen SQL JOIN zwischen den Tabellen "Kunden" und "Aufträge". Bild vom Autor.
Schließlich kannst du die drei Tabellen Customers
, Orders
und Products
kombinieren, um eine umfassende Übersicht über die Kunden, ihre Bestellungen, die gekauften Produkte und die Gesamtkosten für jede Bestellung zu erhalten.
-- Select data starting with Customers
SELECT
Customers.customer_id,
Customers.first_name,
Customers.last_name,
Orders.order_id,
Orders.order_date,
Products.product_name,
Orders.quantity,
Products.price,
(Orders.quantity * Products.price) AS total_cost -- Total cost calculation
FROM Customers
-- Join the Orders table based on customer_id
INNER JOIN Orders
ON Customers.customer_id = Orders.customer_id
-- Join the Products table based on product_id
INNER JOIN Products
ON Orders.product_id = Products.product_id;
Beispiel für SQL JOIN drei Tabellen. Bild vom Autor.
Schauen wir uns die praktischen Beispiele für die Verwendung von INNER JOIN
, LEFT JOIN
und RIGHT JOIN
an, um drei Tabellen zu verbinden. In unserem Tutorial Einführung in SQL Joins erfährst du mehr über die verschiedenen Arten und Beispiele von Joins.
Beispiele für das Verbinden von 3 Tabellen in SQL
Sehen wir uns nun einige praktische Beispiele an, indem wir INNER JOIN
, LEFT JOIN
und RIGHT JOIN
verwenden, um drei Tabellen zu verbinden.
Wenn du mit der Bedeutung dieser Joins nicht weiterkommst und weiter üben willst , damit du die richtigen Techniken beherrschst, melde dich zu unserem Kurs Joining Data in SQL an, der dir nicht nur bei SQL-Joins hilft, sondern dir auch die Theorie der relationalen Mengen und Unterabfragen vermittelt.
INNER JOIN verwenden
Eine INNER JOIN
ruft Datensätze mit übereinstimmenden Werten in allen drei Tabellen ab und filtert alle Datensätze heraus, die nicht übereinstimmen. INNER JOIN
ist ideal, wenn du nur Ergebnisse brauchst, die direkte Beziehungen in allen beteiligten Tabellen haben.
Angenommen, du hast drei Tabellen: Customers
, Orders
, und Products
. Die folgende Abfrage ruft nur die Kunden ab, die Bestellungen aufgegeben haben, und enthält Details zu den Produkten, die mit jeder Bestellung verbunden sind.
-- Select customer details, order information, and associated product names
SELECT
Customers.customer_id,
Customers.customer_name,
Orders.order_id,
Products.product_name
-- Select from Customers table
FROM Customers
-- Join Orders table
INNER JOIN Orders
ON Customers.customer_id = Orders.customer_id
-- Join Products table
INNER JOIN Products
ON Orders.product_id = Products.product_id;
LEFT JOIN verwenden
Die LEFT JOIN
gibt alle Datensätze aus der ersten (linken) Tabelle und alle übereinstimmenden Datensätze aus den anderen beiden Tabellen zurück. Wenn es keine Übereinstimmung gibt, werden NULL
Werte für Spalten aus der richtigen Tabelle zurückgegeben. Die LEFT JOIN
ist nützlich, wenn du alle Datensätze aus der Haupttabelle abrufen willst, auch wenn einige Zeilen keine verwandten Daten in den anderen Tabellen haben.
Im folgenden Beispiel werden alle Kunden im Ergebnis angezeigt, auch wenn sie keine Bestellung aufgegeben haben. Die Datenfelder geben NULL
Werte zurück, wenn es keine passenden Bestell- oder Produktdaten gibt.
-- Select customer details, order information, and product names
SELECT
Customers.customer_id,
Customers.customer_name,
Orders.order_id,
Products.product_name
FROM Customers
-- Join Orders table
LEFT JOIN Orders
ON Customers.customer_id = Orders.customer_id
-- Join Products table
LEFT JOIN Products
ON Orders.product_id = Products.product_id;
Übrigens: LEFT JOIN
ist dasselbe wie LEFT OUTER JOIN
in SQL. Wir haben eine Anleitung, in der du Details erfährst: SQL LEFT JOIN vs. LEFT OUTER JOIN.
RIGHT JOIN verwenden
Eine RIGHT JOIN
ruft alle Datensätze aus der dritten (ganz rechten) Tabelle und alle übereinstimmenden Datensätze aus den linken Tabellen ab. Obwohl RIGHT JOIN
weniger verbreitet ist, ist es immer noch hilfreich, wenn du die Datensätze in der Tabelle ganz rechts priorisieren willst.
Bei einer Bestandsanalyse möchtest du zum Beispiel wissen, für welche Produkte es Bestellungen oder Kundeninteraktionen gibt. Alle Produkte werden in der Abfrage unten aufgelistet, einschließlich aller zugehörigen Bestell- oder Kundendaten. Wenn es Produkte gibt, die noch nicht bestellt wurden, wird in den Feldern order_id
und customer_name
NULL
angezeigt.
-- Select customer details, order information, and product names
SELECT
Customers.customer_id,
Customers.customer_name,
Orders.order_id,
Products.product_name
-- Select from Customers table
FROM Customers
-- Join Orders table
RIGHT JOIN Orders
ON Customers.customer_id = Orders.customer_id
-- Join Products table
RIGHT JOIN Products
ON Orders.product_id = Products.product_id;
Die obigen Beispiele zeigen zwar, dass nur ein einziger Join-Typ (INNER JOIN
, LEFT JOIN
oder RIGHT JOIN
) verwendet wird, aber es ist durchaus möglich - und oft auch notwendig -, verschiedene Join-Typen in derselben Abfrage zu kombinieren, um komplexere Datenbeziehungen zu verarbeiten. Du könntest zum Beispiel eine LEFT JOIN
verwenden, um alle Datensätze aus einer Tabelle einzuschließen, während du eine INNER JOIN
für eine andere Beziehung innerhalb derselben Abfrage verwendest.
In diesem Zusammenhang sollten wir auch erwähnen, dass SQL Joins sequentiell von links nach rechts verarbeitet. Die Reihenfolge bestimmt also, wie Tabellen kombiniert werden und wie NULL
Werte behandelt werden. Deshalb habe ich diesen Artikel damit begonnen, den Prozess in zwei Schritten darzustellen. Du solltest deine Abfrage Schritt für Schritt aufbauen und die Ergebnisse schrittweise überprüfen. LEFT JOIN
gefolgt von INNER JOIN
unterscheidet sich oft von INNER JOIN
gefolgt von LEFT JOIN
.
Warum wir 3 Tabellen in SQL verbinden müssen
Nehmen wir uns einen Moment Zeit, um über das Datenbankdesign zu sprechen. Der Grund dafür, dass es heute üblich ist, Joins über mehr als zwei Tabellen zu erstellen, ist die Normalisierung der Datenbanken. Datenbanken (und eigentlich auch die Leute, die Datenbanken entwerfen) tun dies, indem sie Informationen in verschiedenen, miteinander verbundenen Tabellen organisieren. Damit soll Redundanz vermieden werden (und auch aus anderen Gründen). Diese Aufteilung der Datenbank bedeutet, dass Daten, die für verschiedene Entitäten relevant sind - wie die Tabellen Customers
, Orders
und Products
, die wir oben betrachtet haben - getrennt gespeichert werden.
Mit anderen Worten: Weil die Daten so oft in einem normalisierten Datenbankschema gespeichert werden, müssen zum Abrufen von Informationen oft Daten aus mehreren Tabellen kombiniert werden. Aus diesem Grund sollten wir wissen, wie man Abfragen schreibt, die viele Joins enthalten, denn so sind die Daten wahrscheinlich strukturiert. Unser Kurs Datenbankdesign ist eine gute Ressource für diese Ideen.
Datenbankspezifische Join-Funktionen
Während SQL-Joins in den meisten relationalen Datenbanken einheitlich sind, gibt es einige Unterschiede bei der Handhabung von Mehrfach-Joins, die drei oder mehr Tabellen umfassen. Sehen wir uns datenbankspezifische Implementierungen und Überlegungen an, um Fallstricke und Optimierungsprobleme zu vermeiden.
MySQL
MySQL funktioniert in der Regel gut bei einfachen Joins, hat aber Probleme bei komplexen Abfragen, die mehrere Tabellen umfassen. Der Befehl EXPLAIN
von MySQL ist hilfreich, um die Join-Leistung zu verstehen und Möglichkeiten zur Optimierung von Abfragen durch Indexierung oder Query Rewriting zu finden. MySQL unterstützt auch das Schlüsselwort STRAIGHT_JOIN
, das die Join-Reihenfolge erzwingt und so die Abfrageleistung in Fällen verbessern kann, in denen die Standard-Join-Optimierung nicht ideal ist.
PostgreSQL
Der leistungsstarke Optimierer von PostgreSQL sorgt für eine hohe Effizienz bei komplexen Joins, selbst bei großen Datenmengen. Die Unterstützung für rekursive Abfragen mit der WITH RECURSIVE
Klausel ermöglicht die Verknüpfung hierarchischer Daten über mehrere Tabellen hinweg. Die Fensterfunktionen von PostgreSQL sind fortschrittlich und können Joins ergänzen, indem sie eine zeilenweise Analyse innerhalb eines verbundenen Datensatzes ermöglichen.
SQL Server
SQL Server erlaubt bestimmte Join-Hinweise (MERGE JOIN
, LOOP JOIN
und HASH JOIN
), um das Standardverhalten außer Kraft zu setzen und die Leistung von Multi-Tabellen-Joins zu verbessern. Die Operatoren CROSS APPLY
und OUTER APPLY
in SQL Server sind leistungsstarke Werkzeuge zum Verbinden von Tabellen mit tabellenwertigen Funktionen und bieten mehr Flexibilität bei Abfragen mit mehreren Tabellen.
Ich empfehle den Kurs Einführung in SQL Server von DataCamp, um die verschiedenen Funktionen von SQL Server bei der Datenabfrage zu verstehen. Probiere auch unseren Lernpfad zu den SQL Server-Grundlagen aus, um deine Fähigkeiten zum Verbinden von Tabellen und zur Datenanalyse zu verbessern. Der Lernpfad SQL Server Developer vermittelt dir die Fähigkeiten, Abfragen mit SQL Server zu schreiben, Fehler zu beheben und zu optimieren.
Oracle SQL
Oracle unterstützt alle Standard-Joins und bietet einzigartige Optionen wie NATURAL JOIN
, die Tabellen automatisch auf der Grundlage übereinstimmender Spaltennamen zusammenführt. Oracles Unterstützung für hierarchische Abfragen mit CONNECT BY
kann manchmal den Bedarf an zusätzlichen Joins reduzieren, indem verschachtelte Daten effizienter behandelt werden.
Best Practices beim Verbinden von 3 Tabellen in SQL
Das Verbinden von drei Tabellen in SQL kann die Abfragekomplexität erhöhen und die Leistung beeinträchtigen, insbesondere wenn die Datengröße wächst. Im Folgenden findest du Best Practices und Optimierungstechniken zur Verbesserung der Abfrageleistung.
-
Verwende eine geeignete Indexierung: Indexspalten, die häufig in Join-Bedingungen verwendet werden, beschleunigen den Datenabruf, indem sie die Menge der gescannten Daten reduzieren.
-
Frühes Filtern mit WHERE- und JOIN-Bedingungen: Platziere Filterbedingungen direkt in der
JOIN
oderWHERE
Klausel, um die Daten zu reduzieren, die in nachfolgenden Joins verarbeitet werden müssen, und so die Leistung zu verbessern. -
Berücksichtige die Join-Reihenfolge und den Join-Typ: Wenn du mehrere Tabellen verbindest, verbinde zuerst die kleineren Tabellen, um den Datenbestand so schnell wie möglich zu verkleinern. Vermeide die Verwendung von
LEFT
oderRIGHT
Joins, wenn deine Analyse keine nicht übereinstimmenden Datensätze erfordert. -
Minimiere ausgewählte Spalten mit SELECT: Vermeide die Verwendung von
SELECT *
, um unnötige Spalten in die Daten aufzunehmen. Wähle explizit die benötigten Spalten aus, um die von jeder Tabelle zurückgegebenen Daten zu reduzieren, den Speicherverbrauch zu minimieren und die Abfrageleistung zu verbessern. -
Verwende Unterabfragen oder temporäre Tabellen für komplexe Joins: Ziehe in Erwägung, die Abfrage in kleinere Teile aufzuteilen und Unterabfragen für sehr komplexe Joins zu verwenden. Bei Joins, die wiederholte komplexe Abfragen beinhalten, solltest du in Erwägung ziehen, Zwischenergebnisse in temporären Tabellen zu speichern, um Verarbeitungszeit zu sparen, insbesondere bei Abfragen, die umfangreiche Berechnungen erfordern.
Fazit und weiteres Lernen
Mit der Verknüpfung von drei Tabellen in SQL kannst du Daten über mehrere Tabellen hinweg für eine umfassende Datenanalyse und Datenbankverwaltung kombinieren. Die Beherrschung der richtigen Techniken stellt sicher, dass dein Code effizient, skalierbar und leistungsfähig ist.
Wenn du ein kompetenter Datenanalytiker werden willst, schau dir unseren Lernpfad zum Associate Data Analyst in SQL an, um die notwendigen Fähigkeiten zu erlernen. Der Kurs Reporting in SQL ist auch geeignet, wenn du lernen willst, wie man professionelle Dashboards mit SQL erstellt. Schließlich empfehle ich dir, die SQL Associate-Zertifizierung zu erwerben, um zu zeigen, dass du SQL für die Datenanalyse beherrschst und dich in deinem Lebenslauf hervorheben kannst.
FAQs
Welche Arten von Joins können verwendet werden, um drei Tabellen zu verbinden?
Du kannst INNER JOIN
, LEFT JOIN
, RIGHT JOIN
und gelegentlich FULL JOIN
verwenden, um drei Tabellen zu kombinieren.
Spielt die Verknüpfungsreihenfolge beim Verbinden von drei Tabellen eine Rolle?
Die Verknüpfungsreihenfolge kann sich auf die Leistung auswirken, insbesondere bei größeren Tabellen. Wenn du mit kleineren oder stark gefilterten Tabellen beginnst, ist das oft effizienter.
Wie kann ich die Leistung optimieren, wenn ich drei Tabellen in SQL verbinde?
Um die Leistung zu optimieren, solltest du für eine ordnungsgemäße Indizierung der in Joins verwendeten Spalten sorgen, die Anzahl der zurückgegebenen Zeilen mit WHERE
Klauseln begrenzen und nur die notwendigen Spalten auswählen.
Kann ich mehr als drei Tabellen verbinden?
Du kannst mehr als drei Tabellen in SQL verbinden, aber die Abfrage kann komplexer werden und Leistungsoptimierungen erfordern.