INF.03 · Bazy danych i SQL
Wypożyczalnia filmów, część 3: zapytania JOIN
Cztery tabele tej bazy mają sens dopiero razem. Sam numer klienta i numer filmu w tabeli wypożyczeń niczego nie mówi człowiekowi. Połączysz je zapytaniami JOIN, a przy okazji zobaczysz, że wynik pusty też bywa poprawną odpowiedzią.
- około 40 minut
- INNER JOIN · LEFT JOIN · GROUP BY
- trzy tabele naraz
Po tej lekcji: napiszesz złączenia dwóch i trzech tabel, LEFT JOIN z IS NULL oraz zestawienie z grupowaniem.
1 · Sytuacja
Raporty z czterech tabel
Pracujesz na wypozyczalnia_filmow. Narysuj na kartce, które tabele łączysz i po jakich kolumnach: przy trzech tabelach łatwo się pogubić. Dodawaj złączenia po jednym: napisz JOIN dwóch tabel, sprawdź wynik i dopiero wtedy dołóż następną.
Pytanie 3 (filmy nigdy niewypożyczone) wymaga LEFT JOIN. Sprawdź wynik i zastanów się, czy pusty wynik jest prawidłowy.
2 · Do wykonania
Zadania do wykonania
-
Pokaż imię i nazwisko klienta oraz tytuł wypożyczonego filmu dla każdego wypożyczenia.Oczekiwany wynik15 wierszy
-
Pokaż tytuł filmu razem z nazwą jego gatunku.Oczekiwany wynik12 wierszy
-
Pokaż filmy, które nigdy nie zostały wypożyczone (
LEFT JOINiIS NULL).Sprawdź, czy wynik pusty jest tu poprawny: porównaj z tabelą wypożyczeń.Oczekiwany wynik0 wierszy -
Pokaż klientów razem z liczbą filmów, które aktualnie mają niezwrócone.Oczekiwany wynik4 wiersze
-
Pokaż, ile razy każdy gatunek został wypożyczony (trzy tabele i
GROUP BY).Oczekiwany wynik5 wierszypierwszy wiersz: Akcja · 5
3 · Sprawdź się
Czy Twoje wyniki się zgadzają?
To szybka kontrola, a nie ocena. Liczba wierszy jest pierwszym sygnałem, że warunek albo złączenie działa tak, jak trzeba.
4 · Zanim się pomylisz
Cztery pomyłki w złączeniach
Rozwiń każdą z nich.
Wynik pusty uznany za błąd
-- „na pewno jest jakiś niewypożyczony film”W tej bazie każdy z 12 filmów był wypożyczony co najmniej raz, więc zapytanie zwraca 0 wierszy. To poprawny wynik.
Sprawdź kontrolnie: SELECT COUNT(DISTINCT id_filmu) FROM Wypozyczenia; (12).Zanim uznasz zapytanie za błędne, zweryfikuj dane.
INNER JOIN zamiast LEFT JOIN
FROM Filmy f JOIN Wypozyczenia w ON ...
WHERE w.id_wypozyczenia IS NULLZawsze pusty wynik, bo INNER JOIN gubi wiersze bez dopasowania.
FROM Filmy f LEFT JOIN Wypozyczenia w ON ...
WHERE w.id_wypozyczenia IS NULLSzukasz braku dopasowania, więc potrzebujesz LEFT JOIN.
Filtr zwrotu w złym miejscu
WHERE w.data_zwrotu = NULLZero wierszy.
WHERE w.data_zwrotu IS NULLIS NULL, nie = NULL.
Zła kolumna w ON
ON w.id_filmu = g.id_gatunkuŁączysz numer filmu z numerem gatunku i wynik jest bez sensu.
ON f.id_gatunku = g.id_gatunkuKlucz obcy łącz z kluczem głównym, który mu odpowiada.
5 · Sprawdź sam siebie
Zanim oddasz pracę
Ta lista odpowiada temu, co sprawdza komisja egzaminacyjna: poprawną bazę, poprawne wyniki i dokumentację.
Podsumowanie
Co warto zapamiętać
- Przy trzech tabelach łącz po jednej i sprawdzaj wynik.
- Brak dopasowania znajdziesz przez
LEFT JOINiIS NULL. - Pusty wynik może być poprawną odpowiedzią.
- Suma z grup powinna zgadzać się z liczbą wszystkich wypożyczeń.
Dalej na swoim koncie
Rozgrzewki, quiz i zadania są w biurku ucznia.
Teoria jest otwarta dla wszystkich. Żeby rozwiązywać zadania, zapisywać szkice i widzieć swój postęp, zaloguj się.
Zaloguj się →