Zadanie 11 (egzaminacyjne): Siłownia FitZone — podstawy
ŚredniPo co się tego uczymy?
To pierwsze z dziewięciu zadań w konwencji zbliżonej do egzaminu INF.03 — każde kolejne (12-19) będzie nieco trudniejsze i będzie łączyć więcej technik naraz.
Treść zadania
Scenariusz: Siłownia FitZone potrzebuje systemu do zarządzania zajęciami grupowymi.
Krok 1: Zaimportuj bazę z kodu poniżej (utwórz ją i uruchom w phpMyAdmin — 4 tabele: Trenerzy, Zajęcia, Klienci, Zapisy).
Krok 2 — wykonaj zapytania:
1. Pokaż wszystkie zajęcia razem z imieniem i nazwiskiem prowadzącego trenera.
2. Pokaż zajęcia odbywające się po godzinie 17:00.
3. Policz, ilu klientów ma karnet typu "Premium".
4. Pokaż liczbę zapisów na każde zajęcia (JOIN + GROUP BY).
5. Znajdź klienta, który zapisał się na najwięcej różnych zajęć.
Udokumentuj wykonanie zrzutami ekranu każdego zapytania — tak jak wymaga tego prawdziwy egzamin.
Jak zabrać się do zadania
1. Pobierz plik .sql przyciskiem w sekcji "Rozwiązanie" na dole strony.
2. Uruchom Apache i MySQL w XAMPP Control Panel.
3. W phpMyAdmin utwórz pustą bazę danych o podanej nazwie.
4. Kliknij w nazwę tej bazy w lewym panelu, żeby ją wybrać jako aktywną.
5. Przejdź do zakładki "Importuj" (nie "SQL"), kliknij "Wybierz plik", wskaż pobrany plik i kliknij "Wykonaj".
6. Dopiero po potwierdzonym imporcie przejdź do wykonywania zapytań z listy.
Jak powinien wyglądać efekt
Zapytanie 4 (liczba zapisów na zajęcia) powinno zwrócić 5 wierszy — po jednym na każde zajęcia — z różnymi liczbami w zależności od popularności zajęć. Zapytanie 2 (zajęcia po 17:00) powinno wybrać dokładnie te zajęcia, których godzina w danych startowych jest późniejsza niż 17:00:00.
Typowe problemy i jak sobie z nimi poradzić
Zwróć uwagę na klucz główny złożony z trzech kolumn w tabeli Zapisy — to poprawny sposób modelowania sytuacji, w której ten sam klient może zapisać się na te same zajęcia w różnych terminach.
Nawiązanie do egzaminu zawodowego
To zadanie w konwencji egzaminacyjnej ćwiczy jednostkę INF.03.4 jako całość — dokładnie tak wygląda część "Operacje na bazie danych" prawdziwego arkusza części praktycznej egzaminu INF.03 (import/utworzenie bazy, seria zapytań SQL do wykonania i udokumentowania zrzutami ekranu).
Kryteria sukcesu — sprawdź, czy wykonałeś zadanie poprawnie
Po wykonaniu zadania sprawdź, czy:
1. baza silownia_fitzone ma 4 tabele: Trenerzy, Zajecia, Klienci, Zapisy,
2. zapytanie 1 pokazuje nazwiska trenerów, nie same id,
3. zapytanie 3 poprawnie liczy tylko klientów z karnetem Premium,
4. masz zapisany zrzut ekranu dla każdego z 5 zapytań.
Rozwiązanie — gotowa baza danych
Pobierz plik i zaimportuj go w phpMyAdmin przez zakładkę „Importuj” — dokładnie tak, jak wygląda to na prawdziwym egzaminie. Blok kodu poniżej to podgląd zawartości tego samego pliku, przydatny do sprawdzenia struktury bez otwierania go osobno.
CREATE DATABASE IF NOT EXISTS silownia_fitzone;
USE silownia_fitzone;
CREATE TABLE Trenerzy (
id_trenera INT AUTO_INCREMENT PRIMARY KEY,
imie VARCHAR(50), nazwisko VARCHAR(50), specjalizacja VARCHAR(50)
);
CREATE TABLE Zajecia (
id_zajec INT AUTO_INCREMENT PRIMARY KEY,
nazwa VARCHAR(50), id_trenera INT, godzina TIME,
FOREIGN KEY (id_trenera) REFERENCES Trenerzy(id_trenera)
);
CREATE TABLE Klienci (
id_klienta INT AUTO_INCREMENT PRIMARY KEY,
imie VARCHAR(50), nazwisko VARCHAR(50), typ_karnetu VARCHAR(20)
);
CREATE TABLE Zapisy (
id_klienta INT, id_zajec INT, data_zapisu DATE,
PRIMARY KEY (id_klienta, id_zajec, data_zapisu),
FOREIGN KEY (id_klienta) REFERENCES Klienci(id_klienta),
FOREIGN KEY (id_zajec) REFERENCES Zajecia(id_zajec)
);
INSERT INTO Trenerzy (imie, nazwisko, specjalizacja) VALUES
('Karol', 'Baran', 'Siłowe'), ('Monika', 'Sikora', 'Cardio'), ('Rafał', 'Wysocki', 'Joga');
INSERT INTO Zajecia (nazwa, id_trenera, godzina) VALUES
('Trening siłowy', 1, '08:00:00'), ('Spinning', 2, '17:00:00'),
('Joga poranna', 3, '07:00:00'), ('Cardio HIIT', 2, '18:30:00'),
('Stretching', 3, '19:00:00');
INSERT INTO Klienci (imie, nazwisko, typ_karnetu) VALUES
('Adam', 'Głowacki', 'Premium'), ('Beata', 'Sadowska', 'Standard'),
('Cezary', 'Urban', 'Premium'), ('Diana', 'Wróbel', 'Standard'),
('Emil', 'Zawadzki', 'Standard'), ('Fabian', 'Górecki', 'Premium');
INSERT INTO Zapisy (id_klienta, id_zajec, data_zapisu) VALUES
(1,1,'2026-03-01'), (1,2,'2026-03-02'), (2,3,'2026-03-01'), (3,1,'2026-03-01'),
(3,4,'2026-03-03'), (4,3,'2026-03-02'), (5,2,'2026-03-01'), (6,1,'2026-03-04'),
(6,5,'2026-03-04'), (2,4,'2026-03-05');