La maggior parte dei principali DBMS ci fornisce una funzione per sostituire i valori nulli con un altro valore.
Ma il nome della funzione tende a differire tra i DBMS. Ad esempio, SQL Server ha un ISNULL()
funzione, mentre altri (come MySQL, MariaDB e SQLite) hanno un IFNULL()
funzione per fare la stessa cosa.
Tuttavia, per confondere le cose, MySQL e MariaDB hanno ciascuno un ISNULL()
funzione che funziona in modo diverso dall'omonima funzione di SQL Server (l'implementazione di MySQL e MariaDB accetta solo un singolo argomento e restituisce 1
se è null
e 0
se non lo è).
Ad ogni modo, nel caso di Oracle Database, possiamo usare il NVL()
funzione per sostituire i valori nulli con un altro valore.
In realtà, Oracle Database ha anche un NVL2()
funzione che ci consente di fornire un altro valore da utilizzare nel caso in cui il primo argomento non sia null
.
Se vogliamo semplicemente verificare se un valore è null
oppure no, possiamo usare il IS NULL
condizione (o il IS NOT NULL
per il test opposto).
Il NVL()
Funzione
Ecco un esempio che mostra come il NVL()
la funzione funziona:
SELECT NVL(null, 'Run')
FROM DUAL;
Risultato:
Run
In quel caso, il primo argomento era null
e così è stato restituito il secondo argomento.
Ecco cosa succede quando il primo argomento non è null
:
SELECT NVL('Walk', 'Run')
FROM DUAL;
Risultato:
Walk
Viene restituito il primo argomento.
Il NVL2()
Funzione
Come accennato, Oracle Database ci fornisce anche il NVL2()
funzione. Questa funzione ci consente di fornire un altro valore da utilizzare nel caso in cui il primo argomento non sia null
.
Ecco un esempio di come funziona:
SELECT NVL2(null, 2, 3)
FROM DUAL;
Risultato:
3
Il primo argomento era null
e così è stato restituito il terzo argomento.
Ecco cosa succede quando il primo argomento non è null
:
SELECT NVL2(1, 2, 3)
FROM DUAL;
Risultato:
2
Viene restituito il secondo argomento.
Il IS NULL
e IS NOT NULL
Condizioni
Se vogliamo solo scoprire se un valore è null
, possiamo usare IS NULL
condizione di confronto. In alternativa possiamo usare IS NOT NULL
per verificare se non è null
.
Supponiamo di avere la seguente tabella:
SELECT * FROM Autoparts
WHERE Price IS NULL;
Risultato:
ID | OE# | PREZZO | MODELLO |
---|---|---|---|
2 | 62150B3278 | – | CAMRY |
1 | 62150A3278 | 168 | HILUX |
In questo caso, il PRICE
colonna contiene un valore nullo per la prima riga, ma non per la seconda riga.
Ecco un esempio di utilizzo di IS NULL
contro quel tavolo:
SELECT * FROM Autoparts
WHERE Price IS NULL;
Risultato:
ID | OE# | PREZZO | MODELLO |
---|---|---|---|
2 | 62150B3278 | – | CAMRY |
Viene restituita solo la riga con il prezzo nullo.
Ecco cosa succede quando utilizziamo IS NOT NULL
:
SELECT * FROM Autoparts
WHERE Price IS NOT NULL;
Risultato:
ID | OE# | PREZZO | MODELLO |
---|---|---|---|
1 | 62150A3278 | 168 | HILUX |
Viene restituita l'altra riga.