Przejdź do treści

Listopadowa cena: matura z informatyki za 100 zł zamiast 120 zł za lekcję. Zgłoś się do 30.11. Umów bezpłatną konsultację →

Dział III

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.

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
To samo w SQL

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;
Trzy błędy, które wywalają kwerendę
  • Znak równości zamiast dwukropka. Zapis Brutto = [Cena]*1.23 Access 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, nie 1,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])
Separator argumentów zależy od ustawień

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())
Wiek liczony rokiem bywa zawyżony

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;
Kolejność warunków ma znaczenie

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.

Sortujesz albo liczysz dalej — użyj zaokrąglenia i zostaw typ liczbowy.
Pokazujesz gotową tabelę w raporcie — możesz sformatować, bo nikt już na tym nie liczy.
W wątpliwej sytuacji wybierz liczbę. Format zawsze da się dołożyć na końcu, a z tekstu trudniej wrócić do liczby.

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%';
Jak to ćwiczyć

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 informatyki

Uczysz się w technikum informatycznym? Prowadzimy też przygotowanie do kwalifikacji INF.02, INF.03 i INF.04. Zobacz egzaminy zawodowe →