Zurück zur Artikelliste Artikel
5 Leseminuten

Eine illustrierte Anleitung für den SQL INNER JOIN

Was ist ein SQL INNER JOIN, und wie funktioniert er? Finden wir es heraus!

In meinem letzten Artikel habe ich die CROSS JOIN-Operation in SQL. Heute schauen wir uns INNER JOIN an und wie man es verwendet. Ist es dasselbe wie JOIN? Wie viele Tabellen können Sie mit INNER JOIN verknüpfen?

Das sind alles gute Fragen. Sehen wir uns die Antworten an!

Was ist ein INNER JOIN?

INNER JOIN Ein INNER JOIN kombiniert Daten aus mehreren Tabellen, indem er sie auf der Grundlage eines übereinstimmenden Datensatzes verbindet. Diese Art der Verknüpfung erfordert eine Verknüpfungsbedingung, die wir gleich erklären werden.

Um zu veranschaulichen, wie INNER JOIN funktioniert, werden wir einige einfache Tabellen verwenden. Zwei davon, color und shoes sind unten abgebildet:

color

id name
1 yellow
2 green
3 pink

shoes

id size color_id
1 seven 2
2 eight 2
3 nine 2
4 seven 1
5 nine 1
6 seven 3
7 ten NULL

Die Tabelle color Tabelle speichert eine ID-Nummer und einen Namen für jede Farbe. Die Tabelle shoes Tabelle speichert eine ID-Nummer für jedes Paar Schuhe, die Schuhgröße und eine ID-Nummer, die sich auf eine Farbe in der color Tabelle verweist.

Wie INNER JOIN funktioniert

In diesem Beispiel verknüpft INNER JOIN Datensätze aus der Tabelle shoes Tabelle mit Datensätzen aus der color Tabelle über die Spalte color_id aus der Tabelle shoes Tabelle. Die Werte in dieser Spalte sind die gleichen wie die in der Spalte id der Tabelle color Tabelle, so dass die beabsichtigte Ergebnismenge erzeugt wird. Schauen Sie sich die folgende Abfrage an:

SELECT *  FROM  shoes
INNER JOIN color  ON color.id = shoes.color_id;

Die Anweisung SELECT entnimmt alle Datensätze aus der Tabelle, die hinter der Klausel FROM aufgeführt ist - in diesem Fall die shoes Tabelle. Dann gibt es eine INNER JOIN mit dem Namen der Tabelle, mit der wir die Datensätze abgleichen wollen (d. h. die color Tabelle). Das ON-Prädikat gibt die Abgleichsbedingung an, die Datensätze aus beiden Tabellen haben müssen. Hier lautet die Bedingung, dass das Feld id aus der Tabelle color Tabelle und das Feld color_id aus der Tabelle shoes Tabelle übereinstimmende Werte haben müssen. Wenn ein Datensatz nicht übereinstimmt, wird er aus den Ergebnissen herausgenommen.

Werfen Sie einen Blick auf die Ergebnismenge dieser Abfrage:

id size color_id id name
1 seven 2 2 green
2 eight 2 2 green
3 nine 2 2 green
4 seven 1 1 yellow
5 nine 1 1 yellow
6 seven 3 3 pink

Jetzt können wir dank INNER JOIN die Farbe jedes Schuhpaars sehen. Aber beachten Sie, dass der shoes Datensatz mit NULL in der Spalte color_id nicht angezeigt wird: Er hat mit keinem der Datensätze in der color Tabelle.

JOIN oder INNER JOIN?

Sie können den INNER -Teil von INNER JOIN weglassen; JOIN funktioniert auf die gleiche Weise. Sehen Sie sich die folgende Anweisung an.

SELECT *  FROM  shoes
JOIN color  ON color.id = shoes.color_id;

Joinen mit WHERE

