Kwerendy, formularze, raporty
🎯 Po co Ci to?
Masz porządnie zaprojektowaną bazę (12.2) — dane rozbite na tabele, każdy fakt raz. Ale rozbicie ma cenę: informacja „kto co wypożyczył" jest teraz rozsypana po trzech tabelach. Jak ją z powrotem złożyć, gdy bibliotekarka pyta „które książki ma Kowalska"? Jak wygodnie dodać nowego klienta, nie grzebiąc w surowej tabeli? Jak wydrukować estetyczne zestawienie na koniec miesiąca? Odpowiadają trzy narzędzia każdej bazy: kwerendy (pytania), formularze (wygodne wprowadzanie) i raporty (ładne wydruki). To one zamieniają surową strukturę w działający system, z którego korzysta człowiek.
✅ Czego się nauczysz
Po tej jednostce potrafisz:
- wyjaśnić, czym jest kwerenda i jak łączy dane z wielu tabel;
- opisać rolę formularza (wprowadzanie/edycja danych) i raportu (prezentacja wyników);
- zaprojektować proste zapytanie: wybór, filtrowanie, złączenie tabel — na poziomie idei.
🔁 Przypomnij sobie
Z 12.2: dane w powiązanych tabelach, klucze łączą; z 11.4: filtrowanie i sortowanie (kwerenda robi to na bazie); z 6.1: wyszukiwanie (kwerenda to wyszukiwanie z warunkami).
📘 Wyjaśnienie
📐 DEFINICJA — kwerenda (zapytanie): polecenie wydobycia z bazy danych spełniających zadane warunki — wybór pól, filtrowanie rekordów, sortowanie, a przede wszystkim łączenie danych z wielu tabel po kluczach.
Po ludzku: pytanie do bazy: „pokaż mi tytuły książek wypożyczonych przez Kowalską, posortowane wg daty". Czym NIE jest: trwałą tabelą. Kwerenda to pytanie, którego wynik liczy się na bieżąco z aktualnych danych — zmienią się dane, zmienia się odpowiedź (jak formuła arkusza, nie jak zamrożona wartość).
Kwerenda łączy to, co relacje rozbiły. Pytanie „które książki ma Kowalska" wymaga trzech tabel z 12.2: znajdź Kowalską w KLIENCI (jej id), znajdź w WYPOŻYCZENIA rekordy z tym klient_id, dla każdego weź ksiazka_id i znajdź tytuł w KSIĄŻKI. To złączenie (ang. join): baza dopasowuje rekordy różnych tabel po pasujących kluczach (klucz obcy = klucz główny) i skleja je w jeden wynik:
zapytanie: książki wypożyczone przez Kowalską
wynik:
tytuł data
Lalka 2026-01-10
Ferdydurke 2026-02-03
Kluczowa obserwacja: dane są rozbite dla przechowywania (bez powtórzeń), ale kwerenda składa je z powrotem dla czytania — masz jedno i drugie naraz. To rozwiązuje pozorny paradoks: „skoro rozbiliśmy, jak teraz zobaczyć całość?". Rozbicie i złączenie to dwie strony tej samej monety.
Kwerendy w narzędziach bazodanowych buduje się na dwa sposoby: wizualnie (kreator: przeciągasz tabele, zaznaczasz pola, wpisujesz warunki — jak filtr w arkuszu, tylko na wielu tabelach) albo tekstowo w SQL (język zapytań — cały temat rozszerzenia, 12.4). Kreator generuje SQL pod spodem; oba opisują to samo pytanie.
Formularz — okno do wprowadzania. Surowa tabela to zły interfejs dla człowieka (łatwo wpisać w złą kolumnę, pominąć klucz obcy). Formularz to zaprojektowany ekran do dodawania i edycji rekordów: pola z etykietami, listy rozwijane (wybierz klienta z listy zamiast wpisywać id!), sprawdzanie poprawności. Bibliotekarka wypełnia formularz „nowe wypożyczenie", a baza w tle zapisuje właściwe klucze. Formularz oddziela wygodę użytkownika od struktury bazy — użytkownik nie musi wiedzieć o kluczach obcych.
Raport — ładny wydruk. To sformatowana prezentacja wyniku kwerendy: nagłówki, grupowanie, podsumowania, gotowe do druku. „Zestawienie wypożyczeń za marzec, grupowane wg klientów, z liczbą książek na osobę" — raport to robi. (Grupowanie i podsumowania... rozpoznajesz tabelę przestawną z 11.6? Ten sam pomysł — grupuj i agreguj — tu na danych z bazy.)
💭 Pomyśl: Kwerenda „książki Kowalskiej" liczy wynik na bieżąco. Kowalska wypożycza czwartą książkę. Co pokaże ta sama kwerenda uruchomiona ponownie — i czym to się różni od zrobienia „kopii wyniku" do arkusza?
Sprawdź odpowiedź
Ponowna kwerenda pokaże cztery książki — liczy się z aktualnych danych, więc automatycznie widzi nowe wypożyczenie. Kopia do arkusza zamroziłaby trzy (stan z chwili kopiowania) i nie zauważyła czwartej — arkuszowa „nieaktualność" z 11.6 (przestawna bez odświeżenia) i 11.1 (wartość zamiast formuły). To fundamentalna zaleta bazy: pytania są żywe. Raporty, pulpity, wyszukiwania — wszystko odzwierciedla bieżący stan, bo pod spodem są kwerendy, nie zamrożone kopie. Systemy informacyjne żyją danymi na żywo — i dlatego baza, nie arkusz, jest ich sercem.
⚠️ Uwaga, pułapka
Złączenie źle sformułowane potrafi dać wynik za duży (każdy z każdym) albo za mały (gubi rekordy bez pary). Klasyka: zapomniany warunek łączenia daje iloczyn wszystkich par (Kowalska „wypożyczyła" wszystkie książki bazy!); a złączenie, które wymaga dopasowania, pominie klienta bez żadnego wypożyczenia (choć czasem chcesz go zobaczyć — z zerem). To nie usterka narzędzia, lecz precyzja pytania: baza odpowie dokładnie na to, o co spytałeś, nie na to, co miałeś na myśli (echo działu 1: komputer robi, co każesz). Dlatego wynik kwerendy zawsze warto sprawdzić na małych, znanych danych — czy liczba rekordów ma sens.
🛠️ Teraz Ty
Na bazie z 12.2 (trzy tabele) rozpisz na kartce (bez narzędzia — sama logika) trzy kwerendy: (a) wszystkie wypożyczenia klienta „Nowak", (b) kto wypożyczył „Lalkę", (c) ile książek wypożyczył każdy klient. Dla każdej wskaż: które tabele trzeba złączyć, po jakich kluczach, jaki warunek. Zaprojektuj też szkic formularza „nowe wypożyczenie" — jakie pola, które jako listy rozwijane i czemu.
📐 Definicje tej lekcji
- Kwerenda — żywe pytanie do bazy: wybór, filtr, sortowanie, złączenie tabel po kluczach; wynik liczony z aktualnych danych.
- Złączenie (join) — sklejenie rekordów różnych tabel po pasujących kluczach (obcy = główny).
- Formularz / raport — ekran do wygodnego wprowadzania i edycji / sformatowana prezentacja wyniku kwerendy.
📌 Najważniejsze w pigułce
- Relacje rozbijają dane do przechowywania; kwerendy (złączenia) składają je do czytania — masz oba.
- Kwerenda to żywe pytanie, nie zamrożona kopia; wynik zawsze odzwierciedla bieżący stan.
- Formularz oddziela wygodę użytkownika od struktury; raport prezentuje wynik (grupuje i podsumowuje jak przestawna).
🎒 Zadania
- Dla bazy z 12.2 opisz kroki złączenia potrzebne do kwerendy „tytuły książek wypożyczonych 2026-02-03". Które tabele, jaki warunek?
Wskazówka i odpowiedź
Złącz WYPOŻYCZENIA z KSIĄŻKI po ksiazka_id = id; filtruj WYPOŻYCZENIA po data = 2026-02-03; wybierz pole tytuł. KLIENCI nie jest tu potrzebna (pytanie nie dotyczy klientów) — bierz tylko tabele niosące pola, o które pytasz lub filtrujesz. Dobór tabel do złączenia wynika z pytania: łącz tylko to, co potrzebne.
- Bibliotekarka wpisuje wypożyczenie wprost do surowej tabeli i myli
ksiazka_id(wpisuje 30 zamiast 3). Jak formularz z listą rozwijaną by temu zapobiegł?
Wskazówka i odpowiedź
Lista rozwijana pokazuje tytuły książek (a nie ich numery), a w tle zapisuje właściwy id — bibliotekarka wybiera „Lalka", nie wpisuje „3". Nie da się wybrać nieistniejącej książki (lista zawiera tylko realne), więc błąd „id 30, którego nie ma" (naruszenie integralności z 12.2!) jest niemożliwy u źródła. Formularz nie tylko jest wygodniejszy — czyni całą klasę błędów niewykonalną. To znów zasada „projektuj tak, by błąd był niemożliwy" (12.1/3).
- Wyjaśnij, czemu ten sam wynik można dostać kwerendą albo skopiować „na sztywno" do arkusza — i w jakiej sytuacji każda opcja jest właściwa.
Wskazówka i odpowiedź
Kwerenda: żywa, zawsze aktualna — właściwa do bieżącej pracy, pulpitów, powtarzalnych pytań (uruchamiasz i widzisz stan na teraz). Kopia do arkusza: zamrożona migawka — właściwa jako dowód stanu w danej chwili (raport na 31 marca, załącznik do umowy, dane do niezmiennej analizy), gdzie właśnie chcesz, żeby się NIE zmieniało. Wybór zależy od tego, czy chcesz „prawdę na teraz" (kwerenda), czy „prawdę z tamtej chwili" (kopia) — świadoma decyzja, nie przypadek.
🔍 Sprawdź, czy umiesz
- Wyjaśnić, jak kwerenda łączy dane z wielu tabel po kluczach.
- Odróżnić role formularza i raportu oraz wskazać, co dają ponad surową tabelę.
- Rozpisać prostą kwerendę: tabele, klucze złączenia, warunek.