Większość głównych DBMS zapewnia nam funkcję zastępującą wartości null inną wartością.
Ale nazwa funkcji jest różna w różnych systemach DBMS. Na przykład SQL Server ma funkcję ISNULL()
funkcja, podczas gdy inne (takie jak MySQL, MariaDB i SQLite) mają funkcję IFNULL()
funkcja do robienia tego samego.
Jednak, aby pomylić sprawy, MySQL i MariaDB mają funkcję ISNULL()
funkcja, która działa inaczej niż funkcja SQL Server o tej samej nazwie (implementacja MySQL i MariaDB akceptuje tylko jeden argument i zwraca 1
jeśli jego null
i 0
jeśli nie).
Zresztą w przypadku Oracle Database możemy użyć NVL()
funkcja zastępująca wartości null inną wartością.
W rzeczywistości baza danych Oracle ma również funkcję NVL2()
funkcja, która pozwala nam podać inną wartość do użycia w przypadku, gdy pierwszym argumentem nie jest null
.
Jeśli chcemy po prostu sprawdzić, czy wartość jest null
czy nie, możemy użyć IS NULL
warunek (lub IS NOT NULL
dla przeciwnego testu).
NVL()
Funkcja
Oto przykład, który pokazuje, jak NVL()
funkcja działa:
SELECT NVL(null, 'Run')
FROM DUAL;
Wynik:
Run
W takim przypadku pierwszym argumentem był null
i tak zwrócono drugi argument.
Oto, co się dzieje, gdy pierwszy argument nie jest null
:
SELECT NVL('Walk', 'Run')
FROM DUAL;
Wynik:
Walk
Zwracany jest pierwszy argument.
NVL2()
Funkcja
Jak wspomniano, Oracle Database zapewnia nam również funkcję NVL2()
funkcjonować. Ta funkcja pozwala nam podać inną wartość do użycia w przypadku, gdy pierwszym argumentem nie jest null
.
Oto przykład tego, jak to działa:
SELECT NVL2(null, 2, 3)
FROM DUAL;
Wynik:
3
Pierwszym argumentem był null
i tak trzeci argument został zwrócony.
Oto, co się dzieje, gdy pierwszy argument nie jest null
:
SELECT NVL2(1, 2, 3)
FROM DUAL;
Wynik:
2
Zwracany jest drugi argument.
IS NULL
i IS NOT NULL
Warunki
Jeśli chcemy tylko dowiedzieć się, czy wartość jest null
, możemy użyć IS NULL
warunek porównania. Możemy alternatywnie użyć IS NOT NULL
aby sprawdzić, czy nie jest null
.
Załóżmy, że mamy następującą tabelę:
SELECT * FROM Autoparts
WHERE Price IS NULL;
Wynik:
ID | OE# | CENA | MODEL |
---|---|---|---|
2 | 62150B3278 | – | CAMRY |
1 | 62150A3278 | 168 | HILUX |
W tym przypadku PRICE
kolumna zawiera wartość null dla pierwszego wiersza, ale nie dla drugiego wiersza.
Oto przykład użycia IS NULL
przy tej tabeli:
SELECT * FROM Autoparts
WHERE Price IS NULL;
Wynik:
ID | OE# | CENA | MODEL |
---|---|---|---|
2 | 62150B3278 | – | CAMRY |
Zwracany jest tylko wiersz z ceną null.
Oto, co się dzieje, gdy używamy IS NOT NULL
:
SELECT * FROM Autoparts
WHERE Price IS NOT NULL;
Wynik:
ID | OE# | CENA | MODEL |
---|---|---|---|
1 | 62150A3278 | 168 | HILUX |
Zwracany jest drugi wiersz.