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.

  1. 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
  2. Policz łączny utarg (cena razy ilość) z każdego stolika: numer stolika i kwota.
    Oczekiwany wynik5 wierszypierwszy wiersz: 1 · 84.00
  3. Znajdź stoliki, których łączny rachunek przekroczył 150 zł (GROUP BY i HAVING).
    Oczekiwany wynik2 wiersze
  4. Pokaż najczęściej zamawiane danie według liczby sztuk (jeden wiersz).
    Oczekiwany wynik1 wierszpierwszy wiersz: Woda mineralna · 6
  5. 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
  6. 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.

Ta interakcja wymaga włączonego JavaScriptu.

4 · Zanim się pomylisz

Trzy pułapki w tym zadaniu

Rozwiń każdą z nich.

Data z godziną
Tak nie
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.

Tak
WHERE DATE(z.data_zamowienia) = '2026-03-01'

DATE() obcina godzinę.

Sum bez grupowania po stoliku
Tak nie
SELECT s.numer, SUM(...) FROM ... ;

Brak GROUP BY: dostajesz jedną sumę dla całej restauracji (albo błąd only_full_group_by).

Tak
GROUP BY s.id_stolika, s.numer

Suma w grupie wymaga grupowania.

WHERE zamiast HAVING
Tak nie
WHERE SUM(d.cena * z.ilosc) > 150

Błąd Invalid use of group function.

Tak
HAVING SUM(d.cena * z.ilosc) > 150

Warunek 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ć

  1. Czytaj polecenie jak opis wyniku: kolumny, tabele, warunek, kolejność.
  2. Złączenia buduj po jednym i kontroluj liczbę wierszy.
  3. Pusty wynik też może być poprawny, więc sprawdź go kontrolnym zapytaniem.
  4. 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ę →
Źródła i dalsza nauka