Maj 2026 — Access — bez pisania SQL

Pełny tutorial do zadania 8. z arkusza CKE — importowanie plików TSV do Access, kwerendy zliczające i grupujące, kreator znajdowania niedopasowanych, pole obliczeniowe, kwerenda na kwerendzie i DISTINCT w jednym kliknięciu.

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.

  1. Tworzenie → Projekt kwerendy → zamknij okno "Pokazywanie tabeli"
  2. Prawym przyciskiem w górnej (białej) części → Pokaż tabelę → dodaj potrzebne tabele
  3. Przeciągnij pola z tabel do siatki na dole
  4. W wierszu Kryteria wpisz warunek dla wybranego pola
  5. Czerwony wykrzyknik ! → uruchomienie

Access 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.txt nie 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. Wtedy SUM() zwróci błąd. Poprawka: otwórz tabelę w Widoku projektu, zmień typ pola na Podwójna precyzja.

!! Pułapka: Puste pole IdSprzedawcy (kasa samoobsługowa) to NULL, nie pusty string "". W kryteriach Access wpisz Is Null — nie = "".


Zadanie 8.1.

Kwerenda wybierająca — kto zrobił co

Zadanie: klient z największą liczbą transakcji.

Schemat GUI:

KrokCo robisz
Dodaj tabeleklienci + transakcje
Połączprzeciągnij IdKlienta z klienci na IdKlienta w transakcje
PolaImie, Nazwisko z klienci; IdTransakcji z transakcje
Dla IdTransakcjizmień Suma na Count (włącz Grupowanie: Widok → Sumy Σ)
SortowanieIdTransakcji → Malejąco

Wskazówka: Przycisk Σ (Sumy) na wstążce włącza wiersz Grupuj według w siatce projektu. Bez niego nie masz COUNT, 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 kreatoraCo 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).

KrokCo robisz
Dodaj tabelętransakcje
PoleIdSklepu
Kryteria dla IdSprzedawcydodaj pole IdSprzedawcy → w Kryteria wpisz Is Null → odznacz Pokaż
Unikalne wartościArkusz 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.

KrokCo robisz
Dodaj tabeletransakcje + opis_transakcji
PołączIdTransakcji — IdTransakcji
Kryteria dla IdSprzedawcypole z transakcje → Is Null → odznacz Pokaż
Nowe pole obliczeniowew pustej kolumnie siatki wpisz: Kwota: [Cena]*[Liczba]
Włącz Σ Sumydla 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.

KrokCo robisz
Dodaj tabelętransakcje
PolaIdSprzedawcy, IdSklepu
Pole obliczenioweMiesiac: Month([DataTransakcji])
Kryteria dla IdSprzedawcyIs Not Null (pomijamy kasy samoobsługowe)
Unikalne wartościArkusz 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.

KrokCo robisz
Dodaj kwerendę
Włącz Σ Sumy
Pole IdSprzedawcyGrupuj według
Pole MiesiacGrupuj według
Pole IdSklepuzmień na Count
Sortowanie IdSklepuMalejąco
Ograniczeniewł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:

PoleTyp
IdKategoriiAutonumer (klucz główny)
NazwaKategoriiKrótki tekst

Tabela Produkty:

PoleTyp
IdProduktuAutonumer (klucz główny)
IdKategoriiLiczba
NazwaKrótki tekst
OpisDł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

PoleTabelaKryteria
IdProduktuProdukty—
NazwaProdukty—
NazwaKategoriiKategorie"spozywcze"
OpisProduktyLike "*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:

  1. Arkusz właściwości
  2. Pole "Wartości unikatowe" → zmień z Nie na Tak

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 sam IdProduktu pojawi 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.

Powiązana lekcja kursu

Ten temat omawiamy szczegółowo w kursie — z zadaniami, wzorcami i notatkami do recall.

Zobacz lekcję w kursie
Wariant — kurs maturalnyKup kurs