INF.03 · Bazy danych i SQL
Apteka Zdrowie: podzapytania i aktualizacja stanów
Apteka prowadzi rejestr leków i sprzedaży i chce wiedzieć, które leki się kończą. Zadanie łączy proste filtry z podzapytaniem i aktualizacją stanów magazynowych po sprzedaży. Aktualizacja jest tu najważniejsza i najbardziej ryzykowna, więc wykonaj ją według schematu: sprawdź, zmień, sprawdź.
- około 45 minut
- zadanie w stylu egzaminacyjnym
- baza: apteka_zdrowie
Po tej lekcji: wykonasz komplet zapytań w warunkach egzaminacyjnych i udokumentujesz każde zrzutem ekranu.
1 · Sytuacja
Scenariusz i przygotowanie
Zaimportuj bazę apteka_zdrowie (Producenci, KategorieLekow, Leki, Sprzedaz). Pobierzesz ją z sekcji „Pliki do pracy”.
Uwaga: jeśli ta baza istnieje już z wcześniejszej lekcji, usuń ją przed importem (DROP DATABASE apteka_zdrowie;).
2 · Do wykonania
Zapytania do wykonania
Dla każdego zapytania zrób zrzut ekranu. Oczekiwane liczby wierszy podano przy zadaniach, a pełne rozwiązania znajdziesz dopiero po wykonaniu pracy samodzielnie.
-
Pokaż leki, których stan magazynowy jest niższy niż 20 sztuk (nazwa i stan).Oczekiwany wynik2 wiersze
-
Policz łączną liczbę sprzedanych sztuk dla każdego leku (nazwa i suma).Oczekiwany wynik8 wierszy
-
Znajdź lek, który sprzedał się najlepiej pod względem liczby sztuk (jeden wiersz).Oczekiwany wynik1 wierszpierwszy wiersz: Vitaminum C · 5
-
Znajdź kategorię leków o najwyższej średniej cenie (podzapytanie z
AVGiMAXalbo sortowanie zLIMIT 1).Oczekiwany wynik1 wierszpierwszy wiersz: Na alergię · 30.00 -
Zaktualizuj stan magazynowy każdego leku, odejmując sumę sprzedanych sztuk. Najpierw
SELECT, który pokazuje stan po zmianie, potem jedenUPDATEzJOINdo podzapytania.Wykonaj tę zmianę tylko raz. Drugie uruchomienie odejmie sprzedaż jeszcze raz.Oczekiwany wynikzmienionych wierszy: 8 -
Znajdź leki, które nigdy nie zostały sprzedane (
LEFT JOINiIS NULL).Pusty wynik jest tu poprawny, bo każdy lek został sprzedany.Oczekiwany wynik0 wierszy
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
Trzy pułapki w tym zadaniu
Rozwiń każdą z nich.
Powtórzenie UPDATE
Aktualizacja stanów uruchomiona dwa razy.Sprzedaż jest odejmowana dwukrotnie, więc stany są błędne, a niektóre mogą zejść poniżej zera. Bez kopii nie wrócisz do stanu początkowego.
Przed zmianą zapisz stany (`SELECT nazwa, ilosc_magazyn FROM Leki;`), a po zmianie porównaj. Przy pomyłce zaimportuj bazę ponownie.Zmiany zbiorcze wykonuje się raz i z kontrolą.
UPDATE odejmujący przy braku sprzedaży
UPDATE Leki SET ilosc_magazyn = ilosc_magazyn - (SELECT SUM(ilosc) FROM Sprzedaz WHERE id_leku = Leki.id_leku);Dla leku bez sprzedaży podzapytanie zwraca NULL, a stan - NULL daje NULL: stan magazynowy zostaje wyzerowany.
SET ilosc_magazyn = ilosc_magazyn - COALESCE((SELECT SUM(...)), 0)Przy podzapytaniu w UPDATE pilnuj przypadku braku wiersza.
Średnia z zaokrągleniem w ORDER BY
ORDER BY srednia -- sortuje po zaokrąglonej wartości tekstowo?Zaokrąglenie nie zmieni kolejności, ale błędny typ albo alias mogą. Sortuj po wyrażeniu AVG(l.cena).
ORDER BY AVG(l.cena) DESCSortuj po wartości, a nie po jej sformatowanej wersji.
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ć
- Czytaj polecenie jak opis wyniku: kolumny, tabele, warunek, kolejność.
- Złączenia buduj po jednym i kontroluj liczbę wierszy.
- Pusty wynik też może być poprawny, więc sprawdź go kontrolnym zapytaniem.
- Dokumentuj pracę zrzutami i zapisanym plikiem.
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ę →