WZORZEC: Projekt kwerendy → tabele → pola → kryteria → uruchom
Każda kwerenda w Access — bez względu na złożoność — powstaje w ten sam sposób. Zmieniają się tabele i kryteria, schemat pracy pozostaje identyczny.
- Tworzenie → Projekt kwerendy → zamknij okno "Pokazywanie tabeli"
- Prawym przyciskiem w górnej (białej) części → Pokaż tabelę → dodaj potrzebne tabele
- Przeciągnij pola z tabel do siatki na dole
- W wierszu Kryteria wpisz warunek dla wybranego pola
- Czerwony wykrzyknik
!→ uruchomienieAccess generuje SQL automatycznie. Możesz go podejrzeć: prawym przyciskiem na zakładce kwerendy → Widok SQL.
Zadanie 8. Sieć sklepów
Import — zanim cokolwiek zrobisz
Trzy pliki .txt z danymi wchodzą do Access jako tabele przez:
Dane zewnętrzne → Plik tekstowy → wskaż plik → Importuj dane do nowej tabeli
W kreatorze:
- Ogranicznik: Tabulator
- Zaznacz: Pierwszy wiersz zawiera nazwy pól
- Wybierz własny klucz
- W
opis_transakcji.txtnie ma klucza! - Dalej → Dalej → Zakończ
!! Ważne: Sprawdź typ kolumn po imporcie — szczególnie kolumny z cenami. Jeśli plik ma przecinki dziesiętne (np.
5,85), Access może zaimportować pole jako Tekst zamiast Liczba. WtedySUM()zwróci błąd. Poprawka: otwórz tabelę w Widoku projektu, zmień typ pola naPodwójna precyzja.
!! Pułapka: Puste pole
IdSprzedawcy(kasa samoobsługowa) to NULL, nie pusty string"". W kryteriach Access wpiszIs Null— nie= "".
Zadanie 8.1.
Kwerenda wybierająca — kto zrobił co
Zadanie: klient z największą liczbą transakcji.
Schemat GUI: 
| Krok | Co robisz |
|---|---|
| Dodaj tabele | klienci + transakcje |
| Połącz | przeciągnij IdKlienta z klienci na IdKlienta w transakcje |
| Pola | Imie, Nazwisko z klienci; IdTransakcji z transakcje |
Dla IdTransakcji | zmień Suma na Count (włącz Grupowanie: Widok → Sumy Σ) |
| Sortowanie | IdTransakcji → Malejąco |
Wskazówka: Przycisk
Σ(Sumy) na wstążce włącza wiersz Grupuj według w siatce projektu. Bez niego nie maszCOUNT,SUM,MAX. To kluczowy przełącznik przy każdym zadaniu z liczeniem lub sumowaniem.
Wynik:

Zadanie 8.2.
LEFT JOIN — klienci bez żadnej transakcji.
Access ma do tego gotowy kreator — Kreator kwerend wyszukujacych niepasujace dane.
Tworzenie → Kreator kwerend → Kreator kwerend wyszukujacych niepasujace dane 
Kreator w każdym kroku pisze wprost co robi — wystarczy to przeczytać i wybrać właściwą tabelę/pole. Większość uczniów klika dalej bez czytania i się gubi. Ty czytasz — i jest banalnie prosto:
| Krok kreatora | Co wybierasz |
|---|---|
| "Która tabela zawiera rekordy które chcesz w wyniku kwerendy?" | klienci |
| "Która tabela zawiera rekordy pokrewne?" | transakcje |
| "Które pole łączy tabele?" | IdKlienta — IdKlienta |
| "Które pola chcesz zobaczyć w wynikach?" | IdKlienta, Plec |
Kreator generuje gotową kwerendę z LEFT JOIN i Is Null — bez wpisywania czegokolwiek ręcznie. Żeby dostać liczby K i M, utwórz dodatkową kwerendę, w której policzysz IdKlienta pogrupowane na Plec.
Wskazówka: Kreator kwerend znajdowania niedopasowanych to gotowe narzędzie na dokładnie ten typ zadania — "kto nie kupił", "kto nie oddał", "co nie zostało przypisane". Zamiast kombinować — po prostu go uruchom i przeczytaj co jest w nim napisane.
Info: Ten wzorzec pojawia się na maturze regularnie pod różnymi postaciami: "klienci bez zamówień", "produkty bez kategorii", "uczniowie bez ocen". Schemat identyczny — zmienia się tylko nazwa tabeli.
Wynik:

