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
0/30 umiem
- Jaka jest poprawna kolejność klauzul w kwerendzie? #
SELECT ... FROM ... WHERE ... GROUP BY ... HAVING ... ORDER BY ... LIMIT- Czym różni się
WHEREodHAVING? # WHEREfiltruje pojedyncze rekordy przed grupowaniem.HAVINGfiltruje gotowe grupy poGROUP BY.- Czym różni się
INNER JOINodLEFT JOIN? # INNER JOINzwraca tylko pasujące pary.LEFT JOINzwraca 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
UPDATEbezWHERE? # - Zmienia wszystkie rekordy w tabeli. To najczęstszy i najbardziej kosztowny błąd na egzaminie.
- Czym różni się
DELETEodTRUNCATE? # DELETEusuwa wybrane rekordy i można go ograniczyć klauzuląWHERE.TRUNCATEczyści całą tabelę i resetuje licznikAUTO_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';potemGRANT 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= NULLnie 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
BETWEENobejmuje wartości graniczne? # - Tak.
cena BETWEEN 10 AND 20obejmuje zarówno 10, jak i 20. - Jak skrócić kilka warunków połączonych operatorem
ORdla 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)odCOUNT(*)? # COUNT(*)liczy wszystkie rekordy.COUNT(kolumna)pomija rekordy, w których ta kolumna maNULL.- Jak zastąpić
NULLczytelną 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, 10w 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ć
| Polecenie | Co robi |
|---|---|
WHERE | Filtruje pojedyncze wiersze, zanim powstaną grupy. |
HAVING | Filtruje grupy po GROUP BY — tu wstawiasz warunek na COUNT(), SUM(), AVG(). |
INNER JOIN | Tylko wiersze, które mają parę w obu tabelach. |
LEFT JOIN | Wszystkie wiersze z lewej tabeli; brak pary po prawej daje NULL. |
DELETE | Usuwa wiersze (z WHERE — tylko wybrane). Struktura tabeli zostaje. |
TRUNCATE | Czyści całą tabelę naraz i zeruje licznik AUTO_INCREMENT. |
DROP TABLE | Usuwa tabelę razem ze strukturą. |
ALTER TABLE | Zmienia 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)
| nazwa | cena |
|---|---|
| Karta graficzna GX-600 | 2499 |
| Pakiet biurowy | 599 |
| Klawiatura mechaniczna | 449.99 |
| Dysk SSD 1 TB | 349 |
| Pamiec RAM 16 GB | 289.5 |
Sprawdź się
Sprawdź się: 3 pytania z tematu Bazy danych i SQL
-
Funkcja
AVG(cena)zwraca:Wartości
NULLsą przy liczeniu średniej pomijane. -
Zapis
LIMIT 10, 5w MySQL zwróci:Pierwsza liczba to przesunięcie, druga to liczba zwracanych wierszy.
-
Głównym celem normalizacji bazy danych jest:
Normalizacja zwykle zwiększa liczbę tabel i wymusza złączenia przy odczycie.
Wszystkie pytania testowe: Bazy danych i SQL (697) → Ten temat ma w aplikacji 497 fiszek z powtórkami.