Przejdź do treści
Kurs INF.03

Teoria INF.03: Bazy danych i SQL

Model relacyjny, klucze i relacje, typy danych, SELECT z JOIN i GROUP BY, modyfikacja danych, użytkownicy i uprawnienia.

Było na egzaminie — wymagania z 152 arkuszy części praktycznej CKE (INF.03, EE.09, E.14), 2018–2026

  • 137/152SELECT · ostatnio czerwiec 2026
  • 38/152GROUP BY · ostatnio czerwiec 2026
  • 35/152INSERT · ostatnio czerwiec 2026
  • 35/152ALTER TABLE · ostatnio czerwiec 2026

Najważniejsze zagadnienia 30

Jaka jest poprawna kolejność klauzul w kwerendzie? #
SELECT ... FROM ... WHERE ... GROUP BY ... HAVING ... ORDER BY ... LIMIT
Czym różni się WHERE od HAVING? #
WHERE filtruje pojedyncze rekordy przed grupowaniem. HAVING filtruje gotowe grupy po GROUP BY.
Czym różni się INNER JOIN od LEFT JOIN? #
INNER JOIN zwraca tylko pasujące pary. LEFT JOIN zwraca wszystkie rekordy z tabeli lewej, a brakujące dane z prawej wypełnia wartością NULL.
Jak wypisać pięć najdroższych produktów? #
SELECT * FROM produkty ORDER BY cena DESC LIMIT 5;
Jak wylosować trzy rekordy z tabeli? #
SELECT * FROM tabela ORDER BY RAND() LIMIT 3;
Jak znaleźć nazwiska zaczynające się na literę K? #
WHERE nazwisko LIKE 'K%'. Znak % zastępuje dowolny ciąg, _ jeden znak.
Wymień pięć funkcji agregujących #
COUNT, SUM, AVG, MIN, MAX
Jak policzyć liczbę produktów w każdej kategorii? #
SELECT kategoria, COUNT(*) FROM produkty GROUP BY kategoria;
Jaka jest składnia wstawiania rekordu? #
INSERT INTO tabela (kol1, kol2) VALUES ('wartosc1', 2); — teksty w apostrofach, liczby bez.
Jakie ryzyko niesie UPDATE bez WHERE? #
Zmienia wszystkie rekordy w tabeli. To najczęstszy i najbardziej kosztowny błąd na egzaminie.
Czym różni się DELETE od TRUNCATE? #
DELETE usuwa wybrane rekordy i można go ograniczyć klauzulą WHERE. TRUNCATE czyści całą tabelę i resetuje licznik AUTO_INCREMENT.
Jak dodać kolumnę do istniejącej tabeli? #
ALTER TABLE produkty ADD opis TEXT;
Co robi AUTO_INCREMENT? #
Automatycznie nadaje kolejny numer przy wstawianiu rekordu. Stosowane na kluczu głównym.
Jak utworzyć użytkownika i nadać mu prawo odczytu? #
CREATE USER 'nazwa'@'localhost' IDENTIFIED BY 'haslo'; potem GRANT SELECT ON baza.* TO 'nazwa'@'localhost';
Czym jest klucz obcy? #
Kolumna wskazująca na klucz główny innej tabeli. Wymusza spójność danych — nie da się dodać rekordu wskazującego na nieistniejący.
Jak zbudować relację wiele do wielu? #
Przez trzecią tabelę pośredniczącą, zawierającą dwa klucze obce — po jednym do każdej z łączonych tabel.
Jak znaleźć produkty droższe od średniej? #
SELECT * FROM produkty WHERE cena > (SELECT AVG(cena) FROM produkty); — to podkwerenda.
Jak sprawdzić, czy pole jest puste? #
WHERE pole IS NULL. Zapis = NULL nie zadziała.
Jak nadać kolumnie czytelną nazwę tylko w wyniku kwerendy? #
Użyj aliasu: SELECT cena AS Cena_brutto FROM produkty;. Alias nie zmienia nazwy kolumny w tabeli.
Jak wypisać wartości bez powtórzeń? #
Użyj DISTINCT, np. SELECT DISTINCT miasto FROM klienci;.
Czy operator BETWEEN obejmuje wartości graniczne? #
Tak. cena BETWEEN 10 AND 20 obejmuje zarówno 10, jak i 20.
Jak skrócić kilka warunków połączonych operatorem OR dla jednej kolumny? #
Użyj IN: WHERE status IN ('nowy', 'wyslany').
Jak wybrać rekordy, w których kolumna ma wartość? #
Warunkiem WHERE kolumna IS NOT NULL. Dla wartości pustej używa się IS NULL.
Czym różni się COUNT(kolumna) od COUNT(*)? #
COUNT(*) liczy wszystkie rekordy. COUNT(kolumna) pomija rekordy, w których ta kolumna ma NULL.
Jak zastąpić NULL czytelną wartością w wyniku? #
Funkcją COALESCE, np. COALESCE(telefon, 'brak').
Jak połączyć imię i nazwisko w jedną kolumnę? #
Przykład: SELECT CONCAT(imie, ' ', nazwisko) AS osoba FROM klienci;.
Jak wybrać rekordy z konkretnego roku? #
Dla kolumny daty można użyć WHERE YEAR(data_zamowienia) = 2026.
Jak sortować po dwóch kolumnach? #
Wymień je po przecinku: ORDER BY cena DESC, nazwa ASC. Druga kolumna rozstrzyga rekordy z takim samym wynikiem pierwszej.
Co oznacza zapis LIMIT 5, 10 w MySQL? #
Pomiń pierwszych 5 rekordów i zwróć kolejnych 10. Pierwsza liczba to przesunięcie, druga to liczba wyników.
Jak podnieść cenę o 10% tylko w jednej kategorii? #
UPDATE produkty SET cena = cena * 1.10 WHERE kategoria_id = 3;. Najpierw warto sprawdzić ten sam warunek kwerendą SELECT.