Zadanie 8.3.
Dwa pytania — dwie kwerendy
Zadanie pyta o dwie różne rzeczy: liczbę sklepów z kasami samoobsługowymi i łączną kwotę za zakupy w tych kasach. Robimy dwie osobne kwerendy.
!! Pułapka: Access nie obsługuje
COUNT(DISTINCT ...). Nie można w jednej kwerendzie policzyć unikalnych sklepów i zsumować kwot jednocześnie. Trzeba rozdzielić.
Kwerenda 1 — ile różnych sklepów?
Kasa samoobsługowa = IdSprzedawcy jest puste (Is Null).
| Krok | Co robisz |
|---|---|
| Dodaj tabelę | transakcje |
| Pole | IdSklepu |
Kryteria dla IdSprzedawcy | dodaj pole IdSprzedawcy → w Kryteria wpisz Is Null → odznacz Pokaż |
| Unikalne wartości | Arkusz właściwości → Wartości unikatowe → Tak |
Uruchom — każdy sklep pojawi się dokładnie raz. Wynik odczytaj z liczby wierszy na dole okna Access.

Kwerenda 2 — łączna kwota
Potrzebujemy Cena × Liczba z opis_transakcji, ale filtr Is Null jest w transakcje. Trzeba połączyć obie tabele.
| Krok | Co robisz |
|---|---|
| Dodaj tabele | transakcje + opis_transakcji |
| Połącz | IdTransakcji — IdTransakcji |
Kryteria dla IdSprzedawcy | pole z transakcje → Is Null → odznacz Pokaż |
| Nowe pole obliczeniowe | w pustej kolumnie siatki wpisz: Kwota: [Cena]*[Liczba] |
Włącz Σ Sumy | dla Kwota zmień na Sum, reszta → Grupuj według lub Gdzie |
Wskazówka: Pole obliczeniowe w Access wpisujesz bezpośrednio w wierszu Pole siatki projektu w formacie
NazwaWynikowa: [Pole1]*[Pole2]. Access sam je obsłuży — nie musisz tego robić w SQL.
Wynik:

Zadanie 8.4.
Sprzedawca w największej liczbie sklepów w jednym miesiącu
Trzeba policzyć: dla każdego sprzedawcy, w każdym miesiącu — ile różnych sklepów obsługiwał. Znowu ten sam problem co w 8.3. — Access nie ma COUNT(DISTINCT ...). Rozwiązanie: dwie kwerendy.
Kwerenda 1 — unikalne kombinacje
Chcemy wiedzieć: czy sprzedawca X był w sklepie Y w miesiącu M — tak/nie. Każda kombinacja raz.
| Krok | Co robisz |
|---|---|
| Dodaj tabelę | transakcje |
| Pola | IdSprzedawcy, IdSklepu |
| Pole obliczeniowe | Miesiac: Month([DataTransakcji]) |
Kryteria dla IdSprzedawcy | Is Not Null (pomijamy kasy samoobsługowe) |
| Unikalne wartości | Arkusz właściwości → Wartości unikatowe → Tak |
Zapisz kwerendę.
Wskazówka:
Month([DataTransakcji])to funkcja Access wyciągająca numer miesiąca z daty. Wpisujesz ją w wierszu Pole siatki projektu tak jak każde inne pole obliczeniowe:Miesiac: Month([DataTransakcji]).
Kwerenda 2 — zlicz sklepy per sprzedawca per miesiąc
Teraz na wynikach poprzedniej kwerendy liczymy ile sklepów miał każdy sprzedawca w danym miesiącu.
| Krok | Co robisz |
|---|---|
| Dodaj kwerendę | |
Włącz Σ Sumy | |
Pole IdSprzedawcy | Grupuj według |
Pole Miesiac | Grupuj według |
Pole IdSklepu | zmień na Count |
Sortowanie IdSklepu | Malejąco |
| Ograniczenie | właściwości kwerendy → Najwyższe wartości → 1 |
Info: W oknie "Pokaż tabelę" przy budowaniu kwerendy 2 przejdź na zakładkę Kwerendy — tam znajdziesz
kw_84_unikalne. Access traktuje zapisane kwerendy jak tabele.
Wynik:

