Wróć do: Bazy danych
średni SQLASIIfmatura rozszerzona z informatyki

AS, wyrażenia i funkcja IIf

Obliczanie nowych kolumn wyrażeniami arytmetycznymi, nazywanie ich etykietą AS oraz warunek w wyniku zapytania funkcją IIf.

01

Opis

Lista po SELECT nie musi zawierać wyłącznie nazw kolumn. Można w niej umieścić wyrażenie – działanie arytmetyczne, wywołanie funkcji, sklejenie tekstów – a baza policzy je osobno dla każdego wiersza i pokaże jako dodatkową kolumnę wyniku. Kolumna taka nie istnieje w tabeli; powstaje na czas jednego zapytania.

Cztery działania arytmetyczne zapisuje się standardowymi znakami. Można ich używać zarówno na kolumnach, jak i na wynikach funkcji agregujących – „różnica między najwyższą a najniższą średnią" to po prostu odjęcie dwóch funkcji od siebie.

Etykieta AS. Kolumna powstała z wyrażenia nie ma sensownej nazwy – baza podpisze ją powtórzonym wzorem albo automatycznym identyfikatorem w rodzaju Expr1000. Słowo AS pozwala nadać jej własny, czytelny nagłówek. Etykietę można nadać także zwykłej kolumnie, jeśli jej oryginalna nazwa jest nieporęczna.

To nie jest kosmetyka. Gdy zadanie mówi „kolumnę wynikową nazwij wiek", nadanie etykiety jest częścią polecenia, a nie ozdobnikiem.

Warunek wewnątrz wyniku – funkcja IIf. Czasem nie chodzi o odfiltrowanie wierszy, tylko o pokazanie różnej treści w zależności od wartości: „dziecko" albo „dorosły", „zdał" albo „nie zdał". WHERE się tu nie nada, bo on usuwa wiersze, a my chcemy zostawić wszystkie i tylko inaczej je opisać.

IIf przyjmuje trzy rzeczy: warunek, wartość zwracaną gdy jest on prawdziwy, i wartość gdy jest fałszywy. Kolejność jest stała i łatwo ją pomylić – zamiana dwóch ostatnich argumentów daje wynik dokładnie odwrotny, a zapytanie nie zgłosi żadnego błędu.

IIf można zagnieżdżać: w miejsce wartości „gdy fałsz" wstawia się kolejne IIf, budując drabinkę warunków. Powyżej dwóch–trzech poziomów robi się to jednak nieczytelne.

Zaokrąglanie. Wyniki dzielenia i średnich rzadko są okrągłe. Warto wiedzieć, że funkcje zaokrąglające dzielą się na dwie grupy: takie, które faktycznie zmieniają wartość (i wynik trafia do dalszych obliczeń zaokrąglony), oraz takie, które zmieniają wyłącznie sposób wyświetlenia (a do obliczeń nadal idzie liczba pełna). Ta druga grupa bywa bezpieczniejsza w zestawieniach, ale trzeba pamiętać, że nie da się na niej polegać w kolejnych działaniach.

Dodatkowo część funkcji zaokrągla „połówki" nie w górę, lecz do najbliższej liczby parzystej – przez co 2,5 potrafi zostać zaokrąglone do 2, a nie do 3. Jeśli zadanie wymaga konkretnego wyniku, sprawdź, jak zachowuje się funkcja w Twoim narzędziu.

02

Funkcje

IIf(warunek; gdy prawda; gdy fałsz)
warunek w wynikuZwraca jedną z dwóch wartości. Nie usuwa wierszy.
Int(liczba)
część całkowitaObcina część ułamkową, nie zaokrągla.
Round(liczba; miejsca)
zaokrąglenie wartościZmienia liczbę, którą biorą dalsze obliczenia. Połówki zaokrągla do parzystej.
FormatNumber(liczba; miejsca)
zaokrąglenie wyświetlaniaZmienia tylko widok. Do obliczeń idzie wartość pełna.
03

Zapytanie

-- Wyrażenie na funkcjach agregujących + etykieta kolumny
SELECT MAX(srednia) - MIN(srednia) AS rozpietosc
FROM uczniowie
Wynik zapytania
rozpietosc
1.90
-- IIf nie usuwa wierszy - opisuje je
SELECT nazwisko, srednia, IIf(srednia >= 4.00; 'powyżej progu'; 'poniżej progu') AS status
FROM uczniowie
Wynik zapytania
nazwiskosredniastatus
Kowalska4.75powyżej progu
Nowak3.20poniżej progu
Wiśniewski5.10powyżej progu
Zając3.90poniżej progu
Dąbrowski4.10powyżej progu
-- Wyrażenie arytmetyczne na kolumnie, liczone dla każdego wiersza osobno
SELECT nazwisko, srednia, Round(srednia * 20; 0) AS punkty
FROM uczniowie
Wynik zapytania
nazwiskosredniapunkty
Kowalska4.7595
Nowak3.2064
Wiśniewski5.10102
Zając3.9078
Dąbrowski4.1082

Na maturze

Nadaj etykietę zawsze, gdy w SELECT jest cokolwiek poza nazwą kolumny. To najtańszy punkt w całym dziale. Jeśli polecenie podaje nazwę kolumny wynikowej, użyj dokładnie tej nazwy – nie synonimu.

Przy IIf sprawdź kolejność argumentów na jednym wierszu. Weź konkretną osobę z tabeli, podstaw jej wartość do warunku i sprawdź, czy dostajesz opis, którego się spodziewasz. Zamienione argumenty dają wynik odwrotny i całkowicie wiarygodnie wyglądający.

Nie myl IIf z WHERE. „Wypisz uczniów ze średnią powyżej 4 i opisz ich jako…" to WHERE plus IIf. „Wypisz wszystkich uczniów, oznaczając ich jako…" to samo IIf, bez WHERE – bo nikt nie ma zniknąć z wyniku.

05

Najczęściej zadawane pytania

Czy etykiety AS można użyć w warunku WHERE?

Zwykle nie – w momencie sprawdzania warunku etykieta jeszcze nie istnieje. Trzeba powtórzyć całe wyrażenie w WHERE albo, jeśli chodzi o warunek na wartości policzonej dla grupy, przenieść go do klauzuli HAVING.

Czy etykieta może zawierać spacje?

Tak, ale trzeba ją wtedy ująć w nawiasy kwadratowe. W praktyce prościej jest używać nazw bez spacji – czyta się je równie dobrze, a zapis jest krótszy.

Czym różni się obcięcie od zaokrąglenia?

Obcięcie odrzuca część ułamkową niezależnie od jej wielkości – z 4,9 zrobi 4. Zaokrąglenie patrzy na tę część i wybiera bliższą liczbę całkowitą – z 4,9 zrobi 5. Przy liczeniu wieku właściwe jest obcięcie, bo pełne lata liczy się w dół.

Powiązane zagadnienia