Przejdź do głównej treści
eLearner.app
Moduł 3 · Lekcja 1 z 49/57 w kursie~12 min
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

SQL
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.

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;

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):

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;

Tutaj również AS jest opcjonalne: FROM employees e działa tak samo.

Spróbuj

Ćwiczenie#sql.m3.l1.e1
Próby: 0Ładowanie...

Dla każdego pracownika działu Ingegneria podaj imię (imię), nazwisko (nazwisko) i miasto oddziału (departments.city). Trzy kolumny, jeden wiersz na pracownika.

Ładowanie edytora...
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

Ćwiczenie#sql.m3.l1.e2
Próby: 0Ładowanie...

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.

Ładowanie edytora...
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