SQL Schnellstart – Inner Join
Manchmal möchten wir in einer unserer SQL-Abfragen nicht nur eine Tabelle, sondern gleich mehrere miteinbeziehen. Besonders hilfreich ist das, wenn zwischen den Daten der jeweiligen Tabellen ein gewisser Zusammenhang besteht. Ein sogenannter INNER JOIN ist eine Möglichkeit, wie du zwei Tabellen in einer Abfrage miteinander verknüpfen kannst. Hier erfährst du wie du einen INNER JOIN in SQL einsetzt.
SQL INNER JOIN Definition
Der INNER JOIN verknüpft Datensätze aus zwei Tabellen, welche ein bestimmtes Kriterium erfüllen. Meistens verwendet man als Kriterium, dass der Wert von einer Spalte von Tabelle A mit einem Wert von einer Spalte von Tabelle B übereinstimmen muss. Du hast dann also die Schnittmenge von den Tabellen A und B:

(Quelle: https://upload.wikimedia.org/wikipedia/commons/1/18/SQL_Join_-_07_A_Inner_Join_B.svg, 16.06.2020, Urheber: "GermanX")
SQL INNER JOIN Syntax
Die Syntax eines INNER JOINS sieht folgendermaßen aus:
SELECT tabelle1.spalte1, tabelle1.spalte2, ..., tabelle1.spalteN,
tabelle2.spalte1, tabelle1.spalte2, ..., tabelle2.spalteN
FROM tabelle1
INNER JOIN tabelle2 ON tabelle1.spalteX = tabelle2.spalteX;
Nach ON kannst du auch eine beliebige Bedingung angeben. In der Regel prüft man aber auf Gleichheit von zwei verschiedenen Spalten. Schau dir dazu das Beispiel an.
SQL INNER JOIN Beispiel
Stell dir vor, du arbeitest bei der Deutschen Flugsicherung. Flughäfen aller Welt sind in einer Tabelle "Flughafen" gespeichert:

Die FlughafenID ist einzigartig in der Tabelle Flughafen. Das bedeutet es gibt keine Flughäfen mit der gleichen FlughafenID. Solch ein Attribut nennt man Primärschlüssel. Dieser dient dazu, jeden Datensatz (hier Flughafen) eindeutig zu identifizieren.
Außerdem sind Flugzeuge, in einer Tabelle "Flugzeuge" zu finden:

Wie du siehst, ist jedes Flugzeug über die FlughafenID mit einem Startflughafen und einem Zielflughafen verknüpft. Man nennt diese Werte bei Startflughafen und Zielflughafen auch Fremdschlüssel, denn sie verweisen auf einen Primärschlüssel in einer fremden Tabelle.
Hinweis: Du könntest den jeweiligen Flughafen auch direkt zu den jeweiligen Flugzeugen schreiben. Doch stell dir vor, ein Flughafen benennt sich um, dann müsstest du bei jedem Flugzeug den Flughafennamen umbenennen. Hast du stattdessen eine Tabelle mit den Flughäfen, so tritt diese "Veränderungsanomalie" nicht auf, denn hier musst du nur einmal einen Datensatz abändern bzw. den Flughafen umbenennen.
Nun unser Beispiel: Wir wollen alle Flugzeuge mit den Namen der jeweiligen Start- und Zielflughäfen ausgeben.
SELECT Flugzeuge.Name, Start.Name AS Startflughafen, Ziel.Name AS Zielflughafen
FROM Flugzeuge
INNER JOIN Flughafen AS Start ON Flugzeuge.Startflughafen = Start.FlughafenID
INNER JOIN Flughafen AS Ziel ON Flugzeuge.Zielflughafen = Ziel.FlughafenID;
Wie du siehst, habe ich zusätzlich das Schlüsselwort "AS" verwendet, das für Alias steht. Damit kann ich einerseits Spalten neue Namen geben, damit die Spaltenbezeichnung in der Ausgabe verständlicher ist, andererseits kann ich auch Tabellen neue Bezeichnungen zuweisen.
Das ist hier auf jeden Fall notwendig, weil hier zweimal dieselbe Tabelle beitritt und SQL bei unserem SELECT sonst nicht wüsste, ob es den Namen von unserem Startflughafen oder von unserem Zielflughafen ausgeben soll.

Hinweis: Ein Flugzeug, das keinen Startflughafen oder Zielflughafen hat, würde bei unserer Abfrage nicht aufgelistet werden. Nur Attribute, bei denen es eine Übereinstimmung der Werte gibt, sind Teil unseres Ergebnisses.
Code-Aufgabe: Alle Flugzeuge die den Flughafen "Flughafen Frankfurt am Main" anfliegen
Ermittle, welche Flugzeuge den Flughafen "Flughafen Frankfurt am Main" anfliegen. Löse diese Aufgabe mit der Hilfe von INNER JOIN.
Die Lösung findest du unter dem Code-Editor.
[lp_spoiler title="Lösung anzeigen"]
Lösung:
SELECT Flugzeuge.Name
FROM Flugzeuge
INNER JOIN Flughafen ON Flugzeuge.Zielflughafen = Flughafen.FlughafenID
WHERE Flughafen.Name = 'Flughafen Frankfurt am Main';
Ausgabe:

[/lp_spoiler]
Fazit
Mit deinem ersten JOIN hast du nun eine ganz neue Möglichkeit kennengelernt, Tabellendaten sinnvoll miteinander zu verknüpfen und so Daten aus mehreren Tabellen zu benutzen. Im nächsten Artikel wirst du einen weiteren wichtigen JOIN kennenlernen - den "LEFT JOIN".