INF.03 · Bazy danych i SQL
Restauracja Smakosz: JOIN i HAVING
Restauracja rejestruje zamówienia przypisane do stolików. Rachunek stolika to suma cen dań razy ilość, więc potrzebujesz złączeń, sum i warunku na grupę. Sprawdzisz też, kiedy HAVING odrzuca stoliki, a kiedy cały wynik jest pusty.
- około 45 minut
- zadanie w stylu egzaminacyjnym
- baza: restauracja_smakosz
Po tej lekcji: wykonasz komplet zapytań w warunkach egzaminacyjnych i udokumentujesz każde zrzutem ekranu.
1 · Sytuacja
Scenariusz i przygotowanie
Zaimportuj bazę restauracja_smakosz (Stoliki, KategorieDan, Dania, Zamowienia). Wszystkie zamówienia są z jednego wieczoru, 1 marca 2026.
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ż wszystkie zamówienia z 1 marca 2026 razem z nazwą dania i numerem stolika (data zawiera godzinę, więc użyj
DATE(data_zamowienia)).Oczekiwany wynik10 wierszy -
Policz łączny utarg (cena razy ilość) z każdego stolika: numer stolika i kwota.Oczekiwany wynik5 wierszypierwszy wiersz: 1 · 84.00
-
Znajdź stoliki, których łączny rachunek przekroczył 150 zł (
GROUP BYiHAVING).Oczekiwany wynik2 wiersze -
Pokaż najczęściej zamawiane danie według liczby sztuk (jeden wiersz).Oczekiwany wynik1 wierszpierwszy wiersz: Woda mineralna · 6
-
Pokaż dania z kategorii „Dania główne”, które nie zostały zamówione tego wieczoru wcale (
LEFT JOIN).Sprawdź kontrolnie, czy wynik pusty jest poprawny.Oczekiwany wynik0 wierszy -
Oblicz średnią wartość rachunku na stolik (średnia z kwot z zadania 2).Oczekiwany wynik1 wierszpierwszy wiersz: 135.60
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.
Data z godziną
WHERE z.data_zamowienia = '2026-03-01'Zero wierszy: kolumna zawiera też godzinę (na przykład 19:00:00), więc nie równa się samej dacie.
WHERE DATE(z.data_zamowienia) = '2026-03-01'DATE() obcina godzinę.
Sum bez grupowania po stoliku
SELECT s.numer, SUM(...) FROM ... ;Brak GROUP BY: dostajesz jedną sumę dla całej restauracji (albo błąd only_full_group_by).
GROUP BY s.id_stolika, s.numerSuma w grupie wymaga grupowania.
WHERE zamiast HAVING
WHERE SUM(d.cena * z.ilosc) > 150Błąd Invalid use of group function.
HAVING SUM(d.cena * z.ilosc) > 150Warunek na sumę to HAVING.
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ę →