Zurück zur Artikelliste Artikel
7 Leseminuten

SQL INNER JOIN in einfachen Worten erklärt

In diesem Artikel werde ich das vielleicht wichtigste Element der SQL-Sprache behandeln. Das ist richtig! Ich spreche von der SQL-Klausel INNER JOIN.

Wie Sie wissen, werden die Daten in einer Datenbank in mehreren Tabellen gespeichert. In meinem letzten Artikel habe ich beschrieben, wie man SQL-Abfragen erstellt, wenn sich die benötigten Daten nur in einer Tabelle befinden. Was aber, wenn sich die benötigten Daten in zwei Tabellen befinden? In diesem Fall müssen Sie eine JOIN-Klausel verwenden, um beide Tabellen zu kombinieren, was so etwas wie eine Verbindung beider Tabellen ist. In diesem Artikel werde ich die SQL INNER JOIN-Klausel in einfachen Worten anhand einiger leicht verständlicher Beispiele erklären.

Eine Reisebüro-Datenbank

Vielleicht wissen Sie schon, dass in einer Datenbank die Daten in Tabellen gespeichert werden. Nehmen wir an, Sie arbeiten in einem Reisebüro, und die Datenbank des Büros hat zwei Tabellen: TRAVEL_PACK und CITIES. In der folgenden Abbildung sehen Sie die Datenbank, natürlich werden nicht alle Daten angezeigt.

Beispiel für TRAVEL_PACK Tabelle

PACK_NAMEBEST_SEASONPRICEDURATION
United States: Big CitiesAll year$3500.0010 days
United States: West CoastMarch to May$3700.0012 days
South American TourAugust to November$1850.0018 days
Beaches of BrazilDecember to March$2200.007 days

Beispiel einer CITIES Tabelle

NAMETYPE_OF_CITYPACK_NAMEDAYS_STAYING
San FranciscohistoricalUnited States: West Coast5
WashingtonhistoricalUnited States: Big Cities3
New YorkbusinessUnited States: Big Cities7
Rio de JaneirobeachBeaches of Brazil4
UshuaiamountainSouth American Tour3
Salvador de BahiabeachBeaches of Brazil3
Los AngelesbeachUnited States: West Coast7

Bitte beachten Sie: Um eine JOIN-Klausel zu verwenden, um zwei Tabellen zu kombinieren, muss es ein Feld oder eine Spalte geben, die in beiden Tabellen vorkommt.

In der Beispieldatenbank ist dieses Feld der Name des Reisepakets. Wie Sie in der Tabelle TRAVEL_PACK sehen, steht der Name des Pakets unter der Spalte PACK_NAMEsteht, und in der CITIES Tabelle steht der Name des Pakets ebenfalls in der Spalte PACK_NAME zu finden. Es ist leicht zu erkennen, dass beide Spalten denselben Spaltennamen haben, in anderen Datenbanken kann dieser jedoch anders lauten. Mit anderen Worten, wenn Sie eine INNER JOIN-Klausel verwenden, kann der Name der gemeinsamen Spalte in beiden Tabellen unterschiedlich sein oder auch nicht. Wie auch immer, merken Sie sich den Spaltennamen PACK_NAMEdenn Sie werden ihn später für die JOIN-Klausel benötigen.

Ihr erstes SQL JOIN: Ermitteln Sie die Reisepakete einschließlich der Strandstädte

In der Regel empfehle ich, sich zunächst zu überlegen, wo sich die Daten befinden, die Sie für die Abfrage benötigen. In diesem Fall ist es klar, dass Sie die TRAVEL_PACK Tabelle benötigen, um die Namen der Pakete zu erhalten, aber gleichzeitig benötigen Sie auch die CITIES Tabelle, weil Sie überprüfen müssen, ob die Stadt eine Strandstadt ist oder nicht. Die Daten, die für diese Abfrage benötigt werden, befinden sich also in zwei Tabellen, was der Grund dafür ist, dass Sie einen SQL JOIN verwenden müssen.

Wenn Sie Daten aus zwei (oder mehr) Tabellen abrufen müssen, müssen Sie einen SQL JOIN verwenden. Der SQL JOIN fungiert als Verbindungsglied zwischen zwei Tabellen und erstellt Datensatzpaare. Im Grunde genommen nimmt er zwei Datensätze (einen aus jeder Tabelle) und verbindet sie zu einem Datensatzpaar. Diese Art der Verknüpfung wird als INNER JOIN bezeichnet, und in SQL sind die Begriffe JOIN und INNER JOIN genau dasselbe. Für die Leser, die tiefer einsteigen wollen, gibt es noch andere SQL-Join-Typen, z. B. das Gegenteil des INNER-Joins ist ein anderer Join-Typ, der LEFT-Join oder OUTER LEFT-Join genannt wird, und Sie können auch andere Join-Typen wie RIGHT-Join, NATURAL-Join und LATERAL-Join finden. Viele dieser SQL-Join-Typen können Sie im Online-Kurs SQL-JOINs kennenlernen. In diesem Artikel werde ich mich jedoch auf den INNER JOIN konzentrieren, der wirklich leistungsstark ist!

