Bazy danych - jeden z pięciu obszarów egzaminu
Zadanie z bazy danych to zwykle ostatnie zadanie w arkuszu - i jedno z tych, na których da się zdobyć komplet punktów, jeśli zna się schemat. Dostajesz kilka plików tekstowych z danymi (np. lekarze, pacjenci, wizyty) i odpowiadasz na pytania: „ilu…”, „którzy…”, „jaka suma…”, „kto ma najwięcej…”. Nie budujesz bazy od zera - importujesz dane i pobierasz z nich informacje.
Masz dwie równoważne drogi: Microsoft Access (gdzie zapytania układasz klikając w oknie projektu) albo zapytania SQL (które piszesz ręcznie). Oba opierają się na tych samych pojęciach. Ten artykuł prowadzi Cię przez całość krok po kroku - od podstaw baz relacyjnych, przez SQL, po pełną praktykę Accessa z zadań maturalnych.
Podstawy: tabele, rekordy, klucze i relacje
Na maturze pracujesz na relacyjnej bazie danych - dane leżą w tabelach, a między tabelami tworzy się relacje. Jedna tabela opisuje jedną rzecz. W tabeli:
- kolumna (pole, atrybut) to jedna własność, np. imię, nazwisko, PESEL;
- rekord to jeden wiersz, czyli konkretny obiekt (np. pacjent Jan Kowalski).
Rekordy identyfikują i łączą klucze. To pojęcie wraca w wielu zadaniach, więc warto je mieć poukładane:
| Klucz | Do czego służy |
|---|---|
| Podstawowy (primary key) | Jednoznacznie identyfikuje każdy rekord (np. id_pracownika). Nie może być pusty (NULL) ani się powtarzać. |
| Obcy (foreign key) | Wskazuje na klucz podstawowy w innej tabeli - to on tworzy relację (np. id_pracownika w tabeli wynagrodzeń). |
| Unikalny (unique key) | Wymusza niepowtarzalność wartości (np. e-mail), ale nie jest kluczem głównym i może być pusty. |
Klucz obcy łączy tabele w jedną z trzech relacji: jeden do jednego (1:1, np. pracownik i jego jeden adres), jeden do wielu (1:N, np. pracownik i jego comiesięczne wypłaty) oraz wiele do wielu (M:N, np. pracownicy i projekty). Relację M:N realizuje się przez tabelę pośrednią (np. Pracownicy_Projekty) z kluczami obcymi obu tabel.

