Bazy danych na maturę 2026 – SQL SELECT/WHERE/JOIN na typowych arkuszach | MaturaMinds

Powrót

Bazy danych na maturę 2026 – SQL SELECT/WHERE/JOIN na typowych arkuszach | MaturaMinds

2026-01-21
16 min
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 w SELECT/WHERE.
  • Drobne pułapki: aliasy, rozróżnianie WHERE vs HAVING, 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 produkt sprawia, że w wynikach zobaczysz nagłówek produkt zamiast nazwa.
  • Alias tabeli p skraca 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: = NULL nigdy nie zadziała. Zawsze używaj IS NULL lub IS 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 – w WHERE.

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 (BETWEEN uwzglę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 liczy NULL-i.
  • COUNT(DISTINCT …): gdy chcesz policzyć różne wartości, nie wszystkie.
  • JOIN ≠ WHERE: warunki połączenia w ON; filtrowanie wynikowe w WHERE.
  • 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?).

  1. Zaznacz słowa-klucze: „co najmniej”, „dokładnie”, „wyłącznie”, „zawiera”, „nie zawiera”.
  2. Rozrysuj FK: strzałki między tabelami; to skraca pisanie JOIN.
  3. Ustal kolejność pracy: filtr w WHERE → agregacja GROUP BY → filtr po agregacji HAVINGORDER BYLIMIT.
  4. Sprawdź brzegowe przypadki: brak zamówień, NULL, duplikaty, puste stringi, różnice wielkości liter.
  5. 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 w ORDER BY zamiast nazw.

Praktyka czyni mistrza – jak uczyć się z MaturaMinds

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.

Zobacz również:

Logo

Made with

in Poland © 2026 MaturaMinds