BD-1st-2.4-lab1.tresc-1.1-Slajd19
Wartości puste
Przeanalizujmy pierwsze zapytanie przedstawione na slajdzie:
SELECT nazwisko, placa_dod FROM pracownicy;
Zgodnie z tym co powiedziano dotychczas, zapytanie powinno odczytać wszystkie krotki z tabeli PRACOWNICY, z odczytanych krotek pobrać wartości atrybutów: NAZWISKO i PLACA_DOD, i zwrócić je w postaci relacji wynikowej. Jeżeli jednak spojrzeć na wynik zapytania przedstawiony na slajdzie, można zauważyć jedną rzecz. Otóż, dla pracownika o nazwisku Nowicki, w tabeli przedstawiającej relację wynikową, nie zwrócono żadnej wartości w kolumnie PLACA_DOD. Aby wytłumaczyć przyczynę tego zjawiska należy wprowadzić koncepcję wartości „pustej” oznaczanej jako NULL. Wartość NULL jest specjalną, wyróżnioną wartością, którą można przypisać dowolnemu atrybutowi dowolnego typu w dowolnej krotce. Oznacza ona, że faktyczna wartość tego atrybutu jest niedostępna, nieprzypisana, nieznana lub nieistotna. Wartość NULL najczęściej nie jest wyświetlana w ogóle, bądź oznaczana w wynikach jako NULL. W przypadku przykładowego zapytania, pracownik Nowicki nie ma po prostu płacy dodatkowej, co zostało odwzorowane w jego krotce tym, że zapisano wartość NULL w atrybucie PLACA_DOD.
Przy postępowaniu z wartościami NULL należy zachować daleko posuniętą ostrożność. Jeżeli w jakimkolwiek wyrażeniu wystąpi wartość NULL, to wartość tego wyrażenia również wynosi NULL. Jest to o tyle intuicyjne, że wynik obliczeń na wartości nieznanej również jest nieznany. Aby poradzić sobie z tym problemem można założyć jakąś konkretną wartość odpowiadającą wartości NULL. Przykładowo, w przypadku płacy dodatkowej pracownika, można założyć, że wartość NULL (nie posiada płacy dodatkowej) odpowiada wartości 0 (płaca dodatkowa pracownika wynosi 0). Aby wykonać taką zamianę należy wykorzystać specjalną funkcję służącą do tego celu - funkcję NVL. Funkcja NVL przyjmuje 2 parametry i działa w następujący sposób: jeżeli pierwszy parametr ma wartość różną od NULL to zwraca tą wartość, w przeciwnym wypadku zwraca wartość drugiego parametru. Aby zobaczyć przykład zastosowania tej funkcji można przeanalizować drugi przykład pokazany na slajdzie.
SELECT nazwisko, NVL(placa_dod,0) FROM pracownicy;
Jak łatwo zauważyć, nazwę atrybutu PLACA_DOD zastąpiono wyrażeniem NVL(PLACA_DOD,0). Zgodnie z wcześniejszym opisem działania funkcji NVL, jeżeli PLACA_DOD będzie zawierać jakąś liczbę, to funkcja NVL zwróci tą liczbę. Jeżeli PLACA_DOD będzie zawierać NULL, to zostanie zwrócona wartość drugiego parametru, czyli 0. Analizując wynik tego zapytania można łatwo zauważyć, że tym razem dla pracownika Nowickiego podano wartość płacy dodatkowej równą zero. Funkcję NVL można stosować samodzielnie (tak jak na przykładzie), ale również jako fragment wyrażenia np. a+NVL(x,200).