Dataczwartek, 13 sierpnia 2026 Czas18:14:51
← Zadania praktyczne

Zadanie 12 (egzaminacyjne): Biuro podróży — filtrowanie i agregacje

Średni

Po co się tego uczymy?

Kolejny krok trudności — łączysz filtrowanie, sortowanie i agregacje w jednym zestawie zadań, tak jak w środkowej części prawdziwego arkusza.

Treść zadania

Scenariusz: Biuro podróży prowadzi rejestr wycieczek i rezerwacji klientów.

Krok 1: Zaimportuj bazę z kodu poniżej.

Krok 2 — zapytania:
1. Pokaż wszystkie wycieczki do krajów europejskich (JOIN + WHERE).
2. Pokaż wycieczki trwające dłużej niż 7 dni, posortowane od najdroższej.
3. Policz łączną liczbę osób zarezerwowanych na każdą wycieczkę (JOIN + SUM).
4. Znajdź klienta, który zarezerwował najwięcej różnych wycieczek.
5. Oblicz łączny przychód biura ze wszystkich rezerwacji (cena wycieczki × liczba osób, zsumowane).
6. Znajdź wycieczki, na które NIKT jeszcze się nie zapisał (LEFT JOIN).

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 6 (wycieczki bez rezerwacji) powinno wskazać dokładnie te wycieczki, których id_wycieczki nie pojawia się w tabeli Rezerwacje — sprawdź to porównując z danymi startowymi z Zadania 6 tego arkusza.

Typowe problemy i jak sobie z nimi poradzić

W zapytaniu 5 łatwo pomylić kolejność działań — najpierw mnożysz cenę przez liczbę osób DLA KAŻDEJ rezerwacji z osobna, dopiero potem sumujesz wszystkie takie iloczyny.

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. zapytanie 1 pokazuje tylko wycieczki do krajów z kontynentu Europa,
2. zapytanie 5 poprawnie mnoży cenę przez liczbę osób DLA KAŻDEJ rezerwacji, dopiero potem sumuje,
3. zapytanie 6 używa LEFT JOIN, żeby znaleźć wycieczki bez żadnej rezerwacji,
4. wszystkie 6 zapytań jest udokumentowanych zrzutem ekranu.

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.

Pobierz plik .sql

CREATE DATABASE IF NOT EXISTS biuro_podrozy;
USE biuro_podrozy;

CREATE TABLE Kraje (
    id_kraju INT AUTO_INCREMENT PRIMARY KEY,
    nazwa VARCHAR(50), kontynent VARCHAR(30)
);
CREATE TABLE Wycieczki (
    id_wycieczki INT AUTO_INCREMENT PRIMARY KEY,
    nazwa VARCHAR(100), id_kraju INT, cena DECIMAL(8,2), liczba_dni INT,
    FOREIGN KEY (id_kraju) REFERENCES Kraje(id_kraju)
);
CREATE TABLE Klienci (
    id_klienta INT AUTO_INCREMENT PRIMARY KEY,
    imie VARCHAR(50), nazwisko VARCHAR(50), email VARCHAR(100) UNIQUE
);
CREATE TABLE Rezerwacje (
    id_rezerwacji INT AUTO_INCREMENT PRIMARY KEY,
    id_klienta INT, id_wycieczki INT, liczba_osob INT, data_rezerwacji DATE,
    FOREIGN KEY (id_klienta) REFERENCES Klienci(id_klienta),
    FOREIGN KEY (id_wycieczki) REFERENCES Wycieczki(id_wycieczki)
);

INSERT INTO Kraje (nazwa, kontynent) VALUES
('Włochy','Europa'), ('Grecja','Europa'), ('Tajlandia','Azja'), ('Egipt','Afryka'), ('Portugalia','Europa');

INSERT INTO Wycieczki (nazwa, id_kraju, cena, liczba_dni) VALUES
('Rzym i Toskania', 1, 2400.00, 7),
('Wyspy Greckie', 2, 3100.00, 10),
('Bangkok i Phuket', 3, 4500.00, 12),
('Kair i Hurghada', 4, 2900.00, 8),
('Lizbona i Porto', 5, 2100.00, 6),
('Sycylia w pełnej krasie', 1, 1900.00, 5);

INSERT INTO Klienci (imie, nazwisko, email) VALUES
('Iga', 'Sokołowska', 'iga.s@gmail.com'), ('Jakub', 'Malinowski', 'jakub.m@wp.pl'),
('Kinga', 'Wieczorek', 'kinga.w@gmail.com'), ('Leon', 'Kwiatkowski', 'leon.k@onet.pl'),
('Maja', 'Jabłońska', 'maja.j@gmail.com');

INSERT INTO Rezerwacje (id_klienta, id_wycieczki, liczba_osob, data_rezerwacji) VALUES
(1,1,2,'2026-01-10'), (2,3,1,'2026-01-12'), (3,2,4,'2026-01-15'),
(4,4,2,'2026-01-18'), (1,5,2,'2026-01-20'), (5,1,1,'2026-01-22'),
(2,6,3,'2026-01-25'), (3,3,2,'2026-01-28');