SQL — polecenia, które najłatwiej pomylić

PolecenieCo robi
WHEREFiltruje pojedyncze wiersze, zanim powstaną grupy.
HAVINGFiltruje grupy po GROUP BY — tu wstawiasz warunek na COUNT(), SUM(), AVG().
INNER JOINTylko wiersze, które mają parę w obu tabelach.
LEFT JOINWszystkie wiersze z lewej tabeli; brak pary po prawej daje NULL.
DELETEUsuwa wiersze (z WHERE — tylko wybrane). Struktura tabeli zostaje.
TRUNCATECzyści całą tabelę naraz i zeruje licznik AUTO_INCREMENT.
DROP TABLEUsuwa tabelę razem ze strukturą.
ALTER TABLEZmienia strukturę: ADD, MODIFY, DROP COLUMN, klucze.

Ćwiczenia: Bazy danych i SQL

Wypróbuj SQL — prawdziwe kwerendy na bazie ćwiczeniowej, w przeglądarce

kategorie (id, nazwa)produkty (id, nazwa, kategoria_id, cena, ilosc)zamowienia (id, produkt_id, klient, sztuk, data_zamowienia)

Ctrl+Enter
Wynik: 5
nazwacena
Karta graficzna GX-6002499
Pakiet biurowy599
Klawiatura mechaniczna449.99
Dysk SSD 1 TB349
Pamiec RAM 16 GB289.5

Sprawdź się

Sprawdź się: 3 pytania z tematu Bazy danych i SQL

  1. Funkcja AVG(cena) zwraca:

  2. Zapis LIMIT 10, 5 w MySQL zwróci:

  3. Głównym celem normalizacji bazy danych jest:

Wszystkie pytania testowe: Bazy danych i SQL (697) → Ten temat ma w aplikacji 497 fiszek z powtórkami.

To dopiero część pisemna

Do certyfikatu trzeba też części praktycznej — i tam EasyINF robi różnicę.

Roadmapa od zera, 152 arkusze CKE (148 z gotowym rozwiązaniem), warsztat, który sprawdza Twój kod krok po kroku, i próbny egzamin na 150 minut. Jedna platforma, płacisz raz.

Zobacz pełny kurs INF.03