Dział V

Bazy Danych: Strategie Maturalne i Kaskady

Techniki ratujące życie na najtrudniejszych zadaniach. Przestań siłować się z jednym wielkim zapytaniem – zacznij myśleć kaskadowo.

Wstęp: Dziel i Rządź na Arkuszu

Zadania z bazy danych za 4 lub 5 punktów są projektowane tak, aby przytłoczyć Cię ilością warunków. "Podaj imię i nazwisko klienta, który w 2024 roku kupił najwięcej produktów z kategorii X, ale tylko w miesiącach letnich". Wielu maturzystów próbuje to wszystko upchnąć w jednej, gigantycznej siatce projektowej. To prosta droga do błędu i zera punktów. Prawdziwa strategia maturalna opiera się na kaskadach – budowaniu małych, bezpiecznych klocków, z których na końcu układasz odpowiedź.

1Kwerendy Pośorangenie: Magia Kaskadowania

W Accessie istnieje genialny mechanizm: kwerenda może być źródłem danych dla innej kwerendy, dokładnie tak samo jak zwykła tabela. To oznacza, że nie musisz rozwiązywać zadania w jednym kroku. Możesz zrobić Prostą Kwerendę A, zapisać ją, a potem użyć jej wyniku jako fundamentu dla Kwerendy B. To technika kaskadowa (Krok po kroku).

🌊 Workflow Kaskadowy na konkretnym zadaniu

Polecenie z Arkusza: "Podaj imię i nazwisko klienta, który wydał łącznie najwięcej pieniędzy w całej historii sklepu."
Zrobienie tego w jednym zapytaniu wymaga pisania trudnych podzapytań (subqueries) w czystym SQL. W siatce kaskadowej robimy to z uśmiechem na ustach w 3 minuty:
K1
Krok 1: Kwerenda_Suma
Wrzucasz do siatki ID_Klienta i Kwota.
Klikasz przycisk Σ. Dla klienta zostawiasz Grupuj według, dla kwoty ustawiasz Suma.
Zapisujesz kwerendę pod nazwą np. Zad_5_1_pomocnicza i zamykasz ją. Masz teraz listę wszystkich klientów i ich łącznych wydatków.
K2
Krok 2: Kwerenda_Finalna
Tworzysz nową kwerendę. W oknie "Pokaż tabelę" wchodzisz w zakładkę Kwerendy i dodajesz stworzoną przed chwilą Zad_5_1_pomocnicza oraz tabelę Klienci (żeby mieć imię i nazwisko).
Łączysz je po ID_Klienta.
Sortujesz kolumnę "Suma Kwot" malejąco i na górnej wstążce w okienku "Zwróć" (Return) zmieniasz opcję ze "Wszystkie" na 1. Gotowe! Masz najlepszego klienta.
💎
Tajemnica Klucza Oceniania CKE (Punkty cząstkowe)
Wielu maturzystów boi się zostawiać w bazie plik z kwerendami pośorangenimi (np. Kwerenda_5a, Kwerenda_5b), myśląc, że egzaminator uzna to za bałagan. To absolutny mit!
Egzaminatorzy CKE uwielbiają kwerendy pomocnicze. Jeśli w super-trudnym zadaniu za 5 punktów napiszesz jedną wielką kwerendę, która z powodu literówki nic nie zwróci – dostajesz 0 punktów. Jeśli jednak rozbijesz to na 3 kwerendy kaskadowe, i dwie pierwsze policzą dane bezbłędnie (np. zsumują wydatki i połączą tabele), a w trzeciej się pomylisz – egzaminator otworzy Twoje kwerendy pośorangenie i przyzna Ci punkty cząstkowe (np. 3/5 pkt) za poprawny tok myślenia i częściową obróbkę danych. Kaskady to Twoje ubezpieczenie na życie!
💡
Kiedy MUSISZ użyć kaskady? (Suma Śorangenich)
Są polecenia, których fizycznie nie da się wyklikać w jednej siatce projektowej. Sztandarowym przykładem jest sytuacja, w której baza wymusza agregację po agregacji.

Przykład: "Dla każdej klasy oblicz śorangenią frekwencję, a następnie podaj, jaka jest najwyższa śorangenia w szkole." W Accessie nie da się w jednym kroku zgrupować klas i wyciągnąć Max ze Śorangeniej (program zgłosi błąd zagnieżdżenia funkcji agregujących). Musisz zrobić Kwerendę 1 (Liczącą śorangenią dla każdej klasy oddzielnie), zapisać ją, a potem zrobić Kwerendę 2, która z Kwerendy 1 po prostu wyciągnie Max.

2Operacje na Datach: Wiwisekcja Czasu

Baza danych widzi datę 2024-05-14 jako spójną całość. Tymczasem na maturze zadania niemal zawsze proszą o rozbicie jej na atomy: "Zlicz transakcje wykonane tylko w miesiącach wakacyjnych (lipiec, sierpień)" albo "Podaj zysk dla każdego roku osobno". Aby odpowiedzieć na te pytania, musisz użyć wbudowanych funkcji wyciągających, które działają jak chirurgiczny skalpel.

📅 Święta Trójca Dat w Accessie

Year([Kolumna])
Z polskiego: Rok(). Wyciąga same 4 cyfry roku.

Wynik dla 2026-04-15 ➡️ 2026

Month([Kolumna])
Z polskiego: Miesiąc(). Zwraca numer miesiąca od 1 do 12.

Wynik dla 2026-04-15 ➡️ 4

Day([Kolumna])
Z polskiego: Dzień(). Zwraca numer dnia miesiąca (1-31).

Wynik dla 2026-04-15 ➡️ 15

Dwa Sposoby Ataku na Datę (Metody CKE)

