Bazy Danych: Kwerendy Wybierające (Siatka i SQL)
Siatka projektowa Accessa i jej odpowiednik w SQL. Kryteria, operatory, znaki wieloznaczne i wartości puste — tak, jak pyta o nie CKE.
Wstęp: dwie drogi do tego samego wyniku
Zadanie z bazy danych możesz rozwiązać na dwa sposoby: graficzną siatką projektową (Widok Projektu w Accessie) albo zapytaniem SQL. Siatka jest szybsza i wybacza literówki, ale nie zastąpi SQL-a w dwóch sytuacjach: gdy zdajesz na LibreOffice Base, gdzie kreator jest ubogi, oraz gdy polecenie każe zapisać zapytanie w odpowiedziach. W arkuszach CKE z ostatnich lat składnia SQL pojawia się regularnie — w samym arkuszu z maja 2026 zapytania ze słowem SQL i złączeniem JOIN wracają w kilku podpunktach. Dlatego w tym dziale każdy mechanizm pokazujemy równolegle: w siatce i w kodzie. Na egzaminie wybierzesz to, co szybsze, ale zrozumiesz oba zapisy.
📋 Spis treści
Podstawy zapytania
1 Wybieranie i sortowanie: prawo lewej strony
Kwerendę zaczynasz od zakładki Tworzenie → Projekt kwerendy. Dodajesz tabele (muszą mieć ustawione relacje, inaczej dostaniesz iloczyn kartezjański, czyli każdy rekord z każdym) i dwuklikiem zrzucasz kolumny do dolnej siatki. Problem zaczyna się przy sortowaniu po dwóch polach naraz.
Polecenie brzmi: „Posortuj wyniki malejąco według nazwy klasy, a w obrębie klasy alfabetycznie po nazwisku”. Access czyta siatkę od lewej do prawej — pierwsza kolumna z ustawionym sortowaniem jest kluczem głównym sortowania. Jeśli Nazwisko leży w siatce przed Klasą, dostaniesz listę uporządkowaną alfabetycznie po nazwisku, a klasy będą w niej wymieszane.
Poprawka trwa trzy sekundy: chwytasz szary pasek nad kolumną Klasa i przeciągasz ją w lewo, przed Nazwisko. W SQL ten sam problem rozwiązuje kolejność pól po ORDER BY.
Jeśli polecenie mówi „podaj tylko nazwiska”, a Ty użyłeś kolumny ID_klasy wyłącznie do filtrowania, odznacz jej pole Pokaż. Wynik ma zgadzać się z poleceniem co do kolumny. W SQL odpowiednikiem jest po prostu niewymienianie tego pola po SELECT — warunek zostaje w WHERE.
2 Siatka przetłumaczona na SQL
Każdy wiersz siatki ma swój odpowiednik w zapytaniu. Gdy to raz zobaczysz, przestaniesz traktować SQL jak osobny świat. W Accessie podgląd kodu włączasz przyciskiem Widok → Widok SQL — warto tam zajrzeć po zbudowaniu kwerendy, bo to gotowa odpowiedź do przepisania, jeśli arkusz prosi o zapis zapytania.
- Pole + zaznaczone „Pokaż”
- Tabela
- Kryteria (ten sam wiersz)
- Lub (wiersz niżej)
- Sortowanie
SELECT— lista kolumn wynikuFROM+JOINWHERE ... AND ...WHERE ... OR ...ORDER BY ... ASC / DESC
SELECT u.Nazwisko, u.Imie, k.Nazwa FROM Uczniowie AS u INNER JOIN Klasy AS k ON u.ID_klasy = k.ID WHERE k.Nazwa = 'Klasa 3A' AND u.Plec = 'K' ORDER BY k.Nazwa DESC, u.Nazwisko ASC;
- Złączenie zamiast przecinka. Zapis
FROM Uczniowie, Klasybez warunku łączącego daje iloczyn kartezjański: 200 uczniów i 8 klas zwróci 1600 wierszy. ZawszeINNER JOIN ... ON ...albo warunek złączenia wWHERE. - Kolejność po ORDER BY jest kolejnością sortowania. Pierwsze pole rządzi, drugie porządkuje remisy — dokładnie tak, jak kolumny w siatce od lewej.
- Apostrofy przy tekście. W SQL tekst zapisujesz w apostrofach:
'K'. Access w siatce sam dopisze cudzysłowy, ale w Widoku SQL zobaczysz już poprawną składnię.
3 Operatory w kryteriach: AND, OR, BETWEEN, IN
W siatce o logice decyduje geometria: warunki w tym samym wierszu łączy koniunkcja, warunki w różnych wierszach — alternatywa. Wpisanie "K" w kolumnie Płeć i "Kraków" w kolumnie Miasto w jednym wierszu znajdzie kobiety z Krakowa. Te same wartości w dwóch wierszach znajdą wszystkie kobiety z całej Polski oraz wszystkich mieszkańców Krakowa, także mężczyzn.
-- ten sam wiersz siatki
WHERE Plec = 'K' AND Miasto = 'Krakow'
-- wiersz "Lub"
WHERE Plec = 'K' OR Miasto = 'Krakow'
-- zakres dat i liczb
WHERE Data_zamowienia BETWEEN #2026-05-01# AND #2026-05-31#
-- lista dopuszczalnych wartosci
WHERE Miasto IN ('Krakow', 'Gdansk', 'Lublin')Access oczekuje daty w krzyżykach: #2026-05-01#. LibreOffice Base i standardowy SQL używają zapisu DATE '2026-05-01' albo zwykłych apostrofów. Jeśli kwerenda zwraca pustkę mimo poprawnej logiki, w pierwszej kolejności sprawdź właśnie format daty i separator dziesiętny.
BETWEEN jest obustronnie domknięty — granice wchodzą do wyniku. Przy poleceniu „powyżej 1000 zł” nie używaj więc BETWEEN 1000 AND ..., tylko ostrej nierówności > 1000.
4 Znaki wieloznaczne: gwiazdka kontra procent
To miejsce, w którym najczęściej gubią się osoby przesiadające się między programami. Znaczenie jest identyczne, ale symbole różne — i program, który dostaniesz na stanowisku, decyduje, którego użyć.
*— dowolny ciąg znaków?— dokładnie jeden znak- przykład:
Like "Kow*"
%— dowolny ciąg znaków_— dokładnie jeden znak- przykład:
LIKE 'Kow%'
-- nazwiska zaczynajace sie na "Kow" WHERE Nazwisko LIKE 'Kow%' -- adresy w domenie szkolnej WHERE Email LIKE '%@szkola.pl' -- kod pocztowy: dwie cyfry, myslnik, trzy cyfry WHERE Kod LIKE '__-___'
5 Brak danych: Is Null i pusty tekst
Wartość pusta to nie zero i nie pusty napis. Zero na koncie znaczy „jest zero złotych”, Null znaczy „nie wiemy, ile jest”. Ta różnica wraca w zadaniach o niekompletnych danych, a także w liczeniu średnich: funkcje agregujące pomijają wartości puste, więc średnia z pięciu ocen, z których dwie są puste, policzy się z trzech.
-- rekordy bez uzupelnionego telefonu WHERE Telefon IS NULL -- rekordy uzupelnione WHERE Telefon IS NOT NULL -- pusty napis to co innego niz brak wartosci WHERE Telefon = ''
Zapis = Null nie zwróci niczego, bo wartość nieznana nie jest równa niczemu, nawet innej wartości nieznanej. Działa wyłącznie operator Is Null (w siatce) albo IS NULL (w SQL), bez znaku równości i bez cudzysłowów. Wpisanie "Null" w cudzysłowie każe programowi szukać tekstu złożonego z czterech liter.
6 Duplikaty, pierwsze N rekordów, aliasy
Trzy konstrukcje, które zamykają większość poleceń typu „wypisz listę miast, w których mieszkają klienci” albo „podaj trzy najdroższe zamówienia”.
-- kazde miasto tylko raz SELECT DISTINCT Miasto FROM Klienci ORDER BY Miasto; -- trzy najdrozsze zamowienia (Access) SELECT TOP 3 Numer, Wartosc FROM Zamowienia ORDER BY Wartosc DESC; -- to samo w standardzie SQL / LibreOffice Base SELECT Numer, Wartosc FROM Zamowienia ORDER BY Wartosc DESC LIMIT 3; -- wlasna nazwa kolumny w wyniku SELECT Nazwisko AS Uczen, Wartosc * 1.23 AS Brutto FROM Zamowienia;
Jeśli na trzecim i czwartym miejscu są remisy, Access przy TOP 3 zwróci cztery wiersze, bo nie rozstrzyga remisów. To nie błąd programu, tylko jego definicja. Gdy polecenie wymaga dokładnie trzech pozycji, dołóż drugi warunek sortowania, na przykład po dacie lub nazwisku, żeby kolejność była jednoznaczna.
7 Co dokładnie oddajesz egzaminatorowi
Punkty w tej części arkusza przepadają nie tyle za złą logikę, ile za nieoddane pliki i wyniki niezgodne z poleceniem. Ta lista zajmuje na egzaminie dwie minuty, a ratuje kilka punktów.
- Zapisz każdą kwerendę pod nazwą z polecenia. Jeśli arkusz mówi „zapisz jako
zadanie4_1”, nazwa ma się zgadzać co do znaku. - Przepisz wynik do pliku z odpowiedziami. Sama kwerenda w bazie to za mało, gdy polecenie prosi o podanie liczby albo listy nazwisk.
- Dołącz zapytanie, jeśli arkusz o nie prosi. Skopiuj je z Widoku SQL — to szybsze i pewniejsze niż przepisywanie z pamięci.
- Sprawdź liczbę kolumn i ich kolejność. Wynik ma wyglądać tak, jak opisuje polecenie, bez pomocniczych pól użytych do filtrowania.
- Zapisz plik bazy przed końcem części drugiej i skopiuj go do katalogu wskazanego w arkuszu.
Weź dowolny arkusz z naszej bazy arkuszy, rozwiąż zadanie z bazy danych w siatce, a potem otwórz Widok SQL i sprawdź, czy potrafisz odtworzyć to zapytanie z pamięci na kartce. Jeśli tak — masz obie drogi opanowane i na egzaminie wybierzesz szybszą.
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 →