Po tej lekcji potrafisz
Użyć LEFT JOIN do pokazania kategorii bez książek.
LEFT JOIN zachowuje każdy wiersz lewej tabeli. Gdy nie ma dopasowania z prawej strony, jej kolumny w wyniku mają NULL. To pozwala policzyć również puste kategorie. COUNT(b.id) nie liczy NULL, natomiast COUNT(*) policzyłby wiersz reprezentujący pustą kategorię jako jeden.
SELECT k.id, k.nazwa, COUNT(b.id) AS liczba FROM kategorie AS k LEFT JOIN ksiazki AS b ON b.kategoria_id = k.id GROUP BY k.id, k.nazwa ORDER BY k.id;Wynik: Web 3, Bazy danych 2, Sieci 1, Robotyka 0. Gdy filtrujesz prawą tabelę w WHERE, możesz odrzucić puste dopasowania i niechcący zmienić sens LEFT JOIN. Warunek ograniczający dopasowywane książki często powinien znajdować się w ON.
Teraz Twoja kolej
Pokaż wyłącznie nazwy kategorii, które nie mają żadnej książki.
Sprawdź rozwiązanie i oczekiwany efekt
SELECT k.nazwa FROM kategorie AS k LEFT JOIN ksiazki AS b ON b.kategoria_id = k.id WHERE b.id IS NULL;Jedyny wynik to Robotyka. Sprawdzamy b.id, bo klucz główny istniejącej książki nie może być NULL.
Na co uważać
W raporcie wypożyczeń ta sama książka może mieć kilka pasujących wierszy. JOIN nie gwarantuje jednego wiersza na książkę — wynika to z relacji danych.
Zanim przejdziesz dalej: wykonaj ćwiczenie samodzielnie i dopiero wtedy oznacz lekcję jako ukończoną. Oznaczenie zapisuje Twój postęp, nie jest oceną nauczyciela.