Zadanie 8: Wypożyczalnia filmów — zapytania JOIN
ŚredniPo co się tego uczymy?
Cztery tabele w tej bazie mają sens dopiero razem — czas połączyć je zapytaniami JOIN.
Treść zadania
Pracujesz na bazie wypozyczalnia_filmow.
1. Pokaż imię, nazwisko klienta oraz tytuł wypożyczonego przez niego filmu dla każdego wypożyczenia.
2. Pokaż tytuł filmu razem z nazwą jego gatunku.
3. Pokaż filmy, które nigdy nie zostały wypożyczone (LEFT JOIN + IS NULL).
4. Pokaż klientów razem z liczbą filmów, które aktualnie mają niezwrócone (JOIN + WHERE data_zwrotu IS NULL + GROUP BY).
5. Pokaż, ile razy każdy gatunek filmowy został wypożyczony (JOIN trzech tabel: Gatunki, Filmy, Wypozyczenia + GROUP BY + COUNT).
Jak zabrać się do zadania
1. Narysuj na kartce, które tabele łączysz i po jakich kolumnach — przy trzech tabelach (punkt 5) łatwo się pogubić.
2. Dodawaj złączenia pojedynczo: napisz JOIN dwóch tabel, sprawdź wynik, dopiero potem dołóż kolejną.
3. W pytaniu 3 (filmy nigdy niewypożyczone) pamiętaj o LEFT JOIN zamiast INNER JOIN.
Jak powinien wyglądać efekt
Zapytanie 4 powinno pokazać tylko klientów, którzy mają aktualnie NIEZWRÓCONE wypożyczenie (sprawdź w danych z Zadania 6, którzy klienci mają data_zwrotu ustawione na NULL) — nie wszyscy ośmiu klienci powinni się w wyniku pojawić.
Typowe problemy i jak sobie z nimi poradzić
Częsty błąd to zapomnienie warunku ON przy łączeniu trzeciej tabeli w zapytaniu 5 — każdy kolejny JOIN potrzebuje własnego ON.
Nawiązanie do egzaminu zawodowego
Realizuje efekt INF.03.4.4 w zakresie łączenia danych z wielu tabel — jeden z najczęściej sprawdzanych elementów części praktycznej egzaminu.
Kryteria sukcesu — sprawdź, czy wykonałeś zadanie poprawnie
Po wykonaniu zadania sprawdź, czy:
1. zapytanie 1 pokazuje nazwiska klientów i tytuły filmów, a nie same identyfikatory liczbowe,
2. zapytanie 3 (filmy nigdy niewypożyczone) używa LEFT JOIN,
3. zapytanie 4 pokazuje tylko klientów z aktualnie niezwróconymi filmami,
4. zapytanie 5 poprawnie liczy wypożyczenia w podziale na gatunek (JOIN trzech tabel + GROUP BY).