Das nächste Bild zeigt, wie die JOIN-Klausel ein Paar von Datensätzen erzeugt:

Ein GIF, das zeigt, wie die innere Verknüpfung von Tabellen funktioniert

(zum Vergrößern klicken)

Nun zeige ich Ihnen die Syntax zur Implementierung eines INNER JOIN, indem ich das folgende Muster verwende

FROM table1 
INNER JOIN table2 ON common column in table1 = common column in table2

Wenn Sie das Muster mit Ihren Beispieltabellen und Spaltennamen füllen, erhalten Sie die nächste INNER JOIN-Klausel:

FROM CITIES 
INNER JOIN TRAVEL_PACK ON CITIES.PACK_NAME = TRAVEL_PACK.PACK_NAME

FROM STÄDTE Sobald Sie die FROM-Klausel mit dem INNER JOIN vervollständigt haben, können Sie mit den SELECT- und WHERE-Klauseln der Abfrage weiterarbeiten. Die SELECT-Klausel ist einfach, weil Sie nur die Spalte NAME zurückgeben müssen, dann wird die Klausel sein:

SELECT TRAVEL_PACK.PACK_NAME

Beachten Sie, dass der Verweis auf die Spalte PACK_NAME erfolgt durch Hinzufügen eines Präfixes mit dem Tabellennamen (TRAVEL_PACK in diesem Fall). Dies ist eine gute Vorgehensweise, wenn die Abfrage mehr als eine Tabelle umfasst.

In der WHERE-Klausel müssen Sie die Ergebnisse so filtern, dass sie nur Strandstädte enthalten. Die Klausel lautet dann:

WHERE CITIES.TYPE_OF_CITY = 'beach'

Wenn Sie schließlich alle Klauseln zusammenfügen, ergibt sich folgende Abfrage:

SELECT TRAVEL_PACK.PACK_NAME
FROM CITIES 
JOIN TRAVEL_PACK ON CITIES.PACK_NAME = TRAVEL_PACK.PACK_NAME
WHERE CITIES.TYPE_OF_CITY = 'beach'

Es folgt das Ergebnis der vorherigen Abfrage:

NAME
Los Angeles
Salvador de Bahia
Rio de Janeiro

Ihr nächster Join: die Städte, die in Reisepaketen billiger als $2500 enthalten sind

Ähnlich wie bei der vorherigen Abfrage sehen Sie, dass Sie für diese Abfrage auf zwei Tabellen zugreifen müssen, indem Sie einen JOIN für die Spalten CITIES und TRAVEL_PACK Tabellen. Beachten Sie, dass ich den Begriff JOIN anstelle von INNER JOIN verwende, da beide in SQL genau dasselbe bedeuten.

Aus der vorherigen Abfrage wissen Sie bereits, wie Sie die JOIN-Klausel erstellen. Die Änderungen liegen in den SELECT- und WHERE-Klauseln, wie Sie in den folgenden Abschnitten sehen können.

Die SELECT-Klausel ist einfach, da Sie nur den Namen der Stadt benötigen:

SELECT CITY.NAME

In der where-Klausel müssen Sie nach dem Preis des Reisepakets filtern, dann wird die WHERE-Klausel lauten:

WHERE TRAVEL_PACK.PRICE <= 2500

Die vollständige Abfrage sieht dann wie folgt aus:

SELECT CITY.NAME
FROM CITIES 
JOIN TRAVEL_PACK ON CITIES.PACK_NAME = TRAVEL_PACK.PACK_NAME
WHERE TRAVEL_PACK.PRICE <= 2500

Das Ergebnis der vorangegangenen Abfrage wird sein:

NAME
Rio de Janeiro
Ushuaia
Salvador de Bahia

Tiefes Tauchen: INNER JOIN für drei Tabellen

Ist es möglich, einen INNER JOIN mit mehr als zwei Tabellen zu verwenden? Natürlich ist das möglich. Außerdem können Sie eine JOIN-Klausel mit so vielen Tabellen verwenden, wie Sie möchten.

Ich muss jedoch erwähnen, dass jede SQL JOIN-Klausel nur für ein einziges Tabellenpaar gilt. Wenn Sie also drei Tabellen miteinander verbinden wollen, z. B. T1, T2 und T3, benötigen Sie zwei SQL JOIN-Klauseln, wie Sie im folgenden Beispiel sehen können:

FROM T1 JOIN T2 ON ...... 
				JOIN T3 ON .......

Ich habe die ON-Klausel leer gelassen, weil ich diesen Teil anhand des folgenden Beispiels erklären werde. Nehmen wir an, Sie erweitern die Datenbank der Agentur um eine neue Tabelle mit dem Namen STATES, in der Sie die Bundesstaaten, Regionen oder Provinzen der einzelnen Länder speichern wollen. Die Datenbank mit den drei Tabellen sieht dann wie im folgenden Bild aus:

TRAVEL_PACK Tabelle

PACK_NAMEBEST_SEASONPRICEDURATION
United States: Big CitiesAll year$3500.0010 days
United States: West CoastMarch to May$3700.0012 days
South American TourAugust to November$1850.0018 days
Beaches of BrazilDecember to March$2200.007 days

STATES Tabelle

NAMECOUNTRYPOPULATIONLANGUAGE
New YorkUnited States17000000english
Tierra del FuegoArgentina190000spanish
CaliforniaUnited States13400000english
Rio de JaneiroBrasil15000000portuguese
BahiaBrasil8000000portuguese

CITIES Tabelle

NAMETYPE_OF CITYPACK_NAMEDAYS_STAYSTATE
San FranciscohistoricalUnited States: West Coast5California
WashingtonhistoricalUnited States: Big Cities3Washington
New YorkbusinessUnited States: Big Cities7New York
Rio de JaneirobeachBeaches of Brazil4Rio de Janeiro
UshuaiamountainSouth American Tour3Tierra del Fuego
Salvador de BahiabeachBeaches of Brazil3Bahia
Los AngelesbeachUnited States: West Coast7California

Angenommen, Sie benötigen einen Bericht mit einer Liste aller Städte mit dem Bundesland, dem Namen des Pakets und der Sprache, die in der Stadt in den Staaten verwendet wird, in denen die Sprache Spanisch oder Portugiesisch ist. Es ist klar, dass Sie die Tabellen JOIN CITIES und STATES JOINen und dieses Ergebnis dann auch mit der TRAVEL_PACK Tabelle. Sie können damit beginnen, indem Sie das anwenden, was Sie in den vorherigen Beispielen gelernt haben.

Verwenden Sie zunächst eine JOIN-Klausel, um die Tabelle CITIES mit der Tabelle STATES. Es ist klar, dass Sie die Spalten CITIES.STATE und STATE.NAME in der ON-Klausel verwenden. Die from-Klausel sieht dann wie folgt aus:

FROM CITIES JOIN STATES ON CITIES.STATE = STATES.NAME 

Als nächstes müssen Sie die dritte Tabelle zur JOIN-Klausel hinzufügen, nämlich die Tabelle TRAVEL_PACK. Sie haben bereits gelernt, wie man diese Tabelle in einem früheren Beispiel JOIN, so dass die vollständige JOIN wird sein:

FROM CITIES JOIN STATES ON CITIES.STATE = STATES.NAME
  JOIN TRAVEL_PACK ON CITIES.PACK_NAME = TRAVEL_PACK.PACK_NAME

Wenn Sie die SELECT- und WHERE-Klauseln hinzufügen, sieht die vollständige Abfrage wie folgt aus:

SELECT CITIES.NAME, STATES.NAME, TRAVEL_PACK.PACK_NAME, STATES.LANGUAGE
FROM CITIES JOIN STATES ON CITIES.STATE = STATES.NAME
  JOIN TRAVEL_PACK ON CITIES.PACK_NAME = TRAVEL_PACK.PACK_NAME
WHERE STATES.LANGUAGE IN ('spanish','portuguese')

Und das Ergebnis wird sein:

NAMENAMEPACK_NAMELANGUAGE
SalvadorBahiaBeaches of Brazilportuguese
Rio de JaneiroRio de JaneiroBeaches of Brazilportuguese
UshuaiaTierra del FuegoSouth American Tourspanish

Nächste Schritte zum Weiterlernen

In diesem Artikel habe ich beschrieben, wie man Tabellen in SQL verknüpft. Ich habe anhand von Beispielen erklärt, was ein SQL INNER JOIN ist und wie die JOIN-Klausel funktioniert. Die JOIN-Klausel eröffnet eine riesige Welt neuer Möglichkeiten in SQL. Ich denke, dass jede nicht-technische Person, die in der Lage ist, die JOIN-Klausel in SQL-Abfragen zu verwenden, einen zusätzlichen Wert als Mitarbeiter hat, unabhängig davon, in welchem Bereich des Unternehmens sie arbeitet. Gehen Sie mit SQL-JOINs in die Tiefe und leisten Sie einen soliden Beitrag zum Geschäft in Ihrem Unternehmen!