Zusammenfassung: In diesem Lernprogramm erfahren Sie, wie Sie Daten aus mehreren Tabellen mithilfe der SQL INNER JOIN-Anweisung abfragen.
Im vorherigen Lernprogramm haben Sie gelernt, wie Sie mit der SELECT-Anweisung Daten aus einer einzelnen Tabelle abfragen. Sie möchten jedoch häufig Daten aus mehreren Tabellen abfragen, um eine vollständige Ergebnismenge für die Analyse zu erhalten. Zum Abfragen von Daten aus mehreren Tabellen verwenden Sie Join-Anweisungen.
SQL bietet verschiedene Arten von Joins, z. B. innere Joins, äußere Joins (linker äußerer Join oder linker Join, rechter äußerer Join oder rechter Join und vollständiger äußerer Join ) und selbst beitreten. In diesem Tutorial zeigen wir Ihnen, wie Sie die INNER JOIN
-Klausel verwenden.
SQL INNER JOIN-Syntax
Im Folgenden wird INNER JOIN
-Syntax zum Verbinden zweier Tabellen:
1
2
3
4
5
|
SELECT
Spalte1, Spalte2
FROM
Tabelle_1
INNER JOIN Tabelle_2 ON join_condition;
|
Lassen Sie uns die obige Syntax genauer untersuchen:
- Die
table_1
undtable_2
werden als verbundene Tabellen bezeichnet. - Für jede Zeile In der
table_1
findet die Abfrage die entsprechende Zeile in dertable_2
, die die Join-Bedingung erfüllt. Wenn die entsprechende Zeile gefunden wird, gibt die Abfrage eine Zeile zurück, die Daten aus beiden Tabellen enthält. Andernfalls wird die nächste Zeile intable_1
untersucht, und dieser Vorgang wird fortgesetzt, bis alle Zeilen intable_1
untersucht wurden.
Für das Verknüpfen von mehr als zwei Tabellen wurde dieselbe Logik angewendet.
Beispiele für SQL INNER JOIN
SQL INNER JOIN – Abfragen von Daten aus Beispiel für zwei Tabellen
In diesem Beispiel verwenden wir die Tabellen products
und categories
in der Beispieldatenbank. Das folgende Bild zeigt das Datenbankdiagramm.
Im obigen Diagramm:
- Eine Kategorie kann viele Produkte enthalten.
- Ein Produkt gehört zu einer und nur einer Kategorie.
Daher besteht zwischen den Zeilen in Tabelle und Zeilen in der Tabelle products
. Die Verknüpfung zwischen den beiden Tabellen ist die Spalte categoryid
.
Wir müssen die folgenden Daten aus beiden Tabellen abfragen:
-
productID
,productName
aus der Tabelleproducts
. -
categoryName
aus der Tabellecategories
.
Die folgende Abfrage ruft Daten aus beiden Tabellen ab:
1
2
3
4
5
6
|
SELECT
productID, productName, categoryName
FROM
Produkte
INNER JOIN
Kategorien ON category.categoryID = products.categoryID;
|
Die Verknüpfungsbedingung wird in der Klausel INNER JOIN
nach dem Schlüsselwort ON
als Ausdruck angegeben:
1
|
category.categoryID = products.categoryID
|
Für jede Zeile in der products
findet die Abfrage eine entsprechende Zeile in der Tabelle categories
mit derselben categoryid.
Wenn zwischen zwei Zeilen in übereinstimmt In beiden Tabellen wird eine Zeile zurückgegeben, die Spalten enthält, die in der SELECT-Klausel angegeben sind, dh Produkt-ID, Produktname und Kategoriename. Andernfalls wird die nächste Zeile in der Tabelle products
überprüft, um die passende Zeile in der Tabelle categories
zu finden. Dieser Prozess wird fortgesetzt, bis die letzte Zeile der Produkttabelle untersucht wird.
SQL INNER JOIN – Abfragen von Daten aus drei Tabellen
Wir können dieselben Techniken zum Verknüpfen von drei Tabellen verwenden.Die folgende Abfrage wählt productID
, productName
, categoryName
und aus den Tabellen products
, categories
und suppliers
:
1
2
3
4
5
6
7
8
9
10
11
|
SELECT
productID,
productName,
categoryName,
Firmenname AS Lieferant
FROM
Produkte
INNER JOIN
Kategorien ON Kategorien. categoryID = products.categoryID
INNER JOIN
Lieferanten ON Supplier.supplierID = products.supplierID
|
Implizite SQL INNER JOIN
Es gibt eine andere Form der INNER JOIN
, die als implizite innere Verknüpfung bezeichnet wird (siehe unten):
1
2
3
4
5
6
7
|
SELECT
column1, column2
FROM
table_1,
table_2
WHERE
join_condition;
|
In diesem Formular geben Sie alle verknüpften Tabellen in an die FROM
-Klausel und setzen Sie die Join-Bedingung in die WHERE-Klausel der SELECT
-Anweisung. Wir können das obige Abfragebeispiel mit dem impliziten INNER JOIN
wie folgt umschreiben:
1
2
3
4
5
6
7
|
SELECT
Produkt-ID, Produktname, Kategoriename
FROM
Produkte,
Kategorien
WHERE
products.categoryID = category.categoryID;
|