- 1 1. Introduzione
- 2 2. Cos’è la funzione IFNULL?
- 3 3. Esempi pratici della funzione IFNULL
- 4 3.5 Metti i valori NULL alla fine in ORDER BY
- 5 4. Differenze tra IFNULL e COALESCE
- 6 5. Funzioni di gestione dei NULL in database diversi da MySQL
- 7 6. Domande Frequenti (FAQ)
- 7.1 Q1. La funzione IFNULL e la funzione NVL sono la stessa cosa?
- 7.2 Q2. Qual è la differenza tra IFNULL e COALESCE?
- 7.3 Q3. IFNULL può essere usato con tipi di dati diversi dai numeri?
- 7.4 Q4. L’uso di IFNULL riduce le prestazioni?
- 7.5 Q5. È possibile usare CASE al posto di IFNULL?
- 7.6 Q6. IFNULL può essere usato in una clausola WHERE?
- 7.7 Riepilogo
- 8 7. Conclusione
1. Introduzione
Quando si lavora con i database, la gestione dei valori NULL è un punto critico.
In particolare, non è raro che le persone abituate alla funzione NVL di Oracle si rendano conto che NVL non è disponibile durante la migrazione a MySQL.
In MySQL, è possibile gestire correttamente i valori NULL utilizzando la funzione IFNULL al posto di NVL.
Questo articolo spiega come lavorare con i valori NULL in MySQL in dettaglio, coprendo come utilizzare IFNULL e come si differenzia da altre funzioni di gestione dei NULL.
1.1 Cos’è un valore NULL?
Nei database, NULL significa “nessun valore è stato impostato.”
Poiché questo è diverso da “0” o da una “stringa vuota”, non gestirlo correttamente può portare a errori imprevisti o risultati di query errati.
Ad esempio, supponi di avere dati come i seguenti.
| ID | Name | Age |
|---|---|---|
| 1 | Yamada | 25 |
| 2 | Sato | NULL |
| 3 | Suzuki | 30 |
Nei dati sopra, l’età per l’ID “2” (Sato) è NULL.
Se esegui calcoli così come sono, potresti ottenere errori o risultati non intenzionali.
1.2 Come MySQL gestisce i valori NULL
2. Cos’è la funzione IFNULL?
MySQL fornisce la funzione IFNULL come funzione per sostituire i valori NULL con un altro valore.
Svolge un ruolo simile alla funzione NVL di Oracle.
Gestendo appropriatamente i valori NULL, è possibile prevenire problemi di calcolo causati da dati mancanti e creare query SQL più stabili.
Esaminiamo più da vicino l’uso base di IFNULL.
2.1 Sintassi base di IFNULL
La sintassi base della funzione IFNULL è la seguente.
IFNULL(expression, fallback_value)
- expression : La colonna o il valore da controllare per NULL
- fallback_value : Il valore da restituire quando l’espressione è NULL (se non è NULL, l’espressione viene restituita così com’è)
Ad esempio, considera l’istruzione SQL seguente.
SELECT IFNULL(NULL, 'Fallback value');
In questo caso, poiché è specificato NULL, il risultato diventa 'Fallback value'.
| Result |
|---|
| Fallback value |
D’altra parte, se specifichi un valore non NULL, quel valore viene restituito così com’è.
SELECT IFNULL('Hello', 'Fallback value');
| Result |
|---|
| Hello |
2.2 Caratteristiche principali di IFNULL
La funzione IFNULL ha le seguenti caratteristiche.
- Può convertire i valori NULL in un valore specifico
- È possibile impostare un valore predefinito alternativo per le colonne che potrebbero contenere NULL.
- Utilizza una sintassi semplice
- È più semplice da scrivere rispetto all’uso di un’espressione
CASE.
- Bisogna considerare i tipi di dati
- È raccomandato che gli argomenti di
IFNULLsiano dello stesso tipo di dati .
Ad esempio, l’SQL seguente può causare un errore.
SELECT IFNULL(100, 'Error');
Motivo: Un tipo numerico (100) e un tipo stringa (‘Error’) sono mescolati.
In questo caso, il valore di fallback dovrebbe essere anch’esso numerico.
SELECT IFNULL(100, 0);
2.3 Quando utilizzare IFNULL
Ecco alcune situazioni pratiche in cui IFNULL è utile.
- Impostare un valore predefinito per NULL
- Ad esempio, se il bonus di un dipendente è NULL, impostalo a 0.
SELECT name, IFNULL(bonus, 0) AS bonus FROM employees;
- Evitare calcoli che coinvolgono NULL
- Se calcoli con NULL così com’è, il risultato diventa anch’esso NULL.
- Utilizzando
IFNULLper evitare NULL, è possibile eseguire il calcolo previsto.SELECT name, salary, IFNULL(bonus, 0) AS bonus, salary + IFNULL(bonus, 0) AS total_income FROM employees;
- Gestire correttamente NULL in report e aggregazioni
- Se è presente NULL durante l’analisi, potrebbero essere prodotti report errati.
- Sostituendo NULL con un valore specifico utilizzando
IFNULL, è possibile elaborare i dati in modo coerente.
3. Esempi pratici della funzione IFNULL
Nella sezione precedente, abbiamo spiegato le basi della funzione IFNULL.
In questa sezione, introdurremo esempi concreti di utilizzo con dati reali.
3.1 Sostituire i valori NULL con un valore predefinito
Se una tabella contiene valori NULL, potrebbe causare comportamenti non intenzionali.
Per risolvere questo, è possibile utilizzare IFNULL per sostituire NULL con un valore predefinito.
Esempio: se il bonus di un dipendente è NULL, impostare il valore predefinito a 0
SELECT name, IFNULL(bonus, 0) AS bonus
FROM employees;
Dati prima dell’esecuzione
| name | bonus |
|---|---|
| Sato | 5000 |
| Suzuki | NULL |
| Takahashi | 8000 |
Dopo aver applicato IFNULL
| name | bonus |
|---|---|
| Sato | 5000 |
| Suzuki | 0 |
| Takahashi | 8000 |
Sostituire NULL con 0 rende l’aggregazione e l’elaborazione correlata più fluida.
3.2 Evita calcoli che includono NULL
In MySQL, il risultato di un calcolo che include NULL diventa NULL.
Pertanto, è necessario utilizzare IFNULL per evitare NULL.
Esempio: Calcola il totale di stipendio e bonus
SELECT name, salary, IFNULL(bonus, 0) AS bonus, salary + IFNULL(bonus, 0) AS total_income
FROM employees;
Dati prima dell’esecuzione
| name | salary | bonus |
|---|---|---|
| Sato | 300000 | 5000 |
| Suzuki | 280000 | NULL |
| Takahashi | 320000 | 8000 |
Dopo aver applicato IFNULL
| name | salary | bonus | total_income |
|---|---|---|---|
| Sato | 300000 | 5000 | 305000 |
| Suzuki | 280000 | 0 | 280000 |
| Takahashi | 320000 | 8000 | 328000 |
Se il bonus è NULL, il totale (salary + bonus) diventa anch’esso NULL, ma applicando IFNULL, MySQL tratta NULL come 0 e calcola correttamente.
3.3 Sostituisci NULL con un’altra stringa
Puoi impostare una stringa predefinita non solo per i numeri, ma anche quando il valore è NULL.
Esempio: Mostra “Non registrato” per gli utenti senza indirizzo email
SELECT id, name, IFNULL(email, 'Not registered') AS email
FROM users;
Dati prima dell’esecuzione
| id | name | |
|---|---|---|
| 1 | Sato | satou@example.com |
| 2 | Suzuki | NULL |
| 3 | Takahashi | takahashi@example.com |
Dopo aver applicato IFNULL
| id | name | |
|---|---|---|
| 1 | Sato | satou@example.com |
| 2 | Suzuki | Not registered |
| 3 | Takahashi | takahashi@example.com |
Se lasciato come NULL, il campo appare vuoto, ma IFNULL lo rende esplicito con “Non registrato”.
3.4 Usa IFNULL in una clausola WHERE
Puoi usare IFNULL in una clausola WHERE per filtrare in base a condizioni che includono valori NULL.
Esempio: Recupera solo gli utenti con valori NULL
SELECT *
FROM users
WHERE IFNULL(email, '') = '';
Questo SQL tratta email come '' (una stringa vuota) quando è NULL, e recupera solo gli utenti la cui email è NULL.
3.5 Metti i valori NULL alla fine in ORDER BY
Normalmente, quando usi ORDER BY, i valori NULL possono apparire per primi, ma puoi usare IFNULL per spostarli alla fine.
Esempio: Posiziona le righe con valori NULL alla fine
SELECT name, salary
FROM employees
ORDER BY IFNULL(salary, 0) ASC;
4. Differenze tra IFNULL e COALESCE
MySQL fornisce più funzioni per gestire i valori NULL, e IFNULL e COALESCE sono spesso confrontati.
Entrambe sostituiscono i valori NULL con alternative, ma il loro utilizzo e comportamento differiscono.
In questa sezione, spieghiamo le differenze tra IFNULL e COALESCE e come scegliere quella giusta.
4.1 Cos’è la funzione COALESCE?
La funzione COALESCE restituisce il primo valore non-NULL tra più argomenti.
In altre parole, mentre IFNULL seleziona il valore non-NULL tra due valori, COALESCE differisce selezionando il primo valore non-NULL tra più candidati.
Sintassi
COALESCE(expr1, expr2, ... , exprN)
- Valuta da sinistra a destra e restituisce il primo valore non-NULL
- Restituisce NULL se tutti gli argomenti sono NULL
Esempio: Sostituire NULL usando COALESCE
SELECT name, COALESCE(phone, email, 'Not registered') AS contact_info
FROM customers;
In questo caso, i valori sono determinati come segue.
- Se
phonenon è NULL, restituiscephone. - Se
phoneè NULL eemailnon è NULL, restituisceemail. - Se sia
phonesiaemailsono NULL, restituisce'Not registered'.
4.2 Differenze tra IFNULL e COALESCE
| Comparison item | IFNULL | COALESCE |
|---|---|---|
| NULL handling | Returns the fallback value if one expression is NULL | Evaluates multiple expressions and returns the first non-NULL value |
| Number of arguments | Only 2 | 2 or more (multiple allowed) |
| Use case | Simple NULL replacement | NULL handling with priority order |
| Execution speed | Fast (compares only 2 values) | Slightly slower (evaluates multiple values in order) |
4.3 Esempi pratici di IFNULL e COALESCE
Esempio 1: Sostituzione semplice di NULL
Con IFNULL, puoi selezionare il valore non-NULL tra due valori.
SELECT name, IFNULL(phone, 'Not registered') AS contact_info
FROM customers;
Risultato
| name | phone | contact_info |
|---|---|---|
| Sato | 080-1234-5678 | 080-1234-5678 |
| Suzuki | NULL | Not registered |
Esempio 2: Preferisci il primo valore non-NULL disponibile
Con COALESCE, puoi recuperare il primo valore non-NULL.
SELECT name, COALESCE(phone, email, 'Not registered') AS contact_info
FROM customers;
Risultato
| name | phone | contact_info | |
|---|---|---|---|
| Sato | 080-1234-5678 | satou@example.com | 080-1234-5678 |
| Suzuki | NULL | suzuki@example.com | suzuki@example.com |
| Takahashi | NULL | NULL | Not registered |
- Se
phonenon è NULL, restituisciphone - Se
phoneè NULL eemailnon è NULL, restituisciemail - Se sia
phonecheemailsono NULL, restituisci'Not registered'
4.4 Come scegliere tra IFNULL e COALESCE
✔ Quando dovresti usare IFNULL
✅ Quando vuoi una semplice sostituzione di NULL con un valore predefinito
✅ Quando due argomenti sono sufficienti (ad esempio, convertire NULL in 0)
✔ Quando dovresti usare COALESCE
✅ Quando vuoi trovare il primo valore non-NULL (ad esempio, phone → email → “Not registered”)
✅ Quando hai bisogno di valutare tre o più valori
4.5 Confronto delle prestazioni tra IFNULL e COALESCE
In generale, IFNULL è più veloce di COALESCE.
Ciò è dovuto al fatto che IFNULL valuta solo due valori, mentre COALESCE valuta più valori in ordine.
Test delle prestazioni
Applicando IFNULL e COALESCE a 1 milione di righe, potresti vedere risultati simili a quanto segue.
| Function | Execution time (seconds) |
|---|---|
IFNULL | 0.02 |
COALESCE | 0.05 |
➡ Con grandi volumi di dati, IFNULL può essere leggermente più veloce.
➡ Tuttavia, se hai bisogno di un solo valore di fallback, usa IFNULL; se vuoi più candidati, usa COALESCE.

