INF.03: zapytania SQL z rozwiązaniami
Kwerendy to najszybsze punkty w części praktycznej egzaminu INF.03. Arkusz prosi zwykle o cztery zapytania do przygotowanej bazy: wybór danych z warunkiem, policzenie czegoś w grupach, połączenie dwóch tabel i zmianę danych. Zapisujesz je w pliku kwerendy.txt, uruchamiasz i robisz zrzuty ekranu wyników.
Na tej stronie znajdziesz schemat takich kwerend, przykłady z rozwiązaniami i listę błędów, przez które najłatwiej stracić punkt. Wszystko przećwiczysz w kursie INF.03: kwerendy SQL: zapytania piszesz w przeglądarce, bez instalowania MySQL i bez konta, a wynik sprawdza się automatycznie.
Ćwicz kwerendy INF.03 w przeglądarce
Cztery typy kwerend z arkusza INF.03
| Typ kwerendy | Czego dotyczy | Kluczowe słowa |
|---|---|---|
| 1. Wybór danych | kolumny z warunkiem, sortowanie | SELECT, WHERE, ORDER BY, LIKE, LIMIT |
| 2. Obliczenia | liczba, suma, średnia, w grupach | COUNT, SUM, AVG, MAX, GROUP BY, HAVING |
| 3. Dwie tabele | dane połączone kluczem obcym | JOIN ... ON |
| 4. Zmiana | nowy rekord, poprawka, usunięcie, nowa kolumna | INSERT, UPDATE, DELETE, ALTER TABLE |
Kolejność w arkuszu bywa różna, ale te cztery typy powtarzają się sesja po sesji.
Kwerendy wybierające: SELECT, WHERE, ORDER BY
Tabela wycieczki biura podróży: id, cel, kraj, dni, cena, dostepna.
Zadanie 1. Wyświetl cel i cenę wycieczek do Włoch.
SELECT cel, cena
FROM wycieczki
WHERE kraj = 'Włochy'; Zadanie 2. Wyświetl cel, liczbę dni i cenę wycieczek dostępnych w sprzedaży, od najdroższej.
SELECT cel, dni, cena
FROM wycieczki
WHERE dostepna = 1
ORDER BY cena DESC; Zadanie 3. Wyświetl trzy najtańsze wycieczki.
SELECT cel, cena
FROM wycieczki
ORDER BY cena
LIMIT 3; Polecenie mówi, które kolumny i w jakiej kolejności mają być w wyniku. Gwiazdka SELECT * zamiast wymienionych kolumn to częsty powód utraty punktu.
Funkcje agregujące i GROUP BY
Tabela produkty sklepu: id, nazwa, kategoria, cena, stan.
Zadanie 4. Policz produkty z kategorii owoce.
SELECT COUNT(*) AS liczba
FROM produkty
WHERE kategoria = 'owoce'; Zadanie 5. Dla każdej kategorii podaj łączny stan magazynowy.
SELECT kategoria, SUM(stan) AS razem
FROM produkty
GROUP BY kategoria; Zadanie 6. Pokaż tylko kategorie, w których są więcej niż dwa produkty.
SELECT kategoria, COUNT(*) AS liczba
FROM produkty
GROUP BY kategoria
HAVING COUNT(*) > 2; WHERE filtruje pojedyncze wiersze przed grupowaniem, a HAVING całe grupy po policzeniu. Gdy arkusz podaje nazwę kolumny wyniku (np. “jako liczba”), nadaj ją aliasem AS.
Łączenie tabel: JOIN
Biblioteka: tabela autorzy (id, imie, nazwisko) i tabela ksiazki (id, tytul, rok, gatunek, autor_id). Kolumna autor_id to klucz obcy wskazujący autora.
Zadanie 7. Dla każdej książki podaj tytuł i nazwisko autora.
SELECT ksiazki.tytul, autorzy.nazwisko
FROM ksiazki
JOIN autorzy ON ksiazki.autor_id = autorzy.id; Zadanie 8. Policz książki każdego autora.
SELECT autorzy.nazwisko, COUNT(*) AS liczba_ksiazek
FROM ksiazki
JOIN autorzy ON ksiazki.autor_id = autorzy.id
GROUP BY autorzy.id, autorzy.nazwisko; W warunku ON porównujesz klucz obcy z kluczem głównym. Pominięcie ON (albo złe kolumny) daje iloczyn kartezjański: każdy wiersz z każdym, czyli wynik wielokrotnie za duży.
Zmiana danych i struktury: INSERT, UPDATE, DELETE, ALTER
Hotel: tabela klienci i tabela rezerwacje.
Zadanie 9. Dodaj rezerwację: klient o id 3, pokój 305, 2 noce po 260 zł.
INSERT INTO rezerwacje (id, klient_id, pokoj, noce, cena_noc)
VALUES (6, 3, 305, 2, 260); Zadanie 10. Klientka o id 2 przeprowadziła się do Wrocławia.
UPDATE klienci
SET miasto = 'Wrocław'
WHERE id = 2; Zadanie 11. Usuń rezerwacje na mniej niż trzy noce.
DELETE FROM rezerwacje
WHERE noce < 3; Zadanie 12. Dodaj do tabeli klientów kolumnę na adres e-mail.
ALTER TABLE klienci ADD COLUMN email VARCHAR(50); UPDATE i DELETE bez WHERE zmieniają albo usuwają wszystkie wiersze tabeli. Na egzaminie to zwykle oznacza zepsutą bazę i stracone punkty w dalszej części arkusza.
Najczęstsze błędy w kwerendach INF.03
- Inne kolumny w wyniku niż w poleceniu albo inna ich kolejność.
- Brak aliasu, gdy arkusz podaje nazwę kolumny wyniku (
AS liczba). - Tekst w warunku bez apostrofów:
WHERE kraj = Włochyzamiast'Włochy'. UPDATElubDELETEbezWHERE.JOINbez warunkuONalbo z porównaniem złych kolumn.- Sortowanie rosnące zamiast malejącego: zapomniane
DESC. - Kwerenda poprawna, ale brak zrzutu ekranu wyniku.
Ćwicz w przeglądarce: kurs INF.03 kwerendy SQL
Kurs INF.03: kwerendy SQL ma sześć tematów: kwerendy wybierające, funkcje agregujące, łączenie tabel, zmianę danych i tabel oraz dwa arkusze próbne po cztery kwerendy (kwiaciarnia i kino). Każde zadanie sprawdza się automatycznie: piszesz zapytanie, klikasz Uruchom i od razu widzisz wynik oraz to, czy jest poprawny. Bazę możesz w każdej chwili przywrócić do danych startowych.
Zapytania uruchamiają się w SQLite w przeglądarce, bez instalacji i bez konta. Na egzaminie pracujesz na MySQL lub MariaDB, dlatego wszystkie zapytania w kursie są dobrane tak, żeby dawały identyczny wynik w obu silnikach, co test sprawdza automatycznie przy każdej zmianie treści. Czym SQLite różni się od MySQL poza egzaminacyjnymi kwerendami (typy, AUTO_INCREMENT, daty, użytkownicy), pokazuje kurs SQLite: podstawy i różnice względem MySQL.
Zapytania wywoływane z PHP, na bazie MariaDB (zgodnej z MySQL) uruchamianej w karcie przeglądarki, ćwiczysz bez logowania w kursie PHP i MySQL: strony z bazą danych. Więcej o SQL w BitWizards: zadania SQL online.
Dla nauczycieli
Kurs kwerend możesz przydzielić klasie razem z pozostałymi kursami pod INF.03 (HTML i CSS, PHP, JavaScript). Widzisz zaliczenia zadań, statystyki klasy i przebieg pisania zapytań, a egzamin próbny z limitem czasu ułożysz z zadań arkuszy. BitWizards jest darmowy dla szkół - jak zacząć.