SQL INNER JOIN und LEFT JOIN sind häufig verwendete Operationen in Datenbankabfragen. Diese Operationen sind unverzichtbar für die Integration von Daten und die Anpassung von Suchergebnissen. Sie haben jeweils unterschiedliche Eigenschaften und werden in verschiedenen Szenarien verwendet. In diesem Artikel werden die Unterschiede zwischen INNER JOIN und LEFT JOIN im Detail erläutert, und es werden praktische Anwendungsbeispiele sowie geeignete Einsatzmöglichkeiten vorgestellt.
Was ist INNER JOIN?
INNER JOIN ist eine SQL-Operation, die verwendet wird, um zwei oder mehr Tabellen zu verbinden. Diese Operation umfasst nur die Datensätze im Ergebnissatz, die die Join-Bedingung erfüllen. Zum Beispiel, wenn es zwei Tabellen gibt, gibt INNER JOIN nur die Zeilen zurück, die in beiden Tabellen auf Basis eines gemeinsamen Schlüssels übereinstimmen. Dadurch können nur relevante Daten extrahiert werden. INNER JOIN ist sehr nützlich, um die genaue Beziehung zwischen den Tabellen zu klären und unnötige Daten auszuschließen.
Beispiel für INNER JOIN
Im Folgenden wird gezeigt, wie INNER JOIN anhand eines konkreten SQL-Befehls verwendet wird. In diesem Beispiel verwenden wir eine customers
-Tabelle, die Kundeninformationen enthält, und eine orders
-Tabelle, die Bestellinformationen verwaltet.
Beispiel: Verknüpfung von Kunden und Bestellungen
Der folgende SQL-Befehl verknüpft Kunden mit ihren Bestellinformationen. Der gemeinsame Schlüssel ist die Kunden-ID (customer_id
).
SELECT
customers.customer_id,
customers.customer_name,
orders.order_id,
orders.order_date
FROM
customers
INNER JOIN
orders
ON
customers.customer_id = orders.customer_id;
Diese Abfrage verknüpft die customers
-Tabelle mit der orders
-Tabelle, wobei nur Datensätze zurückgegeben werden, bei denen die customer_id
übereinstimmt. Das Ergebnis umfasst die Kunden-ID, den Kundennamen, die Bestell-ID und das Bestelldatum. Mit INNER JOIN werden Kunden ohne Bestellungen und Bestellungen ohne zugehörige Kunden nicht im Ergebnissatz berücksichtigt.
Was ist LEFT JOIN?
LEFT JOIN ist eine SQL-Operation, die verwendet wird, um zwei oder mehr Tabellen zu verbinden, wobei alle Datensätze aus der linken Tabelle im Ergebnissatz enthalten sind, und die passenden Datensätze aus der rechten Tabelle hinzugefügt werden. Wenn keine passenden Datensätze in der rechten Tabelle gefunden werden, wird NULL zurückgegeben. LEFT JOIN wird hauptsächlich verwendet, um alle Daten aus der linken Tabelle zu behalten und zusätzliche Informationen aus der rechten Tabelle aufzunehmen.
Beispiel für LEFT JOIN
Im Folgenden wird gezeigt, wie LEFT JOIN anhand eines konkreten SQL-Befehls verwendet wird. Auch hier verwenden wir eine customers
-Tabelle, die Kundeninformationen enthält, und eine orders
-Tabelle, die Bestellinformationen verwaltet.
Beispiel: Verknüpfung von Kunden und Bestellungen
Der folgende SQL-Befehl verknüpft alle Kunden mit ihren Bestellinformationen. Der gemeinsame Schlüssel ist die Kunden-ID (customer_id
).
SELECT
customers.customer_id,
customers.customer_name,
orders.order_id,
orders.order_date
FROM
customers
LEFT JOIN
orders
ON
customers.customer_id = orders.customer_id;
Diese Abfrage verknüpft alle Datensätze aus der customers
-Tabelle mit denen aus der orders
-Tabelle, wobei die customer_id
übereinstimmt. Das Ergebnis enthält die Kunden-ID, den Kundennamen, die Bestell-ID und das Bestelldatum. Mit LEFT JOIN werden auch Kunden, die keine Bestellungen haben, im Ergebnissatz berücksichtigt, wobei in solchen Fällen NULL für die Bestellinformationen zurückgegeben wird.
Unterschiede zwischen INNER JOIN und LEFT JOIN
Um die Unterschiede zwischen INNER JOIN und LEFT JOIN besser zu verstehen, werden wir das Verhalten der beiden Operationen anhand von Diagrammen erklären.
Das Verhalten von INNER JOIN
INNER JOIN gibt nur die Datensätze zurück, die in beiden Tabellen vorhanden sind. Wenn zum Beispiel die customers
-Tabelle mit der orders
-Tabelle verknüpft wird, werden nur die Datensätze, die eine gemeinsame customer_id
haben, im Ergebnissatz berücksichtigt.
customers Tabelle:
+-------------+----------------+
| customer_id | customer_name |
+-------------+----------------+
| 1 | Alice |
| 2 | Bob |
| 3 | Charlie |
+-------------+----------------+
orders Tabelle:
+-------------+----------+------------+
| order_id | customer_id | order_date |
+-------------+----------+------------+
| 101 | 1 | 2023-01-10 |
| 102 | 3 | 2023-01-15 |
+-------------+----------+------------+
INNER JOIN Ergebnis:
+-------------+----------------+----------+------------+
| customer_id | customer_name | order_id | order_date |
+-------------+----------------+----------+------------+
| 1 | Alice | 101 | 2023-01-10 |
| 3 | Charlie | 102 | 2023-01-15 |
+-------------+----------------+----------+------------+
Das Verhalten von LEFT JOIN
LEFT JOIN gibt alle Datensätze aus der linken Tabelle zurück und fügt, wenn vorhanden, die passenden Datensätze aus der rechten Tabelle hinzu. Wenn es keine übereinstimmenden Datensätze in der rechten Tabelle gibt, wird für diese NULL zurückgegeben.
LEFT JOIN Ergebnis:
+-------------+----------------+----------+------------+
| customer_id | customer_name | order_id | order_date |
+-------------+----------------+----------+------------+
| 1 | Alice | 101 | 2023-01-10 |
| 2 | Bob | NULL | NULL |
| 3 | Charlie | 102 | 2023-01-15 |
+-------------+----------------+----------+------------+
Wie man sieht, gibt INNER JOIN nur die gemeinsamen Datensätze beider Tabellen zurück, während LEFT JOIN alle Datensätze der linken Tabelle ausgibt und NULL zurückgibt, wenn keine Übereinstimmung in der rechten Tabelle gefunden wird.
Geeignete Anwendungsfälle für INNER JOIN und LEFT JOIN
Die Wahl zwischen INNER JOIN und LEFT JOIN hängt von den benötigten Daten und dem Ziel der Abfrage ab. Im Folgenden werden die geeigneten Anwendungsfälle für jede Join-Operation näher erläutert.
Anwendungsfälle für INNER JOIN
INNER JOIN ist geeignet, wenn nur die gemeinsamen Daten aus beiden Tabellen benötigt werden. Es wird in den folgenden Szenarien verwendet:
Abrufen von passenden Daten zu Kunden und Bestellungen
Wenn man nur Bestellinformationen von Kunden benötigt, die eine Bestellung aufgegeben haben, verwendet man INNER JOIN. Ein Beispiel dafür ist das Abrufen von Kundeninformationen, die ein bestimmtes Produkt gekauft haben.
SELECT
customers.customer_name,
orders.order_id
FROM
customers
INNER JOIN
orders
ON
customers.customer_id = orders.customer_id
WHERE
orders.product_id = 123;
Anwendungsfälle für LEFT JOIN
LEFT JOIN ist geeignet, wenn alle Daten aus der linken Tabelle benötigt werden und zusätzliche Informationen aus der rechten Tabelle eingefügt werden sollen. Es wird in den folgenden Szenarien verwendet:
Überprüfen der Bestellhistorie aller Kunden
Wenn man eine Liste aller Kunden anzeigen und feststellen möchte, ob sie eine Bestellung aufgegeben haben oder nicht, verwendet man LEFT JOIN. Ein Beispiel dafür ist das Abrufen einer Liste aller Kunden und ihrer Bestellhistorie.
SELECT
customers.customer_name,
orders.order_id
FROM
customers
LEFT JOIN
orders
ON
customers.customer_id = orders.customer_id;
Ermitteln von Kunden ohne Bestellungen
LEFT JOIN kann auch verwendet werden, um Kunden zu finden, die keine Bestellungen haben. Durch die Überprüfung auf NULL können Kunden ohne Bestellungen herausgefiltert werden.
SELECT
customers.customer_name
FROM
customers
LEFT JOIN
orders
ON
customers.customer_id = orders.customer_id
WHERE
orders.order_id IS NULL;
Wie gezeigt, eignet sich INNER JOIN zur Extraktion gemeinsamer Daten, während LEFT JOIN zur Beibehaltung der Vollständigkeit der linken Tabelle und zum Abrufen zusätzlicher Informationen aus der rechten Tabelle geeignet ist.
Fazit
INNER JOIN und LEFT JOIN sind zwei wichtige SQL-Operationen, die für unterschiedliche Zwecke verwendet werden. INNER JOIN extrahiert nur gemeinsame Daten aus beiden Tabellen und filtert die relevanten Daten strikt. LEFT JOIN hingegen behält alle Daten aus der linken Tabelle und fügt, falls vorhanden, passende Daten aus der rechten Tabelle hinzu. Durch das Verständnis der Eigenschaften beider Join-Operationen und deren Anwendung in geeigneten Szenarien kann man effiziente Datenbankabfragen erstellen.