Powrót
Bazy danych na maturę 2026 – SQL SELECT/WHERE/JOIN na typowych arkuszach | MaturaMinds
Bazy danych na maturę 2026 – SQL SELECT/WHERE/JOIN na typowych arkuszach | MaturaMinds
Krótki opis: Opanuj zapytania SQL w kontekście zadań maturalnych. MaturaMinds tłumaczy krok po kroku i ćwiczy na przykładach.
Długi opis: MaturaMinds uczy SQL na maturę 2026: SELECT, WHERE, JOIN, sortowanie i grupowanie. Praktyczne zadania z arkuszy oraz porady, by uniknąć błędów na egzamin maturalny z informatyki.
Dlaczego SQL na maturze z informatyki (2026) jest tak ważny?
Bazy danych i język SQL to obowiązkowy element egzaminu maturalnego z informatyki. W zadaniach pojawiają się typowe operacje: SELECT, WHERE, JOIN, ORDER BY, GROUP BY, HAVING, COUNT, SUM, AVG, czasem też LIKE, IN, BETWEEN czy DISTINCT. Umiejętność czytania polecenia, rozumienia relacji między tabelami i precyzyjnego pisania warunków to klucz do zdobycia punktów. Ten przewodnik to Twoje kompletne, praktyczne kompendium: dużo przykładów, wyjaśnień krok po kroku, wskazówek egzaminacyjnych i zadań do samodzielnej pracy.
Tip: W zadaniach maturalnych liczy się poprawność logiczna i czytelność. Dodawaj aliasy, komentuj myślenie w głowie, a przed wysłaniem odpowiedzi sprawdź warunki brzegowe (NULL, duplikaty, zakresy dat).
Co musisz umieć z SQL na maturę 2026 (zakres)
- Model relacyjny: tabele, wiersze, kolumny, klucze (PK/FK).
- SELECT: wybór kolumn, aliasy (
AS), funkcje agregujące. - WHERE: warunki logiczne, operatory (
=,<>,<,>,< =,>=,AND,OR,NOT), LIKE, IN, BETWEEN, IS NULL. - JOIN: INNER JOIN, LEFT JOIN (czasem RIGHT JOIN), łączenie wielu tabel, prawidłowe użycie kluczy obcych.
- ORDER BY i LIMIT: sortowanie rosnąco/malejąco, ograniczanie wyników.
- GROUP BY i HAVING: agregacja, filtrowanie grup, COUNT(DISTINCT …).
- Podzapytania:
IN,EXISTS, wyrażenia skalarne wSELECT/WHERE. - Drobne pułapki: aliasy, rozróżnianie
WHEREvsHAVING, filtrowanie po agregacji, daty i godziny.
Jeśli chcesz przerobić pełny moduł przygotowujący do matury z informatyki (w tym bazy danych i SQL), sprawdź nasz kurs InformatykaInformatyka oraz jego modułowy programmodułowy program. Do nauki polecamy też nasze NotatkiNotatki, MaturAIMaturAI i Arkusze maturalneArkusze maturalne.
Minimalna teoria – model relacyjny i klucze
W relacyjnej bazie danych mamy tabele powiązane relacjami. W każdej tabeli jest klucz główny (PK) – unikalny identyfikator wiersza – oraz klucze obce (FK), które wskazują na rekordy w innych tabelach. Na maturze często łączysz tabele po FK, np. zamowienie.klient_id = klient.id.
Pułapka egzaminacyjna: Nie łącz tabel po polach opisowych (np.
nazwa), jeśli w schemacie jest do tego klucz obcy. Pola tekstowe mogą się powtarzać.
Schemat ćwiczebny: „SklepMatura”
Na potrzeby przykładów użyjemy mini-bazy „SklepMatura”. Znasz ją już po kilku minutach i możesz powtarzać wszystkie typy zapytań, które pojawiają się w typowych arkuszach.
Tabele:
- klient:
id (PK),imie,miasto - zamowienie:
id (PK),klient_id (FK),data,wartosc,status - produkt:
id (PK),nazwa,kategoria,cena_brutto - pozycja:
id (PK),zamowienie_id (FK),produkt_id (FK),ilosc,cena_brutto
Definicje (DDL)
CREATE TABLE klient (
id INT PRIMARY KEY,
imie VARCHAR(50),
miasto VARCHAR(50)
);
CREATE TABLE zamowienie (
id INT PRIMARY KEY,
klient_id INT,
data DATE,
wartosc DECIMAL(10,2),
status VARCHAR(20),
FOREIGN KEY (klient_id) REFERENCES klient(id)
);
CREATE TABLE produkt (
id INT PRIMARY KEY,
nazwa VARCHAR(100),
kategoria VARCHAR(50),
cena_brutto DECIMAL(10,2)
);
CREATE TABLE pozycja (
id INT PRIMARY KEY,
zamowienie_id INT,
produkt_id INT,
ilosc INT,
cena_brutto DECIMAL(10,2),
FOREIGN KEY (zamowienie_id) REFERENCES zamowienie(id),
FOREIGN KEY (produkt_id) REFERENCES produkt(id)
);Uwaga do matury: Schemat relacji zazwyczaj jest podany w treści zadania. Przepisz zależności FK, zanim zaczniesz pisać JOIN – to skraca czas i zmniejsza błędy.
SELECT i aliasy – czytelność to punkty
SELECT wybiera kolumny. Używaj aliasów kolumn i tabel, by wynik był czytelny i by łatwo rozróżniać kolumny o tych samych nazwach w różnych tabelach.
SELECT p.nazwa AS produkt, p.kategoria, p.cena_brutto AS cena
FROM produkt AS p;AS produktsprawia, że w wynikach zobaczysz nagłówek produkt zamiast nazwa.- Alias tabeli
pskraca zapis w JOIN-ach.
WHERE – filtrowanie dokładnie według polecenia
W WHERE filtrujesz rekordy przed agregacją. Typowe operacje:
-- ceny powyżej 50 zł
SELECT p.nazwa, p.cena_brutto
FROM produkt AS p
WHERE p.cena_brutto > 50;
-- produkty z kategorii „Napój” lub „Słodycze”
SELECT p.nazwa
FROM produkt AS p
WHERE p.kategoria IN ('Napój', 'Słodycze');
-- produkty zawierające 'kola' (bez rozróżniania wielkości liter zależnie od bazy)
SELECT p.nazwa
FROM produkt AS p
WHERE p.nazwa LIKE '%kola%';
-- zamówienia z 2025 roku
SELECT z.id, z.data, z.wartosc
FROM zamowienie AS z
WHERE z.data BETWEEN '2025-01-01' AND '2025-12-31';
-- brak przypisanego miasta (sprawdzaj NULL!)
SELECT *
FROM klient AS k
WHERE k.miasto IS NULL;Częsty błąd:
= NULLnigdy nie zadziała. Zawsze używajIS NULLlubIS NOT NULL.
JOIN – łączenie tabel po kluczach
Najczęściej użyjesz INNER JOIN (wspólne rekordy) lub LEFT JOIN (wszystkie z lewej + dopasowane z prawej). Na maturze uwielbiają pytania „pokaż klientów bez zamówień” – to LEFT JOIN + WHERE z.id IS NULL.
-- Klienci i ich zamówienia (tylko ci, którzy mają zamówienia)
SELECT k.imie, z.id AS zamowienie_id, z.wartosc
FROM klient AS k
JOIN zamowienie AS z
ON z.klient_id = k.id;
-- Klienci bez żadnych zamówień
SELECT k.imie
FROM klient AS k
LEFT JOIN zamowienie AS z
ON z.klient_id = k.id
WHERE z.id IS NULL;
-- Połączenie wielu tabel (klient -> zamowienie -> pozycja -> produkt)
SELECT k.imie, z.id AS zamowienie_id, p.nazwa, po.ilosc, po.cena_brutto
FROM klient AS k
JOIN zamowienie AS z ON z.klient_id = k.id
JOIN pozycja AS po ON po.zamowienie_id = z.id
JOIN produkt AS p ON p.id = po.produkt_id;Tip: Warunki łączenia zawsze umieszczaj w
ON. Warunki filtrujące rekordy po połączeniu – wWHERE.
Agregacja: GROUP BY, HAVING i funkcje
Agregacja liczy i podsumowuje: COUNT, SUM, AVG, MIN, MAX. GROUP BY grupuje, HAVING filtruje po agregacji.
-- Liczba zamówień na klienta
SELECT k.imie, COUNT(*) AS liczba_zamowien
FROM klient AS k
JOIN zamowienie AS z ON z.klient_id = k.id
GROUP BY k.imie;
-- Suma sprzedaży według kategorii produktów
SELECT p.kategoria, SUM(po.ilosc * po.cena_brutto) AS obrot
FROM pozycja AS po
JOIN produkt AS p ON p.id = po.produkt_id
GROUP BY p.kategoria;
-- Kategorii z obrotem > 1000 zł (filtrowanie po agregacji)
SELECT p.kategoria, SUM(po.ilosc * po.cena_brutto) AS obrot
FROM pozycja AS po
JOIN produkt AS p ON p.id = po.produkt_id
GROUP BY p.kategoria
HAVING SUM(po.ilosc * po.cena_brutto) > 1000;
-- Liczba różnych miast (DISTINCT)
SELECT COUNT(DISTINCT k.miasto) AS liczba_miast
FROM klient AS k;Pułapka: Kolumny w SELECT, które nie są zagregowane, muszą znaleźć się w GROUP BY (w zależności od dialektu SQL). Na maturze trzymaj się bezpiecznej zasady: agreguj albo dodaj do GROUP BY.
Sortowanie i limitowanie: ORDER BY, LIMIT
-- 5 najdroższych produktów
SELECT p.nazwa, p.cena_brutto
FROM produkt AS p
ORDER BY p.cena_brutto DESC
LIMIT 5;
-- Alfabetycznie po mieście, następnie po imieniu
SELECT k.imie, k.miasto
FROM klient AS k
ORDER BY k.miasto ASC, k.imie ASC;Tip: Używaj nazw kolumn (nie numerów pozycji) w
ORDER BY– to bardziej czytelne i przenośne.
Podzapytania i EXISTS – kiedy to się przydaje?
-- Klienci, którzy złożyli jakiekolwiek zamówienie (IN z podzapytaniem)
SELECT k.imie
FROM klient AS k
WHERE k.id IN (
SELECT z.klient_id
FROM zamowienie AS z
);
-- Klienci BEZ zamówień (NOT EXISTS jest czytelne i szybkie)
SELECT k.imie
FROM klient AS k
WHERE NOT EXISTS (
SELECT 1
FROM zamowienie AS z
WHERE z.klient_id = k.id
);Zadania maturalne w stylu „Brilliant.org” – krok po kroku
W każdym zadaniu najpierw czytamy dokładnie treść, rysujemy relacje, a potem budujemy zapytanie od prostego do pełnego.
Zadanie 1 (podstawy SELECT/WHERE)
Polecenie: Wypisz nazwy produktów z kategorii „Słodycze”, których cena przekracza 4,50 zł.
SELECT p.nazwa, p.cena_brutto
FROM produkt AS p
WHERE p.kategoria = 'Słodycze'
AND p.cena_brutto > 4.50;Dlaczego to działa? Najpierw filtrujemy kategorię, potem nakładamy warunek ceny. Dwa warunki łączy AND.
Zadanie 2 (JOIN jeden do wielu)
Polecenie: Wypisz imię klienta i identyfikatory jego zamówień.
SELECT k.imie, z.id AS zamowienie_id
FROM klient AS k
JOIN zamowienie AS z
ON z.klient_id = k.id;Analiza: Klient ma wiele zamówień (relacja 1:N). JOIN po kluczu obcym klient_id.
Zadanie 3 (LEFT JOIN + brak danych)
Polecenie: Podaj imiona klientów, którzy nie złożyli żadnego zamówienia.
SELECT k.imie
FROM klient AS k
LEFT JOIN zamowienie AS z
ON z.klient_id = k.id
WHERE z.id IS NULL;Spostrzeżenie: Właśnie do wykrywania „braków” służy LEFT JOIN + warunek IS NULL po stronie prawej tabeli.
Zadanie 4 (agregacja – liczba zamówień)
Polecenie: Wypisz dla każdego klienta liczbę jego zamówień, posortuj malejąco.
SELECT k.imie, COUNT(*) AS liczba_zamowien
FROM klient AS k
JOIN zamowienie AS z ON z.klient_id = k.id
GROUP BY k.imie
ORDER BY liczba_zamowien DESC;Dlaczego tak? Po połączeniu grupujemy po kliencie i liczymy. Sortujemy po aliasie.
Zadanie 5 (SUMA wartości sprzedaży wg kategorii)
Polecenie: Podaj łączny obrót dla każdej kategorii produktu.
SELECT p.kategoria, SUM(po.ilosc * po.cena_brutto) AS obrot
FROM pozycja AS po
JOIN produkt AS p ON p.id = po.produkt_id
GROUP BY p.kategoria
ORDER BY obrot DESC;Praktyka: Obrót to iloczyn ilości i ceny w pozycjach. Grupujemy po kategorii produktu.
Zadanie 6 (HAVING – filtr po agregacji)
Polecenie: Pokaż tylko te kategorie, których obrót przekroczył 2000 zł.
SELECT p.kategoria, SUM(po.ilosc * po.cena_brutto) AS obrot
FROM pozycja AS po
JOIN produkt AS p ON p.id = po.produkt_id
GROUP BY p.kategoria
HAVING SUM(po.ilosc * po.cena_brutto) > 2000;Uwaga: Warunek po agregacji należy do HAVING, nie do WHERE.
Zadanie 7 (LIKE – wyszukiwanie fragmentów tekstu)
Polecenie: Znajdź produkty, których nazwa zawiera słowo „kola” (np. „Cola”, „Kola Zero”).
SELECT p.nazwa
FROM produkt AS p
WHERE p.nazwa LIKE '%kola%';Wskazówka: W zależności od silnika bazy LIKE może być czułe/nieczułe na wielkość liter.
Zadanie 8 (DISTINCT – unikalne wartości)
Polecenie: Wypisz listę unikalnych miast klientów.
SELECT DISTINCT k.miasto
FROM klient AS k
WHERE k.miasto IS NOT NULL
ORDER BY k.miasto;Powód: DISTINCT usuwa duplikaty; pamiętaj o IS NOT NULL, by nie wprowadzać pustych pozycji.
Zadanie 9 (podzapytanie – klienci bez zamówień w 2025)
Polecenie: Podaj imiona klientów, którzy nie złożyli zamówienia w roku 2025.
SELECT k.imie
FROM klient AS k
WHERE NOT EXISTS (
SELECT 1
FROM zamowienie AS z
WHERE z.klient_id = k.id
AND z.data BETWEEN '2025-01-01' AND '2025-12-31'
);Komentarz: NOT EXISTS świetnie oddaje „nie ma takich rekordów”.
Zadanie 10 (TOP N – najdroższe pozycje)
Polecenie: Wypisz 10 najdroższych pozycji zamówień (po cena_brutto), z nazwą produktu i datą zamówienia.
SELECT p.nazwa, z.data, po.cena_brutto
FROM pozycja AS po
JOIN produkt AS p ON p.id = po.produkt_id
JOIN zamowienie AS z ON z.id = po.zamowienie_id
ORDER BY po.cena_brutto DESC
LIMIT 10;Strategia: Najpierw łączymy dane, potem sortujemy i ograniczamy wynik.
Dodatkowe „mini–tricki” z matury
- Daty: zawsze podaj pełen zakres (
BETWEENuwzględnia oba końce); przy godzinach doprecyzuj od/do. - NULL-e: sprawdzaj
IS NULL/IS NOT NULL. Brak wartości to nie to samo co pusty string. - COUNT(*) vs COUNT(kolumna):
COUNT(*)liczy wiersze,COUNT(kolumna)nie liczyNULL-i. - COUNT(DISTINCT …): gdy chcesz policzyć różne wartości, nie wszystkie.
- JOIN ≠ WHERE: warunki połączenia w
ON; filtrowanie wynikowe wWHERE. - Czytelność: aliasy tabel (
k,z,po,p) i kolumn (AS) ułatwiają sprawdzającemu zrozumienie.
Zestaw zadań do samodzielnej pracy (z podpowiedziami)
Jak korzystać? Spróbuj samodzielnie, a potem porównaj z podpowiedziami. Jeżeli chcesz automatyczną weryfikację i dodatkowe warianty, popracuj z MaturAIMaturAI oraz kursem InformatykaInformatyka.
Zadanie A (JOIN + WHERE)
Polecenie: Wypisz imię klienta, datę zamówienia i łączną wartość zamówienia wartosc dla zamówień o statusie „zrealizowane”.
Podpowiedź:
SELECT k.imie, z.data, z.wartosc
FROM klient AS k
JOIN zamowienie AS z ON z.klient_id = k.id
WHERE z.status = 'zrealizowane';Zadanie B (GROUP BY + HAVING)
Polecenie: Dla każdego miasta policz liczbę klientów. Pokaż tylko miasta, gdzie jest co najmniej 3 klientów.
Podpowiedź:
SELECT k.miasto, COUNT(*) AS liczba_klientow
FROM klient AS k
WHERE k.miasto IS NOT NULL
GROUP BY k.miasto
HAVING COUNT(*) >= 3
ORDER BY liczba_klientow DESC;Zadanie C (SUM po pozycjach)
Polecenie: Oblicz całkowity obrót (suma ilosc * cena_brutto) w roku 2025.
Podpowiedź:
SELECT SUM(po.ilosc * po.cena_brutto) AS obrot_2025
FROM pozycja AS po
JOIN zamowienie AS z ON z.id = po.zamowienie_id
WHERE z.data BETWEEN '2025-01-01' AND '2025-12-31';Zadanie D (DISTINCT + LIKE)
Polecenie: Wypisz unikalne nazwy kategorii produktów, które zawierają słowo „napój”.
Podpowiedź:
SELECT DISTINCT p.kategoria
FROM produkt AS p
WHERE p.kategoria LIKE '%napój%';Zadanie E (NOT EXISTS – klienci bez pozycji)
Polecenie: Podaj imiona klientów, których żadne zamówienie nie ma pozycji (pusty koszyk).
Podpowiedź:
SELECT k.imie
FROM klient AS k
WHERE EXISTS (
SELECT 1
FROM zamowienie AS z
WHERE z.klient_id = k.id
)
AND NOT EXISTS (
SELECT 1
FROM zamowienie AS z
JOIN pozycja AS po ON po.zamowienie_id = z.id
WHERE z.klient_id = k.id
);Zadanie F (TOP N per grupa – wariant maturalny)
Polecenie: Dla każdej kategorii produktu podaj najdroższy produkt (nazwa i cena).
Podpowiedź (klasyczny sposób z podzapytaniem):
SELECT p1.kategoria, p1.nazwa, p1.cena_brutto
FROM produkt AS p1
WHERE p1.cena_brutto = (
SELECT MAX(p2.cena_brutto)
FROM produkt AS p2
WHERE p2.kategoria = p1.kategoria
)
ORDER BY p1.kategoria;„Myślenie maturalne” – jak czytać polecenia i nie tracić punktów
Zawsze: wyodrębnij czas (rok/miesiąc/dzień), zakres (≥, >, ≤, < ), relacje (która tabela łączy się z którą) i dokładną metrykę (liczba wierszy? liczba różnych klientów? suma wartości?).
- Zaznacz słowa-klucze: „co najmniej”, „dokładnie”, „wyłącznie”, „zawiera”, „nie zawiera”.
- Rozrysuj FK: strzałki między tabelami; to skraca pisanie JOIN.
- Ustal kolejność pracy: filtr w
WHERE→ agregacjaGROUP BY→ filtr po agregacjiHAVING→ORDER BY→LIMIT. - Sprawdź brzegowe przypadki: brak zamówień,
NULL, duplikaty, puste stringi, różnice wielkości liter. - Czytelność: aliasy, sensowne nazwy kolumn wynikowych.
Najczęstsze błędy na maturze z SQL (i jak ich uniknąć)
- Mylenie WHERE i HAVING – pamiętaj: HAVING po agregacji.
- Łączenie po złych kolumnach – zawsze używaj kluczy (PK/FK).
- Pomijanie DISTINCT – gdy zadanie mówi o „różnych klientach/miastach”, użyj
COUNT(DISTINCT ...). - Ignorowanie NULL – sprawdzaj
IS NULL/IS NOT NULL. - Nieczytelny kod – brak aliasów, kolumny bez
AS, numerki wORDER BYzamiast nazw.
Praktyka czyni mistrza – jak uczyć się z MaturaMinds
- Przerób pełny moduł SQL w kursie InformatykaInformatyka i zobacz modułymoduły.
- Zapisz definicje i gotowce w NotatkiNotatki.
- Zadawaj pytania i generuj warianty zadań w MaturAIMaturAI.
- Ćwicz na Arkuszach maturalnychArkuszach maturalnych.
- Ustal rytm nauki dzięki Materiałom e-mailMateriałom e-mail.
- Potrzebujesz też innych przedmiotów? Zobacz: Matematyka podstawowaMatematyka podstawowa, Polski podstawowyPolski podstawowy, BiologiaBiologia, WOSWOS, HistoriaHistoria, GeografiaGeografia, Historia sztukaHistoria sztuka, Angielski rozszerzonyAngielski rozszerzony, Hiszpański podstawowyHiszpański podstawowy, Ukraiński podstawowyUkraiński podstawowy.
FAQ – krótkie odpowiedzi na częste pytania
Czy muszę znać wszystkie typy JOIN?
Najczęściej wystarczą INNER JOIN i LEFT JOIN. Pamiętaj, co robią i kiedy użyć IS NULL.
Czy na maturze używa się funkcji okna (window functions)? Zazwyczaj nie. Skup się na SELECT/WHERE/JOIN/GROUP BY/HAVING/ORDER BY/LIMIT.
Czy bez danych przykładowych da się pisać SQL? Tak – schemat i opis relacji w zadaniach są wystarczające. Staraj się logicznie odtworzyć intencję polecenia.
Podsumowanie i następne kroki
SQL na maturę 2026 to świetna okazja, by zyskać pewne punkty. Klucz to rozumienie relacji, precyzyjne warunki w WHERE, pewne łączenie tabel JOIN, sprawne agregowanie (GROUP BY/HAVING) i czytelne sortowanie (ORDER BY/LIMIT). Ćwicz na wielu wariantach i patrz krytycznie na brzegowe przypadki.
Zacznij dziś: odwiedź MaturaMindsMaturaMinds, przerób moduły w InformatykaInformatyka, prowadź NotatkiNotatki, pytaj MaturAIMaturAI, a umiejętności utrwalaj dzięki Materiałom e-mailMateriałom e-mail i Arkuszom maturalnymArkuszom maturalnym.
Powodzenia – do zobaczenia na wynikach!
Czy podoba Ci się ten artykuł?
Zostaw nam swoją opinię
Powrót do bloga
Rozwiń wiedzę z tego artykułu dzięki MaturaMinds
Zainteresował Cię temat naszego artykułu? Wybierz kurs poniżej, którejest bezpośrednio powiązany z omawianą tematyką, aby dogłębnie przygotować się do egzaminu maturalnego. Kurs został zaprojektowany z wymaganiami CKE na uwadze, aby skupić się na nauce, a nie na szukaniu materiałów.

