Lekcja 1. Bazy danych do ćwiczeń — 5 kompletów + zapytania
ŚredniPo co się tego uczymy?
Żeby uczeń miał gotowe, działające bazy danych do ćwiczeń w XAMPP i nie tracił czasu na przepisywanie tabel. Każdy zestaw jest małym, realistycznym systemem.
Teoria
To jest zestaw baz danych do samodzielnych ćwiczeń w domu i na lekcji. Każda baza ma gotowe tabele, klucze obce i dane testowe, dzięki czemu możesz od razu ćwiczyć SELECT, JOIN, agregacje, grupowanie, aktualizacje i proste operacje administracyjne.
Import w XAMPP/phpMyAdmin: pobierz plik, wejdź w phpMyAdmin, wybierz zakładkę Importuj i wskaż pobrany plik. Pliki są spakowane jako .gz, a phpMyAdmin przyjmuje je bez rozpakowywania. Jeżeli po pobraniu nazwa wygląda np. szkolny_sklep.sql_.gz i import nie przejdzie, zmień nazwę na szkolny_sklep.sql.gz.
Przykład z życia
Szkolny sklepik
Zakres: zamówienia, klienci, produkty, kategorie i pozycje zamówień.
Pobierz bazę: szkolny_sklep.sql_.gz
- Wyświetl wszystkie produkty z ceną większą niż 4 zł.
- Wyświetl produkty z kategorii „Artykuły szkolne”.
- Policz, ile produktów znajduje się w każdej kategorii.
- Pokaż łączną wartość magazynu dla każdego produktu (`cena * stan`).
- Wyświetl zamówienia razem z imieniem, nazwiskiem i klasą klienta.
- Policz wartość każdego zamówienia na podstawie pozycji.
- Pokaż trzy najdroższe produkty.
- Wyświetl klientów, którzy złożyli więcej niż jedno zamówienie.
- Pokaż produkty, których stan magazynowy jest mniejszy niż 25.
- Wyświetl zamówienia z dnia 2026-03-07.
- Pokaż sumę sprzedaży według statusu zamówienia.
- Wyświetl nazwy produktów, które pojawiły się w zamówieniach.
- Policz, ile sztuk każdego produktu sprzedano.
- Pokaż zamówienia anulowane wraz z nazwiskiem klienta.
- Wyświetl klientów bez zamówień.
- Znajdź najczęściej kupowany produkt.
- Pokaż średnią cenę produktów w każdej kategorii.
- Wyświetl produkty posortowane według kategorii i ceny malejąco.
- Pokaż klasy, które wygenerowały największą wartość zakupów.
- Dodaj zapytanie aktualizujące stan produktu po sprzedaży 2 sztuk wody.
Wypożyczalnia gier
Zakres: gry, platformy, klienci, wypożyczenia i zwroty.
Pobierz bazę: wypozyczalnia_gier.sql_.gz
- Wyświetl wszystkie gry razem z nazwą platformy.
- Pokaż gry aktualnie niedostępne.
- Wyświetl wypożyczenia niezwrócone.
- Policz liczbę gier na każdej platformie.
- Pokaż średnią cenę wypożyczenia za dzień według platform.
- Wyświetl klientów i liczbę ich wypożyczeń.
- Pokaż wypożyczenia po terminie, przyjmując datę 2026-04-15.
- Oblicz liczbę dni opóźnienia dla zwróconych po terminie gier.
- Pokaż sumę opłat każdego klienta.
- Wyświetl gry z gatunku „Wyścigi”.
- Pokaż najdroższą grę do wypożyczenia.
- Wyświetl klientów bez zaległych opłat.
- Pokaż gry wypożyczone przez Jana Kowalskiego.
- Policz liczbę wypożyczeń według gatunku gry.
- Wyświetl wypożyczenia wraz z kwotą przypisanej opłaty.
- Znajdź klientów, którzy wypożyczali grę więcej niż raz.
- Pokaż gry wydane po 2020 roku.
- Wyświetl opłaty nieopłacone.
- Przygotuj zapytanie zmieniające `dostepna` na 1 po zwrocie gry o id 3.
- Dodaj nowe wypożyczenie i sprawdź, czy gra powinna stać się niedostępna.
Przychodnia
Zakres: pacjenci, lekarze, specjalizacje, wizyty i recepty.
Pobierz bazę: przychodnia.sql_.gz
- Wyświetl lekarzy razem z nazwą specjalizacji.
- Pokaż wizyty zaplanowane.
- Pokaż wizyty zakończone z rozpoznaniem.
- Wyświetl pacjentów z Poznania.
- Policz liczbę lekarzy w każdej specjalizacji.
- Policz liczbę wizyt każdego lekarza.
- Wyświetl wizyty z receptami.
- Pokaż pacjentów, którzy mają więcej niż jedną wizytę.
- Wyświetl wizyty z dnia 2026-05-12.
- Pokaż lekarzy bez zaplanowanych wizyt.
- Policz wizyty według statusu.
- Wyświetl pacjentów urodzonych po 2000 roku.
- Pokaż recepty refundowane.
- Wyświetl terminy wizyt pacjenta Tomasza Kani.
- Pokaż najbliższe 3 wizyty według terminu.
- Wyświetl specjalizacje, do których przypisano co najmniej jedną wizytę.
- Pokaż pacjentów bez recept.
- Zmień status wizyty odwołanej na zaplanowaną.
- Dodaj nową receptę do wybranej zakończonej wizyty.
- Usuń pacjenta tylko wtedy, gdy nie ma żadnej wizyty — zapisz najpierw zapytanie sprawdzające.
Liga szkolna
Zakres: drużyny, zawodnicy, mecze, bramki i tabela wyników.
Pobierz bazę: liga_szkolna.sql_.gz
- Wyświetl zawodników każdej drużyny.
- Pokaż mecze z nazwami gospodarza i gościa.
- Policz liczbę bramek każdego zawodnika.
- Wyświetl klasy i liczbę drużyn w każdej klasie.
- Pokaż mecze zakończone remisem.
- Pokaż mecze, w których gospodarze zdobyli więcej niż 2 gole.
- Policz liczbę bramek każdej drużyny na podstawie tabeli `bramki`.
- Znajdź króla strzelców.
- Pokaż bramki strzelone po 60. minucie.
- Wyświetl drużyny bez zwycięstwa jako gospodarz.
- Pokaż zawodników z numerem większym niż 9.
- Policz średnią liczbę goli gospodarzy.
- Wyświetl mecze posortowane od najbardziej bramkowych.
- Pokaż zawodników, którzy strzelili co najmniej 2 gole.
- Policz liczbę meczów każdej drużyny jako gospodarz.
- Wyświetl terminarz z datami i parami drużyn.
- Pokaż bramki drużyny „Orły”.
- Dodaj nową drużynę i trzech zawodników.
- Zmień wynik wybranego meczu.
- Usuń bramkę wpisaną pomyłkowo i sprawdź ponownie klasyfikację strzelców.
Hotel praktykant
Zakres: pokoje, goście, rezerwacje, usługi dodatkowe i płatności.
Pobierz bazę: hotel_praktykant.sql_.gz
- Wyświetl wszystkie pokoje posortowane według ceny.
- Pokaż rezerwacje razem z nazwiskiem gościa i numerem pokoju.
- Policz liczbę rezerwacji dla każdego pokoju.
- Oblicz liczbę dób każdej rezerwacji.
- Oblicz koszt noclegu każdej rezerwacji (`liczba dób * cena_doba`).
- Pokaż usługi wykupione do każdej rezerwacji.
- Oblicz koszt usług dla każdej rezerwacji.
- Pokaż łączny koszt rezerwacji: nocleg + usługi.
- Wyświetl rezerwacje bez pełnej płatności.
- Pokaż gości, którzy rezerwowali więcej niż raz.
- Wyświetl pokoje wolne w dniu 2026-06-11.
- Pokaż rezerwacje potwierdzone.
- Policz przychód według metody płatności.
- Pokaż najdroższą usługę.
- Wyświetl pokoje na 2. piętrze.
- Pokaż średnią cenę doby według typu pokoju.
- Znajdź rezerwację o najwyższym łącznym koszcie usług.
- Dodaj nową usługę „Obiad” i przypisz ją do wybranej rezerwacji.
- Zmień status rezerwacji `nowa` na `potwierdzona`.
- Usuń usługę z rezerwacji i ponownie policz jej koszt.
Przykład importu i pierwszego zapytania
USE szkolny_sklep;
SELECT p.nazwa, k.nazwa AS kategoria, p.cena, p.stan
FROM produkty p
JOIN kategorie k ON k.id = p.kategoria_id
ORDER BY k.nazwa, p.cena DESC;
Komentarz i wyjaśnienie kodu
Każda baza zaczyna się od DROP DATABASE IF EXISTS i CREATE DATABASE, więc najlepiej importować ją jako osobny zestaw ćwiczeniowy. Zapytania są ułożone od prostego filtrowania po łączenie tabel, agregacje i modyfikację danych.
Ćwiczenie samodzielne
Wybierz jedną bazę, zaimportuj ją, wykonaj pierwsze 5 zapytań, a potem zapisz zrzuty wyników albo plik tekstowy z poleceniami SQL.
Zadania do pracy własnej
Zaimportuj bazę
szkolny_sklepi wykonaj zapytania 1–5.Wybierz dowolną bazę i wykonaj zapytania 6–15. Zwróć uwagę na aliasy tabel i funkcje agregujące.
Wybierz dwie bazy i wykonaj zapytania 16–20. Tam pojawiają się aktualizacje, usuwanie, sprawdzanie zależności i bardziej egzaminacyjny sposób myślenia.
Typowe błędy
- Importowanie kilku baz naraz bez sprawdzenia, która jest aktualnie wybrana w phpMyAdmin.
- Brak aliasów przy zapytaniach z kilkoma tabelami.
- Mylenie warunku połączenia
ONz filtremWHERE.
Nawiązanie do egzaminu zawodowego
To bezpośrednio ćwiczy INF.03: projektowanie relacji, import bazy, zapytania wybierające, łączenie tabel, grupowanie danych oraz proste operacje DML.