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.A LEFT JOIN B zwraca:A),B),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 |
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.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.