Suchen Sie nach einer klaren Erklärung von Joins in SQL? Sehen Sie sich diese fünf SQL INNER JOIN-Beispiele an!
In SQL kann INNER JOIN
für Anfänger ein wenig schwierig zu beherrschen sein. Aber wenn Sie erst einmal mit ihnen arbeiten, werden Sie feststellen, dass sie sehr nützlich sind! Im Folgenden werden wir fünf Beispiele für SQL INNER JOIN
besprechen. Doch zunächst ein kurzer Überblick darüber, warum JOINs wichtig sind.
In relationalen Datenbanken werden die Daten in Tabellen organisiert und gespeichert. Jede Tabelle repräsentiert eine bestimmte Art von Informationen. Oftmals müssen Sie jedoch Daten aus verschiedenen Tabellen gleichzeitig analysieren. Und genau hier kommen JOINs ins Spiel.
Wir ermutigen Sie, das Verbinden von Tabellen in unserem interaktiven SQL-JOINs Kurs folgen. Er umfasst 93 Übungen zu den folgenden Themen:
- SQL JOIN-Typen.
- Mehrfache JOINs.
- Self-Joins, d.h. das Verbinden einer Tabelle mit sich selbst.
- Nicht-Equi JOINs.
Sind Sie also bereit, sich einige Beispiele für INNER JOIN
anzusehen? Fangen wir an!
Tabellen zusammenführen: Einführung in die SQL JOIN-Operationen
SQL-JOINs kombinieren Daten aus zwei oder mehr Tabellen auf der Grundlage übereinstimmender Spaltenwerte. So können Sie beispielsweise Kundeninformationen mit den von ihnen getätigten Bestellungen zusammenführen oder jedes Produkt mit seinen Lieferanten verknüpfen.
SQL-JOINs Mit SQL JOIN können Sie Daten aus verschiedenen Tabellen zusammenführen und aussagekräftige Informationen für Ihren speziellen Anwendungsfall extrahieren. In diesem SQL JOIN Cheat Sheet finden Sie einen Überblick über die verschiedenen Arten von JOINs.
Ein INNER JOIN
in SQL kombiniert Zeilen aus mehreren Tabellen, indem er ihre gemeinsamen Spaltenwerte abgleicht. Wenn Sie eine INNER JOIN
anwenden, um Kundendaten mit den entsprechenden Bestellungen zu verknüpfen, erhalten Sie eine Liste der Kunden, die mindestens eine Bestellung aufgegeben haben.
Zusätzlich zu INNER JOIN
bietet SQL auch andere Arten von Verknüpfungen: LEFT JOIN
, RIGHT JOIN
, und FULL JOIN
. Diese Verknüpfungen werden OUTER JOIN
genannt. Im Gegensatz zu INNER JOIN
kann eine OUTER JOIN
Operation Zeilen aus beiden Tabellen auflisten, auch wenn es keine Übereinstimmung gibt.
Schauen wir uns ein Beispiel an, um die Natur von SQL INNER JOIN
s besser zu verstehen.
Hier ist die customers
Tabelle, die Kundeninformationen speichert:
customer_id | first_name | last_name | |
---|---|---|---|
1 | Cory | Castillo | cc@email.com |
2 | Ellie | Potts | ep@email.com |
3 | Jack | Greer | jg@email.com |
Und hier ist die orders
Tabelle, die alle Bestellungen der Kunden speichert:
order_id | customer_id | order_date | order_amount |
---|---|---|---|
27 | 1 | 6/6/2023 | 100.00 |
28 | 2 | 7/7/2023 | 150.00 |
29 | 1 | 8/8/2023 | 20.00 |
Die gemeinsame Spalte (in rosa dargestellt), auf der die customers
und orders
Tabellen verbunden sind, ist die Spalte customer_id
.
Und hier ist die Abfrage:
SELECT c.customer_id, c.email, o.order_date, o.order_amountFROM customers AS cINNER JOIN orders AS oON c.customer_id = o.customer_id;
Diese Abfrage verknüpft die customers
Tabelle (alias AS c
) und die orders
Tabelle (mit dem Alias AS o
). Diese Tabellen-Aliase bieten eine eindeutige Möglichkeit, die Datenbank über die Quelltabelle jeder Spalte zu informieren (unter Verwendung der Syntax table_alias.column_name
).
Diese Aliase werden in der Klausel ON
verwendet, um die Spalte für die Verbindung von Tabellen festzulegen. Sie werden auch in der Anweisung SELECT
verwendet, in der zwei Spalten aus der Tabelle customers (c.customer_id and c.email
) und zwei weitere Spalten aus der Tabelle orders
Tabelle (o.order_date and o.order_amount
).
Hier ist die Ausgabe der Abfrage:
customer_id | order_date | order_amount | |
---|---|---|---|
1 | cc@email.com | 6/6/2023 | 100.00 |
2 | ep@email.com | 7/7/2023 | 150.00 |
1 | cc@email.com | 8/8/2023 | 20.00 |
Sie werden feststellen, dass der Kunde mit der ID 3 nicht in der Ergebnistabelle erscheint. Dieser Kunde hat noch keine Bestellungen aufgegeben; daher gibt es keine passenden Datensätze in der orders
Tabelle.
Das Schlüsselwort INNER JOIN
ist austauschbar mit dem Schlüsselwort JOIN
. Mit anderen Worten, wenn Sie JOIN
verwenden, interpretiert die Datenbank es als Kurzschreibweise für INNER JOIN
.
Wenn Sie mehr über INNER JOIN
erfahren möchten, lesen Sie unseren Artikel Was ist ein Inner Join in SQL?
SQL INNER JOIN Beispiele in der Praxis
Sehen wir uns nun einige SQL INNER JOIN
Beispiele an, die für Anfänger geeignet sind. Bevor Sie sich mit den Beispielen befassen, sollten Sie sich diesen Artikel ansehen, in dem beschrieben wird, wie Sie SQL-JOINs üben können.
Beispiel 1: Bücher mit Autoren verknüpfen
Sie haben zwei Tabellen, in denen Informationen über Bücher und Autoren gespeichert sind. Verknüpfen Sie diese Tabellen, um die Liste der Bücher zusammen mit ihren Autoren anzuzeigen.
Hier ist die books
Tabelle:
book_id | title | publication_year | author_id |
---|---|---|---|
1 | Frankenstein | 1818 | 22 |
2 | The Time Machine | 1895 | 23 |
3 | The Martian | 2011 | 24 |
4 | 2001: A Space Odyssey | 1968 | 25 |
5 | Dune | 1965 | 26 |
Die Spalte book_id
identifiziert jedes Buch auf eindeutige Weise. Und die Spalte author_id
ordnet jedem Buch einen Autor zu.
Und hier ist die authors
Tabelle:
author_id | author_name |
---|---|
22 | Mary Shelley |
23 | H. G. Wells |
24 | Andy Weir |
25 | Arthur C. Clarke |
26 | Frank Herbert |
In der Spalte author_id
wird jeder Autor eindeutig identifiziert. Und die Spalte author_name
speichert die vollständigen Namen der Autoren.
Wenn Sie die Buchtitel und die Autorennamen sehen möchten, können Sie diese Tabellen anhand ihrer gemeinsamen Spalte (der Spalte author_id
in beiden Tabellen) verbinden. Wählen Sie einfach title
aus books
und author_name
aus authors
:
SELECT b.title, a.author_nameFROM books AS bINNER JOIN authors AS aON b.author_id = a.author_id;
Dies ist die resultierende Tabelle:
title | author_name |
---|---|
Frankenstein | Mary Shelley |
The Time Machine | H. G. Wells |
The Martian | Andy Weir |
2001: A Space Odyssey | Arthur C. Clarke |
Dune | Frank Herbert |
Bitte beachten Sie, dass jedem Buch ein Autor und jedem Autor ein Buch zugeordnet ist, da es keine doppelten Werte in der gemeinsamen Spalte author_id
gibt. Sehen Sie sich das nächste Beispiel an, um zu sehen, was passiert, wenn die gemeinsame Spalte doppelte Werte enthält.
Beispiel 2: Produkte zu Kategorien zuordnen
Sie haben zwei Tabellen, die Produkte und Produktkategorien speichern. Verbinden Sie diese Tabellen, um die Liste der Produkte zusammen mit ihren Kategorien zu sehen.
Hier ist die products
Tabelle:
product_id | product_name | category_id |
---|---|---|
1 | Apple | 22 |
2 | Orange | 22 |
3 | Potato | 23 |
4 | Carrot | 23 |
5 | Chocolate | 24 |
Die Spalte product_id
identifiziert jedes Produkt eindeutig. Und die Spalte category_id
ordnet jedem Produkt eine Kategorie zu.
Und hier ist die categories
Tabelle:
category_id | category_name |
---|---|
22 | Fruits |
23 | Vegetables |
24 | Snacks |
Die Spalte category_id
identifiziert jede Kategorie eindeutig. Und die Spalte category_name
speichert die vollständigen Kategorienamen.
Wenn Sie die Produkte und ihre Kategorien sehen möchten, können Sie diese Tabellen auf der Grundlage ihrer gemeinsamen Spalte, der Spalte category_id
, verbinden. Hier ist die Abfrage:
SELECT p.product_name, c.category_nameFROM products AS pINNER JOIN categories AS cON p.category_id = c.category_id;
Dies ist die resultierende Tabelle:
product_name | category_name |
---|---|
Apple | Fruits |
Orange | Fruits |
Potato | Vegetables |
Carrot | Vegetables |
Chocolate | Snacks |
Die Kategorien mit den IDs 22 und 23 sind jeweils zwei Produkten zugeordnet; ihre Namen erscheinen zweimal in der Ausgabetabelle.
Beispiel 3: Auflisten von Ärzten und Patienten mit gleichem Vornamen
Sie haben zwei Tabellen, die Informationen über Ärzte und Patienten speichern. Verbinden Sie diese Tabellen, um die Liste der Ärzte und Patienten mit demselben Vornamen anzuzeigen.
Hier ist die doctors
Tabelle:
doctor_id | first_name | last_name |
---|---|---|
1 | Samantha | Monroe |
2 | Melvin | Ferrell |
3 | Albie | Blake |
4 | Rose | Bernard |
5 | Loui | Peterson |
Die Spalte doctor_id
identifiziert jeden Arzt eindeutig. In den beiden anderen Spalten werden die Vor- und Nachnamen der Ärzte gespeichert.
Und hier ist die patients
Tabelle:
patient_id | first_name | last_name |
---|---|---|
23 | Ben | Woodward |
24 | Samantha | Thomson |
25 | Kate | Donovan |
26 | Albie | Vasquez |
27 | Loui | Chen |
In der Spalte patient_id
wird jeder Patient eindeutig identifiziert. In den beiden anderen Spalten werden die Vor- und Nachnamen der Patienten gespeichert.
Wenn Sie die Liste der Ärzte und Patienten mit demselben Vornamen sehen möchten, können Sie diese Tabellen anhand der Spalte first_name
verbinden.
SELECT d.*, p.*FROM doctors AS dINNER JOIN patients AS pON d.first_name = p.first_name;
Bitte beachten Sie, dass d.* alle Spalten der Tabelle doctors
Tabelle und p.*
alle Spalten aus der patients
Tabelle definiert.
Dies ist die resultierende Tabelle:
doctor_id | first_name | last_name | patient_id | first_name | last_name |
---|---|---|---|---|---|
1 | Samantha | Monroe | 24 | Samantha | Thomson |
3 | Albie | Blake | 26 | Albie | Vasquez |
5 | Loui | Peterson | 27 | Loui | Chen |
Dank der Operation INNER JOIN
können Sie nur die Arzt- und Patientenpaare auflisten, bei denen die Vornamen übereinstimmen.
Beispiel 4: Zuordnung von Personen zu geeigneten Wohnungen
Sie haben zwei Tabellen, in denen Informationen über zu vermietende Wohnungen und Personen, die nach Wohnungen in ihrer Preisklasse suchen, gespeichert sind. Verbinden Sie diese Tabellen, um zu sehen, welche Wohnungen von welcher Person gemietet werden können.
Hier ist die apartments
Tabelle:
apartment_id | rent |
---|---|
1 | 1000 |
2 | 700 |
3 | 500 |
Die Spalte apartment_id
identifiziert jede Wohnung eindeutig. Und die Spalte rent
speichert den monatlichen Mietbetrag.
Und hier ist die persons
Tabelle:
person_id | max_rent | |
---|---|---|
23 | ab@email.com | 900 |
24 | cd@email.com | 600 |
25 | ef@email.com | 3000 |
Die Spalte person_id
identifiziert eindeutig jede Person, die eine Wohnung zur Miete sucht. Die Spalte email
speichert ihre E-Mails, und die Spalte max_rent
speichert den Höchstbetrag der Monatsmiete, den sie für die Wohnung zahlen können.
Wenn Sie sehen möchten, welche Wohnungen von welcher Person gemietet werden können, können Sie diese Tabellen anhand der Spalten rent
und max_rent
verknüpfen:
SELECT p.person_id, p.email, a.apartment_id, a.rent AS apartment_rentFROM apartments AS aINNER JOIN persons AS pON a.rent < p.max_rent;
Hier muss die Übereinstimmung zwischen der Spalte Miete der Tabelle apartments
Tabelle und der Spalte max_rent
der Tabelle persons
Tabelle, wobei rent < max_rent
.
Dies ist die resultierende Tabelle:
person_id | apartment_id | apartment_rent | |
---|---|---|---|
25 | ef@email.com | 1 | 1000 |
23 | ab@email.com | 2 | 700 |
25 | ef@email.com | 2 | 700 |
23 | ab@email.com | 3 | 500 |
24 | cd@email.com | 3 | 500 |
25 | ef@email.com | 3 | 500 |
Durch die Verwendung der ON-Klausel mit der Bedingung, die das Zeichen <
enthält, wurden mehrere Zeilen aus der Tabelle apartments
Tabelle mehreren Zeilen aus der Tabelle persons
Tabelle zugeordnet, und umgekehrt. Und Sie können sehen, welche Wohnungen für welche Personen zur Miete geeignet sind.
Beispiel 5: Verbinden von Kontinenten, Ländern und Städtetabellen
Diesmal haben Sie drei Tabellen, in denen Informationen über Kontinente, Länder und Städte gespeichert sind. Verbinden Sie diese Tabellen, um zu erfahren, welche Stadt zu welchem Land und welches Land zu welchem Kontinent gehört.
Hier ist die continents
Tabelle, in der alle Kontinente gespeichert sind:
continent_id | continent_name |
---|---|
1 | Asia |
2 | Africa |
3 | North America |
4 | South America |
5 | Antarctica |
6 | Europe |
7 | Australia |
Die Spalte continent_id
identifiziert jeden Kontinent eindeutig. In der Spalte continent_name
ist der vollständige Name des Kontinents gespeichert.
Hier ist die countries
Tabelle, die ausgewählte Länder speichert:
country_id | country_name | continent_id |
---|---|---|
23 | United States | 3 |
24 | Brazil | 4 |
25 | South Africa | 2 |
26 | Japan | 1 |
27 | Poland | 6 |
In der Spalte country_id
wird jedes Land eindeutig identifiziert. In der Spalte country_name
wird der vollständige Name des Landes gespeichert. Und die Spalte continent_id
speichert den Kontinent, auf dem sich das Land befindet.
Und hier ist die cities
Tabelle, die ausgewählte Städte speichert:
city_id | city_name | country_id |
---|---|---|
33 | Rio de Janeiro | 24 |
34 | New York | 23 |
35 | Tokyo | 26 |
36 | Warsaw | 27 |
37 | Cape Town | 25 |
In der Spalte city_id
wird jede Stadt eindeutig identifiziert. In der Spalte city_name
wird der vollständige Name der Stadt gespeichert. Und die Spalte country_id
speichert das Land, in dem die Stadt liegt.
Wenn Sie sehen möchten, welche Städte, Länder und Kontinente zusammengehören, können Sie diese drei Tabellen anhand ihrer gemeinsamen Spalten verbinden:
SELECT cont.continent_name, coun.country_name, ci.city_nameFROM continents AS contINNER JOIN countries AS counON cont.continent_id = coun.continent_idINNER JOIN cities AS ciON coun.country_id = ci.country_id;
Die Tabelle continent
Tabelle wird mit der countries
über ihre gemeinsame Spalte (continent_id
) verbunden. Und die countries
Tabelle wird mit der cities
Tabelle über ihre gemeinsame Spalte verbunden (country_id
).
Dies ist die resultierende Tabelle:
continent_name | country_name | city_name |
---|---|---|
Asia | Japan | Tokyo |
Africa | South Africa | Cape Town |
North America | United States | New York |
South America | Brazil | Rio de Janeiro |
Europe | Poland | Warsaw |
Die drei Tabellen werden über ihre gemeinsamen Spalten verbunden, und die Anweisung SELECT
listet die Namen von Kontinenten, Ländern und Städten auf der Grundlage der Verbindung zwischen den ID-Spalten auf.
In diesem Artikel über die Verknüpfung von drei oder mehr Tabellen in SQL finden Sie weitere Beispiele für Multi-Table-Joins.
Sie sind dran mit dem Üben von SQL INNER JOIN-Beispielen
In diesem Artikel haben wir uns mit den Feinheiten von INNER JOIN
in SQL befasst, von den grundlegenden Konzepten bis hin zu fortgeschrittenen Szenarien. Wir haben verschiedene JOIN
Bedingungen verwendet und sogar drei Tabellen miteinander verbunden. Wie wir gesehen haben, liegt die Stärke von INNER JOIN
in seiner Fähigkeit, Datensätze nahtlos zu verbinden, wodurch wir wertvolle Erkenntnisse gewinnen können.
Brauchen Sie weitere SQL INNER JOIN
Beispiele? Versuchen Sie sich an allen Arten von JOINs, indem Sie unseren bereits erwähnten Kurs auf SQL-JOINs besuchen. Sie erhalten alle praktischen Übungen, die Sie benötigen, um JOINs zu schreiben.
Viel Erfolg!