Zadanie 8.5.
Kwerenda na tabelach których nie masz — utwórz je sam
Zadanie opisuje tabele Produkty i Kategorie, ale ich nie dostajesz. Nie piszesz SQL na kartce — tworzysz tabele ręcznie i budujesz kwerendę w projekcie.
Krok 1 — utwórz tabele w Access:
Tworzenie → Projekt tabeli → zdefiniuj pola zgodnie z treścią zadania:
Tabela Kategorie:
| Pole | Typ |
|---|---|
| IdKategorii | Autonumer (klucz główny) |
| NazwaKategorii | Krótki tekst |
Tabela Produkty:
| Pole | Typ |
|---|---|
| IdProduktu | Autonumer (klucz główny) |
| IdKategorii | Liczba |
| Nazwa | Krótki tekst |
| Opis | Długi tekst |
Krok 2 — wstaw testowe dane: kilka wierszy z ręki, żeby sprawdzić czy kwerenda działa.
Krok 3 — zbuduj kwerendę w projekcie:
Dodaj: Produkty + Kategorie + opis_transakcji
| Pole | Tabela | Kryteria |
|---|---|---|
| IdProduktu | Produkty | — |
| Nazwa | Produkty | — |
| NazwaKategorii | Kategorie | "spozywcze" |
| Opis | Produkty | Like "*do ekspresu kolbowego*" |
Wskazówka: W kryterium LIKE w Access wildcard to
*, a w klasycznym SQL —%. W zadaniu jak 8.5. dozwolone są obie formy.
Odznacz Pokaż przy NazwaKategorii i Opis — są potrzebne do filtrowania, ale nie muszą być w wyniku.
Krok 4 — Włącz Unikalne wartości (DISTINCT) w właściwościach kwerendy.
DISTINCT — unikalne wartości
Domyślnie kwerenda zwraca wszystkie wiersze, łącznie z duplikatami. Żeby każdy rekord pojawił się raz:
- Arkusz właściwości

- Pole "Wartości unikatowe" → zmień z
NienaTak
Access wstawia DISTINCT do SQL automatycznie.

Wynik:
SELECT DISTINCT
Produkty.IdProduktu,
Produkty.Nazwa
FROM
transakcje
INNER JOIN (
Kategorie
INNER JOIN (
Produkty
INNER JOIN opis_transakcji ON Produkty.IdProduktu = opis_transakcji.IdProduktu
) ON Kategorie.IdKategorii = Produkty.IdKategorii
) ON transakcje.IdTransakcji = opis_transakcji.IdTransakcji
WHERE
(
((Kategorie.NazwaKategorii) LIKE "spozywcze")
AND ((Produkty.Opis) LIKE "*do ekspresu kolbowego*")
);
Wskazówka: Kiedy używać DISTINCT? Gdy łączysz tabelę faktów (np.
opis_transakcji) z tabelą słownikową (np.Produkty) i ten sam produkt mógł wystąpić wiele razy. Bez DISTINCT ten samIdProduktupojawi się tyle razy, ile razy był kupiony.
Zapamiętaj: Widok projektu kwerendy + przycisk Σ + LEFT JOIN z Is Null + właściwość Unikalne wartości — te cztery narzędzia rozwiązują 90% zadań z Access na maturze rozszerzonej. SQL generuje się sam.
Ten temat omawiamy szczegółowo w kursie — z zadaniami, wzorcami i notatkami do recall.
Zobacz lekcję w kursie