Metoda 1: Pole Obliczeniowe (Kaskada)
Gdy CKE chce, abyś zgrupował wyniki po latach lub miesiącach, musisz stworzyć w siatce nową kolumnę. Data "w całości" jest bezużyteczna, bo każdy dzień to de facto osobna grupa.
Pole: RokTransakcji: Year([Data_Zakupu])
Podsumowanie: Grupuj według
To ulubiona metoda egzaminatorów na budowanie "koszyków" czasowych. Baza tworzy osobny wiersz wyników dla 2022, 2023, 2024 itd.
Metoda 2: Twarde Hasztagi (Filtrowanie)
Kiedy chcesz po prostu obciąć wyniki do konkretnego przedziału czasowego, nie musisz wyciągać miesięcy do nowych kolumn. Możesz użyć matematyki dat w wierszu Kryteria.
Pole: Data_Zakupu
Kryteria: Between #2023-01-01# And #2023-12-31#
Pułapka Hashtagu:
W Accessie daty otaczamy płotkiem #, a NIE cudzysłowem ". Zapis "2023-01-01" to zwykły tekst i baza zignoruje go przy nierównościach (>, <). Zawsze używaj #!
🧠
Rozwiązanie zadań łączonych (Letnie promocje)
Klasyczne zadanie z haczykiem: "Podaj 5 najlepszych klientów, ale tylko dla zakupów w miesiącach letnich (lipiec, sierpień)."

Nie musisz pisać twardych dat dla każdego roku osobno. Tworzysz nowe pole obliczeniowe: LetniMiesiac: Month([Data]). Ustawiasz mu opcję Gdzie (odznacza się "Pokaż"), a w Kryteriach wpisujesz operator IN (7; 8). Baza wyciągnie tylko siódmy i ósmy miesiąc niezależnie od tego, czy był to rok 2010 czy 2026. Szybko, czysto i bezbłędnie.

3Rekordy niedopasowane: Sztuka szukania pustki

Jednym z najbardziej zwodniczych zadań na maturze jest polecenie: "Podaj imiona i nazwiska klientów, którzy nigdy niczego nie wypożyczyli". Jeśli po prostu wrzucisz do siatki projektowej tabelę Klienci oraz Wypożyczenia i spróbujesz użyć operatora "Is Null" lub "0", kwerenda nie zwróci absolutnie niczego. Dlaczego? Ponieważ domyślnie Access pokazuje tylko te wiersze, które mają swoje odpowiedniki w obu tabelach. Musimy brutalnie złamać tę zasadę.

🛠️ Metoda Ręczna: Złączenia Zewnętrzne (LEFT JOIN)

Aby zobaczyć klientów bez wypożyczeń, musisz zmusić bazę do pokazania wszystkich klientów, nawet jeśli w tabeli wypożyczeń mają pusto (Null). Robimy to modyfikując linię relacji łączącą obie tabele w siatce projektowej.
Krok 1: Właściwości sprzężenia

W górnej części siatki projektowej widzisz dwie tabele połączone czarną linią. Kliknij tę linię dwukrotnie lewym przyciskiem myszy. Otworzy się okno "Właściwości sprzężenia".

Krok 2: Opcja nr 2 lub 3

Domyślnie zaznaczona jest opcja 1 (tylko pasujące wiersze). Zmień ją na opcję, która mówi: "Obejmuje WSZYSTKIE rekordy z tabeli Klienci i tylko te rekordy z tabeli Wypozyczenia, dla których sprzężone pola są równe". Zobaczysz, że linia relacji zyskała strzałkę.

Krok 3: Filtr Is Null

Teraz zrzuć na dół do siatki ID_wypozyczenia z tej drugiej tabeli. W wierszu Kryteria pod nim wpisz Is Null. Z racji, że klient nic nie kupił, jego numer wypożyczenia to absolutna pustka. Wynikiem kwerendy będzie poszukiwana lista!

💎
Legalny Cheat Code: Kreator (Złoto Maturalne)
Zrozumienie złączeń (JOIN) jest świetne, ale Access posiada wbudowane narzędzie, które robi to wszystko za Ciebie w 15 sekund. Oszczędza nerwy i eliminuje ryzyko złego poklikania w linie relacji.
1. Zakładka "Tworzenie" ➡️ Wybierz "Kreator kwerend" (zamiast Projektu kwerendy).
2. Z listy wybierz "Kreator kwerend wyszukujących niepasujące rekordy" (Find Unmatched Query Wizard).
3. Krok pierwszy: Wybierz tabelę, z której chcesz wyciągnąć dane (np. Klienci).
4. Krok drugi: Wybierz tabelę, w której ma NIE BYĆ śladu po tych ludziach (np. Wypozyczenia).
5. Wskaż pole, po którym się łączą (np. ID_klienta <=> ID_klienta).
6. Koniec. Access sam wygeneruje strzałki, złączenia LEFT JOIN i nałoży warunek "Is Null". Możesz otworzyć tę kwerendę w trybie projektowania, by podglądnąć magię.
💀
Najczęstszy błąd: Zła kolumna dla Is Null
Jeśli robisz to metodą ręczną ze strzałką, musisz bardzo uważać, gdzie wpisujesz warunek Is Null.

Musisz go nałożyć na Klucz z tej tabeli, w której danych brakuje (czyli zazwyczaj na Klucz Obcy z tabeli zdarzeń). Jeśli nałożysz Is Null na ID_klienta z tabeli Klienci, system wyrzuci błąd lub zero rekordów – ponieważ w tabeli Klienci każdy klient musi mieć przecież swoje ID (Klucz Podstawowy nigdy nie jest pusty!). "Pustka" istnieje tylko w historii transakcji!