Sie können auch eine WHERE -Klausel wie eine INNER JOIN verwenden. (Dies ist eine ältere Version der SQL-Syntax (ANSI-89); die JOIN -Befehle verwenden ANSI-92). So funktioniert die Verwendung einer WHERE:

SELECT *  FROM  shoes, color  
WHERE color.id = shoes.color_id ;

Das Ergebnis ist das gleiche:

id size color_id id name
1 seven 2 2 green
2 eight 2 2 green
3 nine 2 2 green
4 seven 1 1 yellow
5 nine 1 1 yellow
6 seven 3 3 pink

Verwendung eines INNER JOIN für mehrere Tabellen

INNER JOIN kann für mehr als zwei Tabellen verwendet werden. Sehen Sie sich die drei Tabellen unten an:

color

id name
1 yellow
2 green
3 pink

material

id name
1 leather
2 cotton
3 NULL

shoes

id size color_id material_id
1 seven 2 1
4 seven 1 2
5 nine 1 1
6 seven 3 NULL
7 ten NULL 1

Verwenden wir eine INNER JOIN, um Informationen in allen drei Tabellen zu kombinieren. Die folgende Abfrage ruft Datensätze für alle Schuhe ab, die Farb- und Materialinformationen enthalten:

SELECT *  FROM  shoes
JOIN color  ON color.id = shoes.color_id
JOIN material  ON material.id = shoes.material_id ;

Beachten Sie, dass in der Ergebnismenge nur Schuhe angezeigt werden, die keineNULL -Datensätze in den Spalten color_id und material_id enthalten.

id size color_id material_id id name id name
1 seven 2 1 2 green 1 leather
4 seven 1 2 1 yellow 2 cotton
5 nine 1 1 1 yellow 1 leather

INNER JOIN vs. CROSS JOIN

Wie wir gesehen haben, kombiniert INNER JOIN Informationen aus zwei oder mehr Datensätzen, die übereinstimmende Felder haben. Was passiert, wenn Sie CROSS JOIN verwenden, um die Datensätze shoes und color Tabellen verknüpfen? CROSS JOIN nimmt keine ON Bedingungen an, was bedeutet, dass es ein kartesisches Produkt zurückgibt. Schauen Sie sich die Abfrage und die Ergebnismenge unten an:

SELECT *  FROM  shoes
CROSS JOIN  color ;

Ergebnis?

id size color_id id name
1 seven 2 1 yellow
2 eight 2 1 yellow
3 nine 2 1 yellow
4 seven 1 1 yellow
5 nine 1 1 yellow
6 seven 3 1 yellow
7 ten NULL 1 yellow
1 seven 2 2 green
2 eight 2 2 green
3 nine 2 2 green
4 seven 1 2 green
5 nine 1 2 green
6 seven 3 2 green
7 ten NULL 2 green
1 seven 2 3 pink
2 eight 2 3 pink
3 nine 2 3 pink
4 seven 1 3 pink
5 nine 1 3 pink
6 seven 3 3 pink
7 ten NULL 3 pink

Alle Datensätze aus der shoes Tabelle wurden mit allen Datensätzen aus der color Tabelle verknüpft. Dies führt zu einigen Fehlern. Zum Beispiel werden einige Schuhe nicht mit der richtigen Farbe aufgelistet: Schuhe in Größe 8 sind nur in Grün erhältlich (ihr color_id Wert ist 2), aber in dieser Join-Instanz werden sie mit anderen Farben abgeglichen. Die NULL Datensätze in der Tabelle shoes Tabelle werden ebenfalls mit Farben abgeglichen, auch wenn sie keinen vergleichbaren Wert im Feld color_id haben.

Erfahren Sie mehr über INNER JOINs

INNER JOINs sind in SQL durchaus üblich. Unser Ziel in diesem Artikel war es, die Konzepte hinter INNER JOIN vorzustellen, aber es gibt noch viel mehr zu lernen. Warum besuchen Sie nicht LearnSQL's SQL für Anfänger Kurs um mehr zu erfahren?