Lekcje modułu (1/4)
Łączenie dwóch tabel: INNER JOIN
Do tej pory czytaliśmy jedną tabelę na raz. Jednak w prawdziwym świecie dane są
rozłożone na wiele powiązanych tabel: na przykład w naszym zbiorze danych, każda
pracownik ma department_id, który wskazuje na tabelę departments. Aby zobaczyć
nazwa działu (a nie tylko jego id), do którego musimy dołączyć
dwa stoły. Operator, który to robi, nazywa się JOIN.
Podstawowa składnia
SELECT columns
FROM table_a
JOIN table_b ON table_a.x = table_b.y;Przeczytaj po angielsku: ”weź table_a, dołącz do niego table_b, łącząc w parę
wiersz, w którym table_a.x równa się table_b.y". Rezultatem jest nowy wirtualny
tabela z kolumnami obu.
-- 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;Część po ON nazywa się warunkiem złączenia: to ona mówi
silnik „te dwa wiersze dotyczą mniej więcej tego samego, ustaw je w jednej linii”. w
w zdecydowanej większości przypadków jest to równość klucza podstawowego i obcego
klawisz (tutaj departments.id i employees.department_id).
POŁĄCZENIE WEWNĘTRZNE, szczegółowo
Pełne słowo kluczowe to INNER JOIN, ale samo JOIN jest standardem
synonim. „Wewnętrzny” oznacza, że tylko wiersze pasujące do obu
zwracane są tabele:
- jeśli pracownik ma
department_id = NULL, nie pojawi się w wynik; - jeśli dział nie posiada pracowników, to nie pojawi się w wyniku.
Kwalifikujące nazwy kolumn
Kiedy dwie tabele mają kolumny o tej samej nazwie (tutaj obie mają id i
oba mają name, jeśli się nad tym zastanowić), musisz określić która tabela
kolumna pochodzi z wpisania table.column. Aby uniknąć powtarzania długich nazw,
aliasy są często używane (widziałeś je w module 2):
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;Tutaj również AS jest opcjonalne: FROM employees e działa tak samo.
Spróbuj
Dla każdego pracownika działu Ingegneria podaj imię (imię), nazwisko (nazwisko) i miasto oddziału (departments.city). Trzy kolumny, jeden wiersz na pracownika.
Pokaż wskazówkę
Wypełnij warunek ON równością między e.department_id i d.id, a następnie wybierz d.city jako trzecią kolumnę.
Rozwiązanie dostępne po 3 próbach
Przejrzyj ćwiczenie
Wymień imię (imię) i nazwisko (nazwisko) wszystkich pracowników, którzy pracują w dziale z siedzibą w Mediolanie. Filtruj według działów.miasto, a nie według nazwy działu.
Pokaż wskazówkę
To samo JOIN co w poprzednim ćwiczeniu, ale filtruj według d.city = 'Milano' zamiast według nazwy działu.
Rozwiązanie dostępne po 3 próbach