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;
JOIN 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 JOIN
s 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?