Bazy Danych: Strategie Maturalne, Kaskady i Podzapytania
Jak rozbić trudne zadanie na kwerendy pośrednie, kiedy użyć podzapytania, jak działa kolejność wykonywania zapytania i skąd biorą się dziwne wyniki.
Wstęp: jedno wielkie zapytanie to najgorszy pomysł
Ostatnie podpunkty zadania z bazy danych rzadko są trudne pojęciowo. Trudność polega na tym, że trzeba połączyć trzy rzeczy naraz: zgrupować, policzyć i wybrać rekord skrajny. Osoby, które próbują zapisać to w jednym zapytaniu, zwykle gubią się w nawiasach. Osoby, które dzielą pracę na kwerendy pośrednie, kończą szybciej i mają po drodze wynik do sprawdzenia. Ten dział to zestaw takich schematów plus kilka mechanizmów, które tłumaczą „dziwne” wyniki.
📋 Spis treści
Technika pracy
1 Kaskada kwerend pośrednich
Zapisana kwerenda jest dla programu takim samym źródłem danych jak tabela. Możesz więc zbudować z nich łańcuch: pierwsza przygotowuje dane, druga je podsumowuje, trzecia wybiera to, o co pyta polecenie. Każdy etap otwierasz i oglądasz — błąd wychodzi od razu, a nie na końcu.
- Krok 1 — przygotowanie. Złącz tabele, dołóż pola obliczeniowe, odfiltruj rekordy, które w ogóle nie wchodzą w grę (np. inny rok).
- Krok 2 — podsumowanie. Zgrupuj i policz to, co trzeba: sumę, licznik, średnią.
- Krok 3 — wybór. Posortuj wynik kroku drugiego albo nałóż warunek na policzoną wartość.
Nazywaj kwerendy tak, jak numeruje je arkusz: zadanie5_krok1, zadanie5_krok2, a finalną dokładnie tak, jak każe polecenie. Gdy pod koniec egzaminu wrócisz poprawić podpunkt, od razu wiesz, co jest czym. Kwerend pomocniczych nie usuwaj — nie przeszkadzają, a bywają dowodem toku rozumowania.
2 Podzapytania: gdy kaskada nie jest potrzebna
Podzapytanie to zapytanie w zapytaniu. Najczęściej służy do porównania z wartością, którą trzeba najpierw policzyć: średnią, maksimum, listą identyfikatorów. W wielu zadaniach zastępuje dwie kwerendy jednym czytelnym zapisem.
-- zamowienia powyzej sredniej wartosci SELECT Numer, Wartosc FROM Zamowienia WHERE Wartosc > (SELECT AVG(Wartosc) FROM Zamowienia); -- klienci, ktorzy kupili cokolwiek w 2026 roku SELECT Nazwisko FROM Klienci WHERE ID IN (SELECT ID_klienta FROM Zamowienia WHERE YEAR(Data) = 2026); -- rekord o maksymalnej wartosci, razem z remisami SELECT Numer, Wartosc FROM Zamowienia WHERE Wartosc = (SELECT MAX(Wartosc) FROM Zamowienia);
IN zamiast znaku równości.3 Kolejność wykonywania zapytania
Zapytanie czyta się od góry, ale wykonuje w innej kolejności. Zrozumienie tej kolejności tłumaczy większość komunikatów o błędach i sytuacji, w których alias „nie działa”.
FROM -- 1. skad bierzemy dane, ze zlaczeniami WHERE -- 2. odsiewamy pojedyncze rekordy GROUP BY -- 3. sklejamy rekordy w grupy HAVING -- 4. odsiewamy cale grupy SELECT -- 5. liczymy kolumny wyniku i nadajemy aliasy ORDER BY -- 6. sortujemy gotowy wynik
SELECT nie zadziała w WHERE, bo w chwili filtrowania jeszcze nie istnieje. Zadziała natomiast w ORDER BY, które wykonuje się na końcu.HAVING, bo WHERE pracuje przed zgrupowaniem, gdy sumy jeszcze nie ma.4 Operacje na datach i okresach
Zadania lubią pytać o okresy: kwartał, dzień tygodnia, liczbę dni realizacji, rekordy z ostatniego miesiąca. Wszystko sprowadza się do wyciągnięcia części daty albo policzenia różnicy.
-- kwartal z daty (Access)
Kwartal: DatePart("q"; [Data])
-- dzien tygodnia, gdzie 2 to poniedzialek przy ustawieniu tygodnia od pn
Dzien: Weekday([Data]; 2)
-- ile dni trwala realizacja
Czas_realizacji: DateDiff("d"; [Data_zlozenia]; [Data_wydania])
-- grupowanie po kwartale w SQL
SELECT YEAR(Data) AS Rok, QUARTER(Data) AS Kwartal, SUM(Wartosc) AS Obrot
FROM Zamowienia
GROUP BY YEAR(Data), QUARTER(Data);Jeśli kolumna przechowuje datę razem z godziną, warunek BETWEEN #2026-05-01# AND #2026-05-31# obetnie zamówienia z ostatniego dnia po północy, bo 31 maja o 14:20 jest większe niż 31 maja o 00:00. Bezpieczny zapis to warunek „od początku maja i mniejsze niż początek czerwca”.
5 Rekordy bez pary i duplikaty
Dwa polecenia wracają w arkuszach regularnie: znajdź rekordy, które nie mają odpowiednika w drugiej tabeli, oraz znajdź wartości powtarzające się. Oba mają gotowy wzorzec.
-- klienci bez zamowien SELECT k.Nazwisko FROM Klienci AS k LEFT JOIN Zamowienia AS z ON k.ID = z.ID_klienta WHERE z.Numer IS NULL; -- powtarzajace sie adresy e-mail SELECT Email, COUNT(*) AS Ile FROM Klienci GROUP BY Email HAVING COUNT(*) > 1;
Access ma w Kreatorze kwerend dwie gotowe pozycje: kwerendę wyszukującą duplikaty i kwerendę wyszukującą niepasujące rekordy. Na egzaminie to najszybsza droga, ale warto znać zapis SQL, bo w innym programie kreatora może nie być, a sam wzorzec zajmuje dwie linijki.
6 Kwerendy zmieniające dane
Do tej pory każda kwerenda tylko czytała dane. Czasem polecenie każe je zmienić: uzupełnić brakujące pole, podnieść ceny o procent, usunąć rekordy testowe albo zapisać wynik jako nową tabelę. To kwerendy funkcjonalne i mają jedną wspólną cechę — działają nieodwracalnie.
-- aktualizacja: podwyzka o 10 procent w jednej kategorii UPDATE Produkty SET Cena = Cena * 1.1 WHERE Kategoria = 'AGD'; -- usuniecie rekordow testowych DELETE FROM Zamowienia WHERE Numer LIKE 'TEST%'; -- zapisanie wyniku jako nowa tabela (Access) SELECT * INTO Zamowienia_2026 FROM Zamowienia WHERE YEAR(Data) = 2026;
Zanim uruchomisz aktualizację albo usuwanie, zbuduj zwykłą kwerendę wybierającą z tym samym warunkiem i sprawdź, ile rekordów obejmuje. Jeśli liczba się zgadza, dopiero wtedy zamień typ kwerendy. Na egzaminie nie ma cofania zmian w bazie, a plik źródłowy bywa jeden.
7 Diagnostyka dziwnych wyników
- Wyników jest podejrzanie dużo — brakuje warunku złączenia, powstał iloczyn kartezjański. Sprawdź linie w oknie relacji i sekcję
ON. - Wyników jest podejrzanie mało — złączenie wewnętrzne odcięło rekordy bez pary albo filtr daty ma zły format.
- Program prosi o wpisanie parametru — w wyrażeniu jest literówka w nazwie pola. Nie wpisuj nic, popraw nazwę.
- Suma jest zerowa — kolumna wczytana jako tekst. Wróć do typów pól.
- Sortowanie działa odwrotnie niż chcesz — w siatce liczy się kolejność kolumn od lewej, w SQL kolejność pól po
ORDER BY. - Średnia nie zgadza się z ręcznym rachunkiem — puste pola są pomijane przez agregaty.
8 Raport i formularz, gdy arkusz ich wymaga
Zadanie z bazy danych nie zawsze kończy się na kwerendach. Arkusze regularnie proszą o raport prezentujący wynik — z grupowaniem, podsumowaniem i nagłówkiem — a czasem o prosty formularz do wprowadzania danych. To osobne punkty, których nie da się nadrobić najlepszym nawet zapytaniem, a większość zdających ćwiczy wyłącznie kwerendy.
- Najpierw kwerenda, potem raport. Raport buduj na gotowej, sprawdzonej kwerendzie, nigdy wprost na tabeli — wtedy cała logika jest w jednym miejscu i łatwo ją poprawić.
- Kreator raportów robi 90 procent roboty: wybierasz pola, poziom grupowania i sposób podsumowania. Ręczne układanie kontrolek zjada czas, którego na egzaminie nie ma.
- Podsumowania wstawia się przyciskiem Opcje podsumowania w kreatorze albo polem obliczeniowym w stopce grupy, na przykład
=Suma([Wartosc]). - Tytuł i nazwa. Raport zapisz pod nazwą z polecenia i sprawdź w Podglądzie wydruku, czy kolumny się mieszczą — ucięta kolumna to realna strata punktu.
Jeśli polecenie mówi o wprowadzaniu danych, wystarczy formularz z kreatora oparty na jednej tabeli. Gdy arkusz prosi o obsługę relacji — na przykład klient i jego zamówienia na jednym ekranie — użyj formularza z podformularzem: kreator zaproponuje go sam, o ile relacja została wcześniej poprawnie ustawiona w oknie Relacje. To kolejny powód, żeby zacząć zadanie od relacji, a nie od kwerend.
9 Jak oddać wynik, żeby się liczył
Najczęstsza strata punktów w całym zadaniu nie ma nic wspólnego z SQL: rozwiązanie jest poprawne, ale nie trafia tam, gdzie kazał arkusz. Część praktyczna trwa 150 minut przy komputerze i zostawia zwykle kilka minut na uporządkowanie plików — warto je zaplanować.
- Nazwy kwerend co do znaku. Jeśli arkusz podaje nazwę, sprawdź ją literka po literce na koniec pracy — zmiana nazwy zajmuje sekundę, a bez niej sprawdzający może nie znaleźć rozwiązania.
- Treść zapytania w pliku z odpowiedziami. Gdy polecenie prosi o zapisanie zapytania, skopiuj je z Widoku SQL, a nie przepisuj z pamięci. Przy okazji wklej też otrzymany wynik, jeśli arkusz o niego prosi.
- Plik tekstowy z odpowiedziami zapisuj na bieżąco, po każdym podpunkcie, a nie na końcu. Podpisz go numerem PESEL albo numerem zdającego, jeśli tak mówi instrukcja.
- Baza zamknięta i zapisana. Access zapisuje dane na bieżąco, ale projekt kwerendy dopiero po zamknięciu jej okna — zamknij wszystkie karty przed końcem czasu.
- Katalog z rozwiązaniami. Wszystko ląduje w folderze wskazanym w arkuszu. Plik na pulpicie nie istnieje dla sprawdzającego.
Weź najtrudniejszy podpunkt z dowolnego arkusza i rozwiąż go dwa razy: raz kaskadą trzech kwerend, raz jednym zapytaniem z podzapytaniem. Porównaj czas i liczbę poprawek. To ćwiczenie pokazuje, którą drogą naprawdę pracujesz szybciej pod presją.
Korepetycje z informatyki
Zdajesz maturę rozszerzoną z informatyki?
Prowadzimy indywidualne przygotowanie do matury z informatyki — algorytmy, Python i C++, bazy danych i arkusz kalkulacyjny. Zajęcia online, na arkuszach CKE. Zobacz program i cennik.
Zobacz korepetycje z informatykiUczysz się w technikum informatycznym? Prowadzimy też przygotowanie do kwalifikacji INF.02, INF.03 i INF.04. Zobacz egzaminy zawodowe →