Lekcja 15: Zewnętrzne łączenia - LEFT JOIN i RIGHT JOIN

Preview Mode

You're viewing this material in preview mode. Sign up to track your progress and access all features.

Lekcja 15: Zewnętrzne łączenia - LEFT JOIN i RIGHT JOIN
Required In Progress

Co jeśli chcemy zobaczyć WSZYSTKICH uczniów, nawet tych bez przypisanej klasy?

Problem z INNER JOIN polega na tym, że "gubi" rekordy, które nie mają dopasowania po drugiej stronie. W analityce często chcemy jednak zobaczyć właśnie te "sieroty" – np. uczniów bez klas, klientów bez zamówień itp. Do tego służą złączenia zewnętrzne (OUTER JOINs). Treść pochodzi z Lekcji 15: Złączenia zewnętrzne — LEFT JOIN i RIGHT JOIN.

LEFT JOIN: Zwraca wszystko z lewej tabeli + pasujące rekordy z prawej

LEFT JOIN to najpopularniejsze złączenie zewnętrzne. Tabela "lewa" to ta, która występuje jako pierwsza w zapytaniu (po FROM). Tabela "prawa" to ta, która występuje po klauzuli LEFT JOIN.

Logika działania LEFT JOIN:

  • Bierze wszystkie wiersze z tabeli lewej (np. Uczniowie), bez wyjątku.
  • Dla każdego z tych wierszy próbuje znaleźć dopasowanie w tabeli prawej (np. Klasy) na podstawie warunku ON.
  • Jeśli znajdzie dopasowanie, dołącza dane z prawej tabeli (tak jak INNER JOIN).
  • Jeśli nie znajdzie dopasowania (np. uczeń ma ID_Klasy = NULL), nadal zwraca wiersz z lewej tabeli, a wszystkie kolumny pobierane z prawej tabeli wypełnia wartościami NULL.

Gdzie pojawią się wartości NULL po takim łączeniu

Przykład: Chcemy listę wszystkich uczniów i ich klas.

SELECT
  Uczniowie.Nazwisko,
  Klasy.NazwaKlasy
FROM Uczniowie
LEFT JOIN Klasy
  ON Uczniowie.ID_Klasy = Klasy.ID_Klasy;

Potencjalny wynik:

Nazwisko      | NazwaKlasy
----------------------------
Kowalski      | '3A'
Nowak         | '3B'
Wiśniewski    | NULL

Wiersz 'Wiśniewski' pojawił się w wynikach (czego nie zapewniłby INNER JOIN), ponieważ Uczniowie była tabelą "lewą". NazwaKlasy dla niego to NULL, co informuje nas, że nie znaleziono dla niego dopasowania w tabeli Klasy.

RIGHT JOIN: Zwraca wszystko z prawej tabeli + pasujące rekordy z lewej

RIGHT JOIN działa analogicznie do LEFT JOIN, ale "odwraca" logikę – zatrzymuje wszystkie wiersze z tabeli prawej i uzupełnia NULL po lewej stronie, jeśli nie znajdzie dopasowania.

Przykład użycia: Uczniowie RIGHT JOIN Klasy pokazałby wszystkie klasy, nawet te, które nie mają przypisanych żadnych uczniów (tzw. "puste klasy").

Dobra praktyka: RIGHT JOIN jest rzadko używany, ponieważ każde zapytanie z RIGHT JOIN można zapisać jako LEFT JOIN poprzez zamianę kolejności tabel w klauzuli FROM. Używanie tylko LEFT JOIN sprawia, że kod jest bardziej spójny i czytelny dla innych analityków.