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
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.
-- 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 = NULLhat, 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):
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
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.
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
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.
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