Direkt zum Hauptinhalt springen
eLearner.app
Modul 3 · Lektion 1 von 49/57 im Kurs~12 min
Lektionen des Moduls (1/4)

Verbinden zweier Tabellen: INNER JOIN

Bisher haben wir jeweils eine Tabelle gelesen. In der realen Welt sind es jedoch Daten auf mehrere verwandte Tabellen verteilt: in unserem Datensatz zum Beispiel jede Der Mitarbeiter verfügt über einen department_id, der auf die Tabelle departments verweist. Zu sehen der Name der Abteilung (und nicht nur deren id), der wir beitreten müssen zwei Tische. Der Operator, der dies tut, heißt JOIN.

Die grundlegende Syntax

SQL
SELECT columns
FROM   table_a
JOIN   table_b ON table_a.x = table_b.y;

Lesen Sie auf Englisch: _"Nehmen Sie table_a und fügen Sie table_b hinzu, indem Sie alle koppeln Zeile, in der table_a.x gleich table_b.y ist. Das Ergebnis ist ein neues Virtuelles Tabelle mit den Spalten beider.

SQL
-- For each employee, also show the name of their department:
SELECT employees.first_name,
       employees.last_name,
       departments.name AS dipartimento
FROM   employees
JOIN   departments ON employees.department_id = departments.id;

Der Teil nach ON wird als Join-Bedingung bezeichnet: Er gibt Auskunft über die Engine "Diese beiden Reihen sind ungefähr dasselbe, richten Sie sie aus". Im In den allermeisten Fällen handelt es sich um eine Gleichheit zwischen einem Primärschlüssel und einem Fremdschlüssel Schlüssel (hier departments.id und employees.department_id).

INNER JOIN, im Detail

Das vollständige Schlüsselwort ist INNER JOIN, aber JOIN allein ist der Standard Synonym. „Inner“ bedeutet, dass nur die Zeilen, die in beiden eine Übereinstimmung haben Tabellen werden zurückgegeben:

  • Wenn ein Mitarbeiter department_id = NULL hat, wird er nicht angezeigt im Ergebnis;
  • Wenn eine Abteilung keine Mitarbeiter hat, wird sie im Ergebnis nicht angezeigt.

Qualifizierende Spaltennamen

Wenn zwei Tabellen Spalten mit demselben Namen haben (hier haben beide id und beide haben name, wenn Sie darüber nachdenken), müssen Sie angeben, welche Tabelle Eine Spalte entsteht durch Schreiben von table.column. Um die Wiederholung langer Namen zu vermeiden, Aliase werden häufig verwendet (Sie haben sie in Modul 2 gesehen):

SQL
SELECT e.first_name, e.last_name, d.name AS dipartimento
FROM   employees   AS e
JOIN   departments AS d ON e.department_id = d.id;

Auch hier ist AS optional: FROM employees e funktioniert genauso.

Probieren Sie es aus

Übung#sql.m3.l1.e1
Versuche: 0Wird geladen…

Geben Sie für jeden Mitarbeiter in der Ingegneria-Abteilung den Vornamen (first_name), den Nachnamen (last_name) und die Stadt der Abteilung (departments.city) an. Drei Spalten, eine Zeile pro Mitarbeiter.

Editor wird geladen…
Hinweis anzeigen

Vervollständigen Sie die ON-Bedingung mit der Gleichheit zwischen e.department_id und d.id und wählen Sie dann d.city als dritte Spalte aus.

Lösung nach 3 Versuchen verfügbar

Wiederholungsübung

Übung#sql.m3.l1.e2
Versuche: 0Wird geladen…

Listen Sie den Vornamen (first_name) und den Nachnamen (last_name) aller Mitarbeiter auf, die in einer Abteilung mit Sitz in Mailand arbeiten. Filtern Sie nach „departments.city“, nicht nach dem Abteilungsnamen.

Editor wird geladen…
Hinweis anzeigen

Gleicher JOIN wie in der vorherigen Übung, aber filtern Sie nach d.city = 'Milano' statt nach dem Abteilungsnamen.

Lösung nach 3 Versuchen verfügbar