SQL krok po kroku: SELECT, WHERE, sortowanie
Trzon każdego zapytania to SELECT - wskazujesz, które kolumny chcesz i z jakiej tabeli:
SELECT * FROM Pracownicy;- wszystkie kolumny.SELECT imie, nazwisko FROM Pracownicy;- tylko wybrane. Gdy łączysz tabele i kolumny się powtarzają, podaj tabelę przed kolumną:Pracownicy.id.
WHERE (zapisywane po FROM) filtruje rekordy po warunku. Tekst bierzemy w pojedyncze cudzysłowy:
SELECT * FROM Lekarze WHERE specjalnosc = 'pediatra';
Zapamiętaj maturalne detale operatorów:
- równość to pojedyncze
=, a różność to<>; - warunki łączysz przez
AND(oba muszą być spełnione) iOR(wystarczy jeden); BETWEEN 2000 AND 3000- zakres domknięty (2000 i 3000 wchodzą);LIKEszuka wzorca; w Accessie*zastępuje dowolną liczbę znaków, a?jeden znak (np.LIKE '*a'to imiona kończące się na „a”).
Na końcu sortujesz i ograniczasz wyniki: ORDER BY nazwisko ASC (rosnąco) lub DESC (malejąco), a SELECT TOP 3 … zwraca tylko kilka pierwszych rekordów (idealne do „trzech najwyższych pensji"). DISTINCT usuwa duplikaty.

Grupowanie i funkcje agregujące
GROUP BY grupuje rekordy, a funkcje agregujące zwracają jeden wynik na grupę: SUM (suma), AVG (średnia), MIN/MAX (skrajne), COUNT (liczba). Przykład - łączne wynagrodzenie każdego pracownika:
SELECT id_pracownika, imie, nazwisko, SUM(kwota) FROM Wynagrodzenia GROUP BY id_pracownika, imie, nazwisko;
Grupujesz po tych kolumnach z SELECT, które nie są agregatem. HAVING (zaraz po GROUP BY) filtruje już pogrupowane dane - to „WHERE dla grup", np. HAVING SUM(kwota) >= 10000.
Najczęstsza pułapka punktowa: grupuj po id, nie po imieniu i nazwisku. Dwie różne osoby o tym samym imieniu i nazwisku zostałyby policzone jako jedna - i właśnie tu najczęściej znika punkt.
Złączenia tabel (JOIN)
Żeby pobrać dane z kilku tabel naraz, łączysz je złączeniem. Rodzaj złączenia decyduje, które rekordy trafią do wyniku:
| Złączenie | Co zwraca |
|---|---|
| INNER JOIN | Tylko rekordy pasujące w obu tabelach (część wspólna) - np. pracownicy, którzy mają co najmniej jedno wynagrodzenie. |
| LEFT JOIN | Wszystkie rekordy z lewej tabeli + pasujące z prawej; brak dopasowania daje NULL. Kolejność tabel ma znaczenie. |
| RIGHT JOIN | Odwrotność LEFT JOIN - wszystkie z prawej + pasujące z lewej. |
| FULL JOIN | Wszystkie rekordy z obu tabel. Uwaga: Access go nie obsługuje. |

Przykład złączenia wewnętrznego:
SELECT imie, nazwisko, kwota FROM Pracownicy INNER JOIN Wynagrodzenia ON Pracownicy.id = Wynagrodzenia.id_pracownika;
Bardzo częsty maturalny trik: żeby znaleźć rekordy bez dopasowania (np. pracowników bez wynagrodzenia), użyj LEFT JOIN i sprawdź IS NULL na kluczu z prawej tabeli:
… FROM Pracownicy LEFT JOIN Wynagrodzenia ON … WHERE Wynagrodzenia.id_wyplaty IS NULL;
Tabele łączysz też po trzy naraz - najpierw dwie, a ich wynik z kolejną (np. Pracownicy → Pracownicy_Projekty → Projekty).
Dodawanie, zmiana i usuwanie danych
Pojawiają się też - zwykle w prostej formie - polecenia modyfikujące bazę. Warto znać ich składnię:
INSERT INTO Pracownicy (imie, nazwisko) VALUES ('Jan', 'Kowalski');UPDATE Pracownicy SET stanowisko = 'senior' WHERE id = 5;DELETE FROM Pracownicy WHERE id = 5;CREATE TABLE Pracownicy (id INT PRIMARY KEY, imie VARCHAR(50));-VARCHAR(50)to tekst do 50 znaków,INTto liczba całkowita; tabelę usuwaDROP TABLE Pracownicy;.
Access krok po kroku: import danych
Jeśli wybierasz Access, od tego zaczynasz. Import pliku tekstowego:
- Zakładka Dane zewnętrzne.
- Nowe źródło danych → Z pliku → Plik tekstowy.
- Wskaż plik i w kreatorze ustaw separator (na maturze zwykle tabulator - to zawsze pisze w poleceniu) oraz zaznacz, czy pierwszy wiersz zawiera nazwy kolumn.

Zanim zatwierdzisz, sprawdź dwie rzeczy, które najczęściej psują zadanie:
- Format daty. Access lubi zmieniać datę na amerykański. W opcjach zaawansowanych ustaw właściwy format (np.
RMD- rok-miesiąc-dzień), jeśli dane są w tej kolejności. - PESEL i numery jako tekst. Importuj je jako tekst, nie liczbę - mogą zaczynać się od zera, przekraczają zakres liczb całkowitych, a i tak nie liczysz na nich działań.

Na końcu wskazujesz klucz podstawowy (albo pozwalasz Accessowi dodać go automatycznie, gdy tabela go nie ma).
Access: połączenie tabel relacjami
Bez relacji Access nie wie, jak łączyć dane. Ustawiasz je tak:
- Zakładka Narzędzia bazy danych → Relacje.
- Przeciągnij tabele i połącz je po wspólnych polach (np. Lekarze i Wizyty po
id_lekarza, Pacjenci i Wizyty poid_pacjenta). - Zaznacz „Wymuszaj więzy integralności" - to pilnuje spójności danych.

Access: budowanie kwerendy krok po kroku
Zapytania tworzysz przez Tworzenie → Projekt kwerendy. Pierwsza i najważniejsza zasada: dodawaj tylko tabele naprawdę potrzebne. Access domyślnie łączy je jak INNER JOIN (część wspólna), więc zbędna tabela zmienia wynik - np. gdy do listy pacjentów niepotrzebnie dołączysz „Wizyty", zniknie pacjent, który nie miał żadnej wizyty (102 rekordy zamiast poprawnych… i odwrotnie).

Co ustawiasz w oknie projektu:
- Kryteria (WHERE) wpisujesz w wierszu „Kryteria". Warunki dla różnych kolumn połączone przez AND wpisujesz w tym samym wierszu, a połączone przez OR - w różnych wierszach. Daty zapisuj w formacie
#rrrr-mm-dd#. - Sortowanie - w wierszu „Sortuj" wybierasz rosnąco/malejąco.
- Grupowanie i agregaty włączasz opcją „Sumy". Jak w SQL: grupuj po id, nie po imieniu i nazwisku.
- Limit ustawiasz w opcji „Zwróć" - do zadań „NAJ" (np. 3 najpopularniejsze specjalności).

Kwerendy pomocnicze - klucz do trudnych zadań
Przy trudniejszych poleceniach jedno zapytanie nie wystarczy - budujesz je warstwami. Weźmy typowe: „dla każdej specjalności wskaż pacjenta z największą liczbą wizyt". Rozwiązujesz to tak:
- Kwerenda pomocnicza 1 - dla każdego pacjenta policz, ile razy był u danego specjalisty.
- Kwerenda pomocnicza 2 - odwołując się do pierwszej, znajdź dla każdej specjalności maksymalną liczbę wizyt.
- Kwerenda wynikowa - połącz relacjami tabelę pacjentów i obie kwerendy pomocnicze (po specjalności i po liczbie wizyt), a na końcu wypisz specjalność, pacjenta i tę maksymalną liczbę wizyt.
To standardowy wzorzec - opanuj go, bo zadania „NAJ w podziale na grupy" wracają na maturze niemal co roku.
Konstruktor wyrażeń i najważniejsze funkcje
W oknie projektu kwerendy masz przycisk Konstruktor - spis wszystkich operatorów i funkcji wbudowanych. Warto go znać, bo w stresie łatwo zapomnieć składni. Funkcje, które realnie przydają się na maturze:
- Daty:
Year(),Month(),Day()- np. do zliczania wizyt w danym roku czy miesiącu. - Tekst:
Left(),Right(),Mid(),Len(). - Logika i liczby:
IIF()(jak JEŻELI w Excelu),Abs().
Uwaga na zaokrąglanie - to realne źródło utraty punktów. Funkcja Round() w Accessie zaokrągla „do najbliższej parzystej" (2,5 → 2, ale 3,5 → 4), co bywa niezgodne z poleceniem. Gdy zadanie chce po prostu zaokrąglić do dwóch miejsc, bezpieczniej ustawić format komórki (np. walutowy z dwoma miejscami po przecinku) niż liczyć Round().
Gotowe kreatory kwerend
Access ma kreatory, które skracają typowe zadania:
- Wyszukująca duplikaty - np. pacjenci z więcej niż jedną wizytą.
- Wyszukująca niepasujące dane - rekordy z jednej tabeli, których nie ma w drugiej (np. pacjenci bez wizyt). To samo osiągniesz LEFT JOIN-em, zmieniając „właściwości sprężenia" połączenia w samej kwerendzie (nie w oknie relacji - inaczej zmienisz wszystkie połączenia w bazie!).
- Krzyżowa - do zestawień „coś w podziale na coś" (np. liczba wizyt każdego lekarza w każdym roku).

Jak oddać zadanie, żeby dostać punkty
Punkty rozkładają się zwykle na poprawny wybór i połączenie tabel oraz poprawne warunki wyszukiwania. Ale zanim je ocenią, muszą znaleźć Twoją odpowiedź:
- Plik tekstowy jest obowiązkowy. Bez zapisania wyników do pliku (np.
wyniki5.txt) i bez pliku z komputerową realizacją nie ma punktów - to jak oddanie pustej kartki. - Opisz odpowiedzi. Każda w osobnej linii, oznaczona numerem podpunktu, z czytelnym podpisem, która kolumna co zawiera.
- Zmień domyślne nazwy agregatów. Access nadaje kolumnom nazwy typu
SumaOfLiczba_dni- zamień je na zrozumiałe (np. „Liczba noclegów").

Jak technicznie przygotować i nazwać pliki, opisujemy w artykule Jak poprawnie oddawać zadania na maturze z informatyki, a na co zwraca uwagę sprawdzający - w oddawaniu zadań okiem egzaminatora.
Najczęstsze pułapki punktowe
- Grupowanie po imieniu i nazwisku zamiast po id - zlewa różne osoby w jedną.
- Zły format daty przy imporcie do Accessa (amerykański zamiast rok-miesiąc-dzień).
- PESEL zaimportowany jako liczba (ucięte zera, przekroczony zakres).
- Zbędna tabela w kwerendzie zmieniająca wynik przez domyślny INNER JOIN.
Round()zamiast formatu komórki przy zaokrąglaniu.- Brak pliku tekstowego z wynikami = brak punktów.
Cały zakres materiału egzaminu znajdziesz w artykule Wymagania na maturę z informatyki. Powodzenia w przygotowaniach!
