Lektion 3.1 | Der INNER JOIN

Einführung

Stelle Dir zwei Tabellen als zwei Kreise, die sich überschneiden, vor. Die Schnittmenge ist das Ergebnis des INNER JOIN.

Der einzige Unterschied zum NATURAL JOIN ist, dass beim INNER JOIN die Spalten, die auf gleiche Werte überprüft werden sollen, von Dir angegeben werden. So ist es erstens kein Problem, wenn die zu verknüpfenden Spalten nicht denselben Namen haben, und zweitens werden so unbeabsichtigte Verbindungen anderer gleichnamiger Spalten verhindert. Das Ergebnis der Abfrage ist die Schnittmenge der gejointen Tabellen.

Der INNER JOIN wird gebildet, indem man in der FROM-Klausel a INNER JOIN b ON a.Attribut = b.Attribut einfügt. Das Wort Attribut ist ein Synonym für Spalte. Optional kann man nun die WHERE-Klausel nutzen, um weitere Bedingungen hinzuzufügen. Schematisch sieht die INNER JOIN-Syntax folgendermaßen aus:

SELECT * FROM a
	INNER JOIN b
	ON a.Attribut = b.Attribut
	WHERE irgendwas;

Ein Beispiel:

Wir möchten die customer- und die address-Tabelle mithilfe eines INNER JOIN verbinden.

SELECT customer.first_name,
	customer.last_name, address.address_id, address.address,
	address.city_id
	FROM customer
	INNER JOIN address ON customer.address_id = address.address_id;

Ergebnis (Ausschnitt):

first_name

last_name

address_id

address

city_id

Mary

Smith

5

1913 Hanoi Way

463

Patricia

Johnson

6

1121 Loja Avenue

449

Linda

Williams

7

692 Joliet Street

38

Barbara

Jones

8

1566 Inegl Manor

349

Mehr als einer geht immer noch!

Der "Doppel-Join" wird zunächst genau so wie der vorherige Join gebildet, jedoch werden anstatt von zweien drei Tabellen verwendet.

Wie Du in der vorherigen Lektion erfahren hast, kann man in einem einzigen JOIN-Statement bis zu 61 Tabellen miteinander verbinden.

Um den "doppelten" INNER JOIN zu bilden, verwenden wir zunächst die Struktur aus der Einführung, erweitern diese jedoch folgendermaßen: Wir hängen an das Ende einfach ein weiteres INNER JOIN c ON c.Attribut = b.Attribut an.

Natürlich hätte das ON-Statement auch so aussehen können: a.Attribut = c.Attribut.

Wollen wir c sowohl mit a als auch mit b verbinden, so verbinden wir obrige ON-Statements mit einem AND: ... ON b.Attribut = b.Attribut AND c.Attribut = c.Attribut.

Noch einmal übersichtlich dargestellt:

SELECT * FROM a
	INNER JOIN b
	ON a.Attribut = b.Attribut
	INNER JOIN c
	ON b.Attribut = c.Attribut |
	ON a.Attribut = c.Attribut |
	ON b.Attribut = c.Attribut AND a.Attribut = c.Attribut
	[WHERE | AND {irgendwas}];

Die Pipe (|) bedeutet "oder" wird jedoch in MySQL nicht als solches verwendet — wie Du Dich sicher erinnern wirst, gibt es dazu das OR — dient jedoch in diesem Sachzusammenhang immer dem Aufzeigen von verschiedenen Möglichkeiten. Mehr dazu findest Du hier.

Ein Beispiel:

Wir erweitern unseren Join aus dem vorherigen Beispiel (Beispiel 1), indem wir noch die city-Tabelle hinzufügen.

SELECT customer.first_name,
customer.last_name, address.address_id, address.address,
city.city_id, city.city, city.country_id
FROM customer
INNER JOIN address ON
customer.address_id = address.address_id
INNER JOIN city ON address.city_id = city.city_id;

Ergebnis (Ausschnitt):

first_name

last_name

address_id

address

city_id

city

country_id

Mary

Smith

5

1913 Hanoi Way

463

Sasebo

50

Patricia

Johnson

6

1121 Loja Avenue

449

San Bernadino

103

Linda

Williams

7

692 Joliet Street

38

Athenai

39

Barbara

Jones

8

1566 Inegl Manor

349

Myingyan

64

Tipp

Benutze in Deiner Abfrage statt "INNER JOIN" nur "JOIN"! In mariaDB ist JOIN der Standardausdruck für INNER JOIN.
Richte Dich jedoch in Klausuren nach den Vorgaben des Lehrkörpers!