Bazy Danych: Pola Obliczeniowe i Wyrażenia
Nowe kolumny liczone z istniejących danych: działania, sklejanie tekstu, funkcje daty i warunek IIf — w siatce projektowej i w SQL.
Wstęp: kolumna, której nie ma w tabeli
Baza przechowuje dane surowe: cenę netto, datę urodzenia, imię i nazwisko w dwóch osobnych polach. Polecenia maturalne pytają o wartości pochodne: cenę brutto, wiek, pełną nazwę, liczbę dni od zamówienia. Takich kolumn nie dopisujesz ręcznie do tabeli — tworzysz je w kwerendzie jako pola obliczeniowe. Dane źródłowe zostają nietknięte, a wynik liczy się na bieżąco.
📋 Spis treści
Budowa wyrażenia
1 Składnia: nazwa, dwukropek, nawiasy kwadratowe
W siatce projektowej pole obliczeniowe wpisujesz w wierszu Pole, w pustej kolumnie. Schemat jest zawsze ten sam: najpierw nazwa nowej kolumny, potem dwukropek, potem wyrażenie. Nazwy istniejących pól bierzesz w nawiasy kwadratowe.
Brutto: [Cena_netto] * 1.23 Wartosc_zamowienia: [Cena] * [Ilosc] Rabat: [Cena] * 0.9
Dwukropek z siatki zamienia się na słowo AS, a nawiasy kwadratowe są potrzebne tylko wtedy, gdy nazwa pola zawiera spację lub znak specjalny.
SELECT Nazwa,
Cena_netto * 1.23 AS Brutto,
Cena * Ilosc AS Wartosc_zamowienia
FROM Produkty;- Znak równości zamiast dwukropka. Zapis
Brutto = [Cena]*1.23Access potraktuje jako warunek, nie jako nazwę kolumny. - Nazwa pola z literówką. Program poprosi wtedy o wpisanie parametru — to znak, że szuka pola, którego nie ma. Nie klikaj w okienko, popraw nazwę.
- Przecinek w liczbie. W wyrażeniach separatorem dziesiętnym jest kropka:
1.23, nie1,23.
2 Tekst: sklejanie i wycinanie fragmentów
Połowa zadań tekstowych sprowadza się do dwóch czynności: złożyć kilka pól w jeden napis albo wyciąć z napisu fragment o stałej pozycji, na przykład rok z numeru dokumentu.
-- sklejanie: imie i nazwisko ze spacja Pelne_dane: [Imie] & " " & [Nazwisko] -- pierwsza litera imienia z kropka Inicjal: Left([Imie]; 1) & "." -- trzy znaki od pozycji 5 (np. rok w numerze ZAM/2026/041) Rok: Mid([Numer]; 5; 4) -- dlugosc napisu i usuwanie spacji z brzegow Dlugosc: Len([Nazwa]) Czysty: Trim([Nazwa])
W polskiej wersji Accessa argumenty funkcji rozdziela się średnikiem: Left([Imie]; 1). W wersji angielskiej i w SQL — przecinkiem: LEFT(Imie, 1). Jeśli program podkreśla poprawnie wyglądające wyrażenie, zamień jeden znak na drugi, zanim zaczniesz szukać błędu gdzie indziej.
-- odpowiedniki w standardowym SQL
SELECT Imie || ' ' || Nazwisko AS Pelne_dane,
SUBSTRING(Numer FROM 5 FOR 4) AS Rok,
LENGTH(Nazwa) AS Dlugosc
FROM Klienci;3 Daty: wiek, rok, liczba dni
Data w bazie jest liczbą, więc można ją odejmować. To dlatego różnica dwóch dat daje liczbę dni, a porównania zakresem działają tak samo jak przy liczbach — pod warunkiem, że kolumna naprawdę ma typ daty, a nie tekst.
-- rok z daty
Rok_urodzenia: Year([Data_urodzenia])
-- miesiac jako liczba 1-12
Miesiac: Month([Data_zamowienia])
-- liczba dni miedzy datami
Dni: DateDiff("d"; [Data_zlozenia]; [Data_realizacji])
-- pelne lata, czyli wiek
Wiek: DateDiff("yyyy"; [Data_urodzenia]; Date())Funkcja porównująca lata potraktuje osobę urodzoną w grudniu tak samo jak urodzoną w styczniu tego samego roku, choć jedna z nich nie miała jeszcze urodzin. Jeśli polecenie mówi o ukończonych latach, bezpieczniej policzyć różnicę w dniach i podzielić przez 365,25, a wynik obciąć funkcją całkowitą. W zadaniu, które pyta tylko o rocznik, wystarczy sam rok.
4 Warunek IIf i wersja zagnieżdżona
Gdy polecenie brzmi „dopisz kolumnę z informacją, czy zamówienie jest duże”, potrzebujesz warunku. Funkcja IIf przyjmuje trzy argumenty: warunek, wartość gdy prawda, wartość gdy fałsz.
-- jeden prog
Status: IIf([Wartosc] > 1000; "duze"; "male")
-- trzy przedzialy: warunki od najostrzejszego
Kategoria: IIf([Wartosc] > 5000; "VIP";
IIf([Wartosc] > 1000; "duze"; "male"))
-- to samo w standardowym SQL
SELECT Numer,
CASE WHEN Wartosc > 5000 THEN 'VIP'
WHEN Wartosc > 1000 THEN 'duze'
ELSE 'male' END AS Kategoria
FROM Zamowienia;Program sprawdza warunki po kolei i zatrzymuje się na pierwszym spełnionym. Gdybyś zaczął od > 1000, zamówienie za 8000 zł też ten warunek spełnia i dostałoby etykietę „duże”, nigdy nie docierając do progu VIP. Zawsze zaczynaj od najostrzejszego progu i schodź w dół.
5 Pułapki: puste wartości i zaokrąglenia
Puste pole zatruwa całe wyrażenie. Jeśli w mnożeniu albo sklejaniu tekstu jeden ze składników jest pusty, wynikiem będzie wartość pusta, a nie zero czy skrócony napis. Ratuje funkcja zamieniająca wartość pustą na domyślną: Nz([Rabat]; 0) w Accessie, COALESCE(Rabat, 0) w SQL.
Zaokrąglenie ustawiasz świadomie. Cena brutto policzona z ceny netto ma zwykle trzy miejsca po przecinku. Gdy polecenie mówi o kwocie w złotych i groszach, użyj Round([Cena] * 1.23; 2). Formatowanie samej kolumny zmienia tylko wygląd, a nie wartość, więc suma dalej policzy się z pełnej precyzji.
Nazwa kolumny wynikowej jest częścią polecenia. Jeśli arkusz prosi o kolumnę Wartosc_brutto, taka ma być nazwa po dwukropku. Egzaminator sprawdza zgodność wyniku z treścią, a nie sam pomysł na rozwiązanie.
6 Funkcje liczbowe: część całkowita, reszta, zaokrąglenie
Trzy funkcje zamykają większość obliczeń, które nie są zwykłym mnożeniem: obcięcie części ułamkowej, reszta z dzielenia i zaokrąglenie do wskazanej liczby miejsc. Reszta z dzielenia przez dwa jest przy okazji najkrótszym testem parzystości, a przez dziesięć wyciąga ostatnią cyfrę liczby.
-- czesc calkowita i reszta (Access)
Pelne_lata: Int([Dni] / 365.25)
Parzysty: IIf([Numer] Mod 2 = 0; "tak"; "nie")
Cena_2m: Round([Cena] * 1.23; 2)
-- odpowiedniki w SQL
SELECT FLOOR(Dni / 365.25) AS Pelne_lata,
MOD(Numer, 2) AS Reszta,
ROUND(Cena * 1.23, 2) AS Cena_brutto
FROM Zamowienia;7 Formatowanie kontra wartość
Funkcja formatująca zmienia wygląd i zwraca tekst. Zaokrąglenie zmienia wartość i zwraca liczbę. Pomylenie ich kosztuje punkt w zadaniach, w których wynik jest potem sumowany albo sortowany: tekst „1 234,50 zł” posortuje się alfabetycznie, a nie rosnąco.
8 Wyrażenie w kryteriach, nie tylko w wyniku
Pole obliczeniowe może być też warunkiem. Polecenie „wypisz zamówienia złożone w poniedziałki” albo „pokaż rekordy z ostatnich 30 dni” rozwiązuje się wyrażeniem wpisanym w wiersz Kryteria, bez dokładania nowej kolumny do wyniku.
-- kryterium na kolumnie Data (Access) Between Date() - 30 And Date() -- kryterium tekstowe: nazwisko na litere K Like "K*" -- to samo w SQL WHERE Data BETWEEN CURRENT_DATE - 30 AND CURRENT_DATE AND Nazwisko LIKE 'K%';
Otwórz dowolną bazę z arkuszy i dopisz do jednej kwerendy cztery pola obliczeniowe: brutto, pełne dane osobowe, rok z daty i etykietę warunkową. Potem otwórz Widok SQL i przepisz je do wersji z AS oraz CASE WHEN. Kwadrans takiej pracy zamyka temat, który wraca w każdym arkuszu.
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 →