Część matury z informatyki poświęcona bazom danych to dla wielu uczniów prawdziwy dar losu. Dlaczego? Ponieważ jest niesamowicie schematyczna. W przeciwieństwie do otwartych problemów algorytmicznych, zadania z SQL prawie zawsze polegają na tych samych kilku wzorcach. Wystarczy, że opanujesz trzy kluczowe koncepcje - łączenie tabel (JOIN), grupowanie wyników (GROUP BY) i zliczanie (COUNT) - a będziesz w stanie rozwiązać niemal każde polecenie, które CKE postawi na Twojej drodze. Ten poradnik to czysta praktyka - przejdziemy przez te filary na prostym, życiowym przykładzie.
Nasza Przykładowa Baza Danych (Szkolna Biblioteka)
Klucz do sukcesu: zrozum relacje!
Zanim napiszesz choć jedną kwerendę, musisz zrozumieć relacje między tabelami. Znajdź klucze główne i obce - to one pokażą Ci, jak połączyć dane JOIN-em.
1. Tabela Czytelnicy (Przechowuje, kto wypożycza)
| ID_Czytelnika (Klucz Podst.) | Imie | Nazwisko | ID_Klasy (Klucz Obcy) |
|---|---|---|---|
| 1 | Jan | Kowalski | 10 |
| 2 | Anna | Nowak | 11 |
| 3 | Piotr | Zieliński | 10 |
2. Tabela Klasy (Słownik klas)
| ID_Klasy (Klucz Podst.) | NazwaKlasy | Wychowawca |
|---|---|---|
| 10 | 3A | mgr Iksiński |
| 11 | 3B | mgr Ygrekowski |
3. Tabela Wypozyczenia (Rejestr operacji)
| ID_Wypozyczenia | ID_Czytelnika (Klucz Obcy) | TytulKsiazki | DataWypozyczenia |
|---|---|---|---|
| 1 | 2 | Potop | 2025-01-10 |
| 2 | 1 | Lalka | 2025-01-11 |
| 3 | 2 | Dziady | 2025-01-12 |
| 4 | 3 | Potop | 2025-01-13 |
Kluczowa obserwacja (Relacje): Aby dowiedzieć się, z jakiej klasy jest czytelnik Jan Kowalski, musisz połączyć tabelę Czytelnicy (gdzie ID_Klasy = 10) z tabelą Klasy (gdzie ID_Klasy = 10). Aby zobaczyć, co wypożyczyła Anna Nowak, łączysz Czytelnicy (gdzie ID_Czytelnika = 2) z Wypozyczenia (gdzie ID_Czytelnika = 2). To jest fundament.
Filar 1: Podstawy (SELECT, FROM, WHERE)
To jest Twój zestaw startowy. Służy do wyciągania danych z JEDNEJ tabeli.
SELECT- Mówi, które kolumny chcesz zobaczyć (np.Imie,Nazwisko).SELECT *oznacza 'pokaż wszystkie kolumny'.FROM- Mówi, z której tabeli chcesz czerpać dane (np.Czytelnicy).WHERE- Filtruje wiersze (np.Imie = 'Anna').
Zadanie: Znajdź imię i nazwisko czytelnika o ID równym 3.
SELECT Imie, Nazwisko
FROM Czytelnicy
WHERE ID_Czytelnika = 3;Wynik: Piotr | Zieliński
Filar 2: INNER JOIN (Łączenie tabel)
Kiedy używasz JOIN?
Używasz go, gdy informacja, której szukasz, jest rozbita na dwie lub więcej tabel. JOIN 'skleja' wiersze z różnych tabel na podstawie wspólnej wartości - klucza podstawowego i obcego.
Zadanie: Wypisz imiona i nazwiska wszystkich czytelników wraz z nazwami ich klas.
Informacje są w dwóch tabelach: Czytelnicy (Imie, Nazwisko) i Klasy (NazwaKlasy). Musimy je połączyć.
SELECT T1.Imie, T1.Nazwisko, T2.NazwaKlasy
FROM Czytelnicy AS T1
INNER JOIN Klasy AS T2 ON T1.ID_Klasy = T2.ID_Klasy;Co tu się stało?
FROM Czytelnicy AS T1- Bierzemy tabelęCzytelnicyi nadajemy jej 'ksywkę'T1(to ułatwia pisanie).INNER JOIN Klasy AS T2- Doklejamy do niej tabelęKlasyjakoT2.ON T1.ID_Klasy = T2.ID_Klasy- To jest 'klej'. Mówimy: 'Połącz wiersz z T1 z wierszem z T2 tylko wtedy, gdyID_Klasyw obu jest identyczne'.
Wynik:
| Imie | Nazwisko | NazwaKlasy |
|---|---|---|
| Jan | Kowalski | 3A |
| Anna | Nowak | 3B |
| Piotr | Zieliński | 3A |
Filar 3: GROUP BY i Funkcje Agregujące (COUNT, SUM, AVG)
Używasz ich, gdy pytanie w poleceniu zaczyna się od słów: "Ile...", "Policz...", "Znajdź średnią...", "Podsumuj...". GROUP BY 'zwija' wiele wierszy w jeden na podstawie wspólnej cechy, a funkcje agregujące (jak COUNT - licz, SUM - sumuj, AVG - średnia) wykonują na nich obliczenia.
Zadanie: Policz, ilu czytelników jest w każdej klasie.
SELECT T2.NazwaKlasy, COUNT(T1.ID_Czytelnika) AS LiczbaUczniow
FROM Czytelnicy AS T1
INNER JOIN Klasy AS T2 ON T1.ID_Klasy = T2.ID_Klasy
GROUP BY T2.NazwaKlasy;Co tu się stało?
- Najpierw
JOINtworzy wirtualną tabelę (tę, co w poprzednim punkcie). - Potem
GROUP BY T2.NazwaKlasybierze tę tabelę i 'zwija' ją: wszystkie wiersze z '3A' lądują w jednym worku, a wszystkie z '3B' w drugim. - Na koniec
SELECTzCOUNT(T1.ID_Czytelnika)liczy, ile rekordów wpadło do każdego 'worka'.
Wynik:
| NazwaKlasy | LiczbaUczniow |
|---|---|
| 3A | 2 |
| 3B | 1 |
Łączymy Wszystko: JOIN + GROUP BY + ORDER BY
To jest typowe, złożone zadanie maturalne, które wykorzystuje wszystkie poznane elementy oraz ORDER BY (sortowanie).
Zadanie: Policz, ile książek wypożyczył każdy czytelnik. Wypisz imię, nazwisko i liczbę wypożyczonych książek. Posortuj wyniki od najaktywniejszego czytelnika.
SELECT T1.Imie, T1.Nazwisko, COUNT(T2.ID_Wypozyczenia) AS LiczbaKsiazek
FROM Czytelnicy AS T1
INNER JOIN Wypozyczenia AS T2 ON T1.ID_Czytelnika = T2.ID_Czytelnika
GROUP BY T1.Imie, T1.Nazwisko
ORDER BY LiczbaKsiazek DESC;Analiza:
JOINłączyCzytelnicy(T1) zWypozyczenia(T2) poID_Czytelnika.GROUP BY T1.Imie, T1.Nazwiskotworzy 'worki' dla każdego unikalnego czytelnika.COUNT(T2.ID_Wypozyczenia)liczy, ile rekordów wypożyczeń wpadło do 'worka' każdego czytelnika.ORDER BY LiczbaKsiazek DESCsortuje wynik malejąco (DESC).
Wynik:
| Imie | Nazwisko | LiczbaKsiazek |
|---|---|---|
| Anna | Nowak | 2 |
| Jan | Kowalski | 1 |
| Piotr | Zieliński | 1 |
Przykładowe zadanie maturalne z SQL z rozwiązaniem krok po kroku
Poniżej znajdziesz typowe zadanie maturalne SQL z pełnym rozwiązaniem.
Zadanie: Znajdź czytelnika z największą liczbą wypożyczeń
Treść zadania: Na podstawie bazy danych biblioteki znajdź imię i nazwisko czytelnika, który wypożyczył najwięcej książek. Wypisz również liczbę jego wypożyczeń.
Rozwiązanie krok po kroku
Krok 1: Połącz tabele - potrzebujemy danych z Czytelnicy (imię, nazwisko) i Wypozyczenia (policzenie wypożyczeń).
Krok 2: Grupuj po czytelniku i policz wypożyczenia.
Krok 3: Posortuj malejąco i weź tylko pierwszy wynik.
SELECT T1.Imie, T1.Nazwisko, COUNT(T2.ID_Wypozyczenia) AS LiczbaWypozyczen
FROM Czytelnicy AS T1
INNER JOIN Wypozyczenia AS T2 ON T1.ID_Czytelnika = T2.ID_Czytelnika
GROUP BY T1.Imie, T1.Nazwisko
ORDER BY LiczbaWypozyczen DESC
LIMIT 1;Uwaga dla Access: W Microsoft Access zamiast LIMIT 1 użyj TOP 1 zaraz po SELECT: SELECT TOP 1 T1.Imie, ...
Wskazówka na maturę
Zawsze buduj zapytanie krok po kroku: najpierw JOIN, potem GROUP BY, na końcu ORDER BY. Przetestuj każdy etap osobno, zanim dodasz kolejną klauzulę.
Podsumowanie: Twój Schemat Postępowania
Gdy dostaniesz zadanie z bazy danych, zawsze postępuj według tego planu:
- Przeanalizuj relacje: Zobacz, które tabele mają wspólne klucze (np.
ID_Klasy). - Zidentyfikuj pytanie:
- a) Czy pyta o dane z jednej tabeli? -> Użyj
SELECT ... FROM ... WHERE ... - b) Czy pyta o dane z wielu tabel (np. nazwisko ucznia i nazwę jego klasy)? -> Musisz użyć
INNER JOIN ... ON ... - c) Czy pyta "Ile...", "Średnio...", "Suma..."? -> Musisz użyć
GROUP BYi funkcji agregujących (COUNT,AVG,SUM). - Sortowanie: Jeśli wynik ma być posortowany, dodaj
ORDER BY ... [ASC/DESC]na samym końcu.
Opanuj te wzorce, a zadania z SQL staną się dla Ciebie najprostszą częścią egzaminu.
Szukasz więcej praktyki? Sprawdź pełny kurs do matury z informatyki.