5. Funzioni di gestione dei NULL in database diversi da MySQL
MySQL fornisce la funzione IFNULL per gestire i valori NULL, ma altri sistemi di gestione di database (DBMS) utilizzano funzioni diverse.
Nei principali database come Oracle, PostgreSQL e SQL Server, è comune usare funzioni differenti da MySQL per la gestione dei NULL.
Questa sezione spiega come i valori NULL vengono gestiti nei database diversi da MySQL.
5.1 Gestione dei NULL in Oracle: la funzione NVL
In Oracle, la funzione NVL è fornita come equivalente della IFNULL di MySQL.
La funzione NVL restituisce un altro valore quando il valore specificato è NULL.
Sintassi
NVL(expression, fallback_value)
- expression : La colonna o il valore da verificare per NULL
- fallback_value : Il valore da restituire quando è NULL (se non è NULL, l’espressione viene restituita così com’è)
Esempio
SELECT name, NVL(salary, 0) AS salary
FROM employees;
Risultato
| name | salary |
|---|---|
| Sato | 5000 |
| Suzuki | 0 |
| Takahashi | 8000 |
Il comportamento di NVL è quasi identico a quello della IFNULL di MySQL, quindi in Oracle puoi semplicemente usare NVL.
5.2 Gestione dei NULL in PostgreSQL e SQL Server: la funzione COALESCE
In PostgreSQL e SQL Server, la funzione COALESCE è usata per sostituire i valori NULL con alternative.
Questa funzione può restituire il primo valore non-NULL tra più candidati.
Sintassi
COALESCE(expr1, expr2, ..., exprN)
- Valuta da sinistra a destra e restituisce il primo valore non-NULL
- Restituisce NULL se tutti gli argomenti sono NULL
Esempio
SELECT name, COALESCE(phone, email, 'Not registered') AS contact_info
FROM customers;
Risultato
| name | phone | contact_info | |
|---|---|---|---|
| Sato | 080-1234-5678 | satou@example.com | 080-1234-5678 |
| Suzuki | NULL | suzuki@example.com | suzuki@example.com |
| Takahashi | NULL | NULL | Not registered |
Come mostrato sopra, in PostgreSQL e SQL Server, l’uso di COALESCE consente una gestione dei NULL più flessibile rispetto alla IFNULL di MySQL.
5.3 Confronto delle funzioni di gestione dei NULL tra i database
| Database | NULL-handling function | Role |
|---|---|---|
| MySQL | IFNULL(expression, fallback_value) | Convert NULL to a fallback value |
| Oracle | NVL(expression, fallback_value) | Convert NULL to a fallback value (equivalent to IFNULL) |
| PostgreSQL / SQL Server | COALESCE(expr1, expr2, ...) | Return the first non-NULL value |
- Gestione semplice dei NULL →
IFNULL(MySQL) oNVL(Oracle) - Seleziona il valore migliore tra più candidati →
COALESCE(PostgreSQL, SQL Server)
5.4 Note durante la migrazione tra diversi DBMS
Durante la migrazione di sistemi tra diversi database, è necessario prestare attenzione alle differenze nelle funzioni di gestione dei NULL.
In particolare, quando si migra da Oracle a MySQL, è necessario riscrivere NVL in IFNULL.
Esempi di riscrittura durante la migrazione
- Oracle (NVL)
SELECT NVL(salary, 0) AS salary FROM employees;
- MySQL (IFNULL)
SELECT IFNULL(salary, 0) AS salary FROM employees;
- PostgreSQL / SQL Server (COALESCE)
SELECT COALESCE(salary, 0) AS salary FROM employees;
Also, because COALESCE can accept multiple arguments, it is more flexible than Oracle’s NVL or MySQL’s IFNULL.
During migration, it’s important to choose the correct function for the target database.
Durante la migrazione, è importante scegliere la funzione corretta per il database di destinazione.
6. Domande Frequenti (FAQ)
Le domande sulla funzione IFNULL di MySQL e sulla gestione di NULL sono importanti per sviluppatori e amministratori di database.
Questa sezione riassume le domande più comuni su IFNULL.
Q1. La funzione IFNULL e la funzione NVL sono la stessa cosa?
➡ Offrono quasi la stessa funzionalità, ma il nome della funzione differisce a seconda del database.
| Database | NULL-handling function |
|---|---|
| MySQL | IFNULL(expression, fallback_value) |
| Oracle | NVL(expression, fallback_value) |
| PostgreSQL / SQL Server | COALESCE(expr1, expr2, ...) |
In MySQL, usa IFNULL; in Oracle, usa NVL per convertire i valori NULL in un valore di fallback.
Q2. Qual è la differenza tra IFNULL e COALESCE?
➡ IFNULL restituisce il valore non-NULL tra due argomenti, mentre
COALESCE restituisce il primo valore non-NULL tra più argomenti.
| Function | Feature |
|---|---|
IFNULL(a, b) | If a is NULL, return b (only two arguments) |
COALESCE(a, b, c, ...) | Evaluates left to right and returns the first non-NULL value |
Esempi
SELECT IFNULL(NULL, 'Fallback value'); -- Result: 'Fallback value'
SELECT COALESCE(NULL, NULL, 'First non-NULL value'); -- Result: 'First non-NULL value'
✔ Quando dovresti usare IFNULL
✅ Restituire un valore predefinito specifico quando è NULL (ad esempio, se NULL allora 0)
✅ Quando confronti solo due valori
✔ Quando dovresti usare COALESCE
✅ Recuperare il primo valore non-NULL (ad esempio, telefono → email → valore predefinito)
✅ Quando è necessario valutare tre o più valori
Q3. IFNULL può essere usato con tipi di dati diversi dai numeri?
➡ Sì. IFNULL può essere usato con stringhe, date, numeri e altro ancora.
Esempio 1: Uso di stringhe
SELECT name, IFNULL(email, 'Not registered') AS email
FROM users;
Esempio 2: Uso di date
SELECT name, IFNULL(last_login, '2000-01-01') AS last_login
FROM users;
Tuttavia, mescolare tipi di dati diversi (come numeri e stringhe) può causare errori, quindi fai attenzione.
SELECT IFNULL(100, 'Error'); -- May cause an error due to different data types
Q4. L’uso di IFNULL riduce le prestazioni?
➡ In generale, l’impatto sulle prestazioni è minimo, ma può essere rilevante quando si elaborano grandi volumi di dati.
IFNULLè solitamente veloce perché controlla solo due valori- Tuttavia, un uso intensivo di
IFNULLsu dataset molto grandi (milioni di righe) può influenzare l’ottimizzazione degli indici in alcuni casi
🔹 Consigli per l’ottimizzazione delle prestazioni
- Imposta gli indici in modo appropriato
- Query come
IFNULL(colonna, 0) = 100possono impedire l’uso degli indici in alcuni casi - Un approccio è memorizzare i valori con un valore predefinito appropriato invece di NULL fin dall’inizio
IFNULLè più leggero diCOALESCE
- Poiché
COALESCEvaluta più valori in ordine,IFNULLpuò essere più veloce in molti casi
Q5. È possibile usare CASE al posto di IFNULL?
➡ Sì. È possibile ottenere un comportamento simile con CASE, ma diventa più verboso.
Con IFNULL
SELECT name, IFNULL(salary, 0) AS salary
FROM employees;
Con CASE
SELECT name,
CASE WHEN salary IS NULL THEN 0 ELSE salary END AS salary
FROM employees;
✔ IFNULL è conciso e facile da usare
✔ CASE supporta condizioni più flessibili (ad esempio, è possibile includere anche condizioni non-NULL)
Q6. IFNULL può essere usato in una clausola WHERE?
➡ Sì. IFNULL può essere usato all’interno di una clausola WHERE.
Esempio: Sostituire NULL con un valore specifico durante la ricerca
SELECT * FROM users WHERE IFNULL(status, 'Not set') = 'Not set';
Questo recupera i record in cui status è NULL.
Riepilogo
IFNULLeNVLhanno quasi la stessa funzionalità, ma differiscono a seconda del DBMSIFNULLvaluta 2 valori;COALESCEvaluta più valori- Funziona con stringhe, date, numeri e altro
- Per dataset di grandi dimensioni, considera l’ottimizzazione degli indici
- Puoi usare
CASEal posto diIFNULL IFNULLpuò anche essere usato nelle clausoleWHERE
7. Conclusione
In questo articolo, abbiamo trattato in dettaglio la funzione IFNULL di MySQL, inclusa la gestione dei valori NULL, le differenze rispetto ad altre funzioni e esempi pratici.
Infine, rivediamo brevemente quanto abbiamo coperto.
7.1 Cos’è la funzione IFNULL?
IFNULLrestituisce un valore di fallback quando il valore specificato è NULL- Sintassi :
IFNULL(expression, fallback_value)
- Evitando i NULL, è possibile prevenire errori di calcolo e problemi di dati mancanti
7.2 Esempi pratici di IFNULL
- Sostituire NULL con un valore predefinito (0 o una stringa specifica)
SELECT name, IFNULL(bonus, 0) AS bonus FROM employees;
- Gestire correttamente i calcoli che includono NULL
SELECT name, salary + IFNULL(bonus, 0) AS total_income FROM employees;
- Convertire NULL in una stringa appropriata, ad esempio “Non registrato”
SELECT id, IFNULL(email, 'Not registered') AS email FROM users;
- Utilizzare nelle clausole
WHEREper filtrare i valori NULLSELECT * FROM users WHERE IFNULL(status, 'Not set') = 'Not set';
7.3 Differenze tra IFNULL e COALESCE
IFNULLrestituisce il valore non-NULL tra due argomentiCOALESCErestituisce il primo valore non-NULL tra più argomenti- Come scegliere
- Gestione semplice dei NULL →
IFNULL - Seleziona il primo valore non-NULL →
COALESCE
7.4 Gestione dei NULL in altri DBMS
| Database | NULL-handling function |
|---|---|
| MySQL | IFNULL(expression, fallback_value) |
| Oracle | NVL(expression, fallback_value) |
| PostgreSQL / SQL Server | COALESCE(expr1, expr2, ...) |
NVLdi Oracle è quasi identico aIFNULLdi MySQL- PostgreSQL e SQL Server usano comunemente
COALESCE - Durante la migrazione, è necessario sostituire le funzioni in modo appropriato
7.5 Prestazioni e avvertenze per IFNULL
IFNULLè più leggero diCOALESCE- Con grandi set di dati, le prestazioni possono degradarsi se l’ottimizzazione degli indici è influenzata
- Fai attenzione a mantenere i tipi di dato coerenti (non mescolare tipi numerici e stringa)
7.6 Conclusioni finali
- In MySQL, usa
IFNULLper gestire correttamente i NULL - Puoi elaborare i dati senza essere influenzato dai NULL
- Comprendi le differenze rispetto a
COALESCEeNVLe utilizza la funzione corretta - Durante la migrazione tra database, presta attenzione alle differenze nelle funzioni di gestione dei NULL


