Używamy cookies, żeby zwiększyć Twoje doświadczenia na stronie
CodeWorlds

LEFT JOIN - wszystkie zwoje z lewego regału

INNER JOIN
pokazuje tylko kompletne pary. Czasem jednak chcemy zobaczyć wszystkie wiersze z jednego regału, nawet jeśli nie mają pary w drugim. Do tego służy LEFT JOIN.

Co robi LEFT JOIN

A LEFT JOIN B
zwraca:

  • wszystkie wiersze z lewej tabeli (
    A
    ),
  • dopasowane wiersze z prawej tabeli (
    B
    ),
  • a tam, gdzie brak dopasowania, kolumny z
    B
    wypełnia wartością NULL (pustką).
1SELECT c.nazwisko, w.data_wypozyczenia
2FROM czytelnicy c
3LEFT JOIN wypozyczenia w ON w.czytelnik_id = c.id;

To znaczy: "Pokaż każdego czytelnika, a obok datę jego wypożyczenia - a jeśli nigdy nic nie wypożyczył, zostaw puste miejsce (NULL)".

| nazwisko | data_wypozyczenia | |----------|-------------------| | z Aleksandrii | 0250-03-01 | | Nowicjusz | NULL |

Kiedy go użyć

LEFT JOIN
jest idealny, gdy nie chcemy zgubić wierszy bez pary. Klasyczny przykład: lista czytelników, którzy nic nie wypożyczyli. Przy
INNER JOIN
tacy czytelnicy zniknęliby - bo nie mają wiersza w
wypozyczenia
.

Filtr braku: IS NULL

Skoro brakujące dopasowania dają NULL, możemy je odfiltrować. Aby znaleźć czytelników bez ani jednego wypożyczenia, szukamy pustych odsyłaczy:

1SELECT c.nazwisko
2FROM czytelnicy c
3LEFT JOIN wypozyczenia w ON w.czytelnik_id = c.id
4WHERE w.id IS NULL;

To potężne połączenie:

LEFT JOIN
zachowuje wszystkich, a
WHERE w.id IS NULL
zostawia tylko tych bez pary. Tak samo znajdziemy puste kategorie czy autorów bez książek.

Przejdź do CodeWorlds