24th Nov 2022 7 Leseminuten SQL INNER JOIN in einfachen Worten erklärt Ignacio L. Bisso JOIN Inhaltsverzeichnis Eine Reisebüro-Datenbank Ihr erstes SQL JOIN: Ermitteln Sie die Reisepakete einschließlich der Strandstädte 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: (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! Tags: JOIN