- 1 1. Introduction
- 2 2. Qu’est‑ce que la fonction IFNULL ?
- 3 3. Exemples pratiques de la fonction IFNULL
- 4 3.5 Placer les valeurs NULL en dernier dans ORDER BY
- 5 4. Différences entre IFNULL et COALESCE
- 6 5. Fonctions de gestion des NULL dans les bases de données autres que MySQL
- 7 6. Questions fréquemment posées (FAQ)
- 7.1 Q1. La fonction IFNULL et la fonction NVL sont-elles les mêmes ?
- 7.2 Q2. Quelle est la différence entre IFNULL et COALESCE ?
- 7.3 Q3. IFNULL peut-il être utilisé avec des types de données autres que les nombres ?
- 7.4 Q4. L’utilisation de IFNULL réduit-elle les performances ?
- 7.5 Q5. Peut-on utiliser CASE au lieu de IFNULL ?
- 7.6 Q6. IFNULL peut-il être utilisé dans une clause WHERE ?
- 7.7 Résumé
- 8 7. Conclusion
1. Introduction
Lorsque vous travaillez avec des bases de données, la gestion des valeurs NULL est un point crucial.
En particulier, il n’est pas rare que les personnes habituées à la fonction NVL d’Oracle constatent que NVL n’est pas disponible lors de la migration vers MySQL.
Dans MySQL, vous pouvez gérer correctement les valeurs NULL en utilisant la fonction IFNULL à la place de NVL.
Cet article explique en détail comment travailler avec les valeurs NULL dans MySQL, en couvrant l’utilisation de IFNULL et ses différences avec les autres fonctions de gestion des NULL.
1.1 Qu’est‑ce qu’une valeur NULL ?
Dans les bases de données, NULL signifie « aucune valeur n’a été définie ».
Comme cela est différent de « 0 » ou d’une « chaîne vide », ne pas le gérer correctement peut entraîner des erreurs inattendues ou des résultats de requête incorrects.
Par exemple, supposons que vous ayez les données suivantes.
| ID | Name | Age |
|---|---|---|
| 1 | Yamada | 25 |
| 2 | Sato | NULL |
| 3 | Suzuki | 30 |
Dans les données ci‑dessus, l’âge de l’ID « 2 » (Sato) est NULL.
Si vous exécutez les calculs tels quels, vous pouvez obtenir des erreurs ou des résultats non souhaités.
1.2 Comment MySQL gère les valeurs NULL
2. Qu’est‑ce que la fonction IFNULL ?
MySQL fournit la fonction IFNULL comme fonction permettant de remplacer les valeurs NULL par une autre valeur.
Elle joue un rôle similaire à la fonction NVL d’Oracle.
En gérant correctement les valeurs NULL, vous pouvez éviter les problèmes de calcul causés par des données manquantes et créer des requêtes SQL plus stables.
Examinons de plus près l’utilisation de base de IFNULL.
2.1 Syntaxe de base de IFNULL
La syntaxe de base de la fonction IFNULL est la suivante.
IFNULL(expression, fallback_value)
- expression : la colonne ou la valeur à vérifier pour NULL
- fallback_value : la valeur à renvoyer lorsque l’expression est NULL (si elle n’est pas NULL, l’expression est renvoyée telle quelle)
Par exemple, considérez la requête SQL suivante.
SELECT IFNULL(NULL, 'Fallback value');
Dans ce cas, comme NULL est spécifié, le résultat devient 'Fallback value'.
| Result |
|---|
| Fallback value |
En revanche, si vous spécifiez une valeur non NULL, cette valeur est renvoyée telle quelle.
SELECT IFNULL('Hello', 'Fallback value');
| Result |
|---|
| Hello |
2.2 Principales caractéristiques de IFNULL
La fonction IFNULL possède les caractéristiques suivantes.
- Elle peut convertir les valeurs NULL en une valeur spécifique
- Vous pouvez définir une valeur par défaut alternative pour les colonnes susceptibles de contenir des NULL.
- Elle utilise une syntaxe simple
- Elle est plus simple à écrire que l’utilisation d’une expression
CASE.
- Vous devez prendre en compte les types de données
- Il est recommandé que les arguments de
IFNULLsoient du même type de données.
Par exemple, la requête SQL suivante peut provoquer une erreur.
SELECT IFNULL(100, 'Error');
Raison : un type numérique (100) et un type chaîne de caractères (‘Error’) sont mélangés.
Dans ce cas, la valeur de secours doit également être numérique.
SELECT IFNULL(100, 0);
2.3 Quand devez‑vous utiliser IFNULL
Voici quelques situations pratiques où IFNULL est utile.
- Définir une valeur par défaut pour les NULL
- Par exemple, si la prime d’un employé est NULL, la définir à 0.
SELECT name, IFNULL(bonus, 0) AS bonus FROM employees;
- Éviter les calculs impliquant des NULL
- Si vous calculez avec un NULL tel quel, le résultat devient également NULL.
- Utiliser
IFNULLpour éviter le NULL permet d’obtenir le calcul souhaité.SELECT name, salary, IFNULL(bonus, 0) AS bonus, salary + IFNULL(bonus, 0) AS total_income FROM employees;
- Gérer correctement les NULL dans les rapports et les agrégations
- Si des NULL sont présents lors de l’analyse, des rapports incorrects peuvent être produits.
- En remplaçant les NULL par une valeur spécifique avec
IFNULL, vous pouvez traiter les données de façon cohérente.
3. Exemples pratiques de la fonction IFNULL
Dans la section précédente, nous avons expliqué les bases de la fonction IFNULL.
Dans cette section, nous présenterons des exemples concrets d’utilisation avec des données réelles.
3.1 Remplacer les valeurs NULL par une valeur par défaut
Si une table contient des valeurs NULL, cela peut entraîner un comportement inattendu.
Pour résoudre ce problème, vous pouvez utiliser IFNULL afin de remplacer les NULL par une valeur par défaut.
Exemple : Si la prime d’un employé est NULL, définir la valeur par défaut à 0
SELECT name, IFNULL(bonus, 0) AS bonus
FROM employees;
Données avant exécution
| name | bonus |
|---|---|
| Sato | 5000 |
| Suzuki | NULL |
| Takahashi | 8000 |
Après application de IFNULL
| name | bonus |
|---|---|
| Sato | 5000 |
| Suzuki | 0 |
| Takahashi | 8000 |
Remplacer NULL par 0 rend l’agrégation et le traitement associé plus fluides.
3.2 Éviter les calculs qui incluent NULL
Dans MySQL, le résultat d’un calcul qui inclut NULL devient NULL.
Par conséquent, vous devez utiliser IFNULL pour éviter NULL.
Exemple : Calculer le total du salaire et de la prime
SELECT name, salary, IFNULL(bonus, 0) AS bonus, salary + IFNULL(bonus, 0) AS total_income
FROM employees;
Données avant exécution
| name | salary | bonus |
|---|---|---|
| Sato | 300000 | 5000 |
| Suzuki | 280000 | NULL |
| Takahashi | 320000 | 8000 |
Après application de IFNULL
| name | salary | bonus | total_income |
|---|---|---|---|
| Sato | 300000 | 5000 | 305000 |
| Suzuki | 280000 | 0 | 280000 |
| Takahashi | 320000 | 8000 | 328000 |
Si la prime est NULL, le total (salary + bonus) devient également NULL,
mais en appliquant IFNULL, MySQL considère NULL comme 0 et calcule correctement.
3.3 Remplacer NULL par une autre chaîne
Vous pouvez définir une chaîne par défaut non seulement pour les nombres, mais aussi lorsque la valeur est NULL.
Exemple : Afficher « Non enregistré » pour les utilisateurs sans adresse e‑mail
SELECT id, name, IFNULL(email, 'Not registered') AS email
FROM users;
Données avant exécution
| id | name | |
|---|---|---|
| 1 | Sato | satou@example.com |
| 2 | Suzuki | NULL |
| 3 | Takahashi | takahashi@example.com |
Après application de IFNULL
| id | name | |
|---|---|---|
| 1 | Sato | satou@example.com |
| 2 | Suzuki | Not registered |
| 3 | Takahashi | takahashi@example.com |
Si laissé à NULL, le champ apparaît vide, mais IFNULL le rend explicite avec « Non enregistré ».
3.4 Utiliser IFNULL dans une clause WHERE
Vous pouvez utiliser IFNULL dans une clause WHERE pour filtrer en fonction de conditions incluant des valeurs NULL.
Exemple : Récupérer uniquement les utilisateurs avec des valeurs NULL
SELECT *
FROM users
WHERE IFNULL(email, '') = '';
Ce SQL considère email comme '' (une chaîne vide) lorsqu’il est NULL, et récupère uniquement les utilisateurs dont l’e‑mail est NULL.
3.5 Placer les valeurs NULL en dernier dans ORDER BY
Normalement, lorsque vous utilisez ORDER BY, les valeurs NULL peuvent apparaître en premier, mais vous pouvez utiliser IFNULL pour les déplacer à la fin.
Exemple : Placer les lignes avec des valeurs NULL en dernier
SELECT name, salary
FROM employees
ORDER BY IFNULL(salary, 0) ASC;
4. Différences entre IFNULL et COALESCE
MySQL propose plusieurs fonctions pour gérer les valeurs NULL, et IFNULL et COALESCE sont souvent comparés.
Les deux remplacent les valeurs NULL par des alternatives, mais leur utilisation et leur comportement diffèrent.
Dans cette section, nous expliquons les différences entre IFNULL et COALESCE et comment choisir le bon.
4.1 Qu’est-ce que la fonction COALESCE ?
La fonction COALESCE renvoie la première valeur non-NULL parmi plusieurs arguments.
En d’autres termes, alors que IFNULL sélectionne la valeur non-NULL entre deux valeurs,
COALESCE diffère en sélectionnant la première valeur non-NULL parmi plusieurs candidats.
Syntaxe
COALESCE(expr1, expr2, ... , exprN)
- Évalue de gauche à droite et renvoie la première valeur non-NULL
- Renvoie NULL si tous les arguments sont NULL
Exemple : Remplacer NULL avec COALESCE
SELECT name, COALESCE(phone, email, 'Not registered') AS contact_info
FROM customers;
Dans ce cas, les valeurs sont déterminées comme suit.
- Si
phonen’est pas NULL, renvoyerphone. - Si
phoneest NULL et queemailn’est pas NULL, renvoyeremail. - Si
phoneetemailsont tous deux NULL, renvoyer'Not registered'.
4.2 Différences entre IFNULL et 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 Exemples pratiques de IFNULL et COALESCE
Exemple 1 : Remplacement simple de NULL
Avec IFNULL, vous pouvez sélectionner la valeur non-NULL entre deux valeurs.
SELECT name, IFNULL(phone, 'Not registered') AS contact_info
FROM customers;
Résultat
| name | phone | contact_info |
|---|---|---|
| Sato | 080-1234-5678 | 080-1234-5678 |
| Suzuki | NULL | Not registered |
Exemple 2 : Préférer la première valeur non-NULL disponible
Avec COALESCE, vous pouvez récupérer la première valeur non-NULL.
SELECT name, COALESCE(phone, email, 'Not registered') AS contact_info
FROM customers;
Résultat
| 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 |
- Si
phonen’est pas NULL, renvoyezphone - Si
phoneest NULL et queemailn’est pas NULL, renvoyezemail - Si
phoneetemailsont tous deux NULL, renvoyez'Non enregistré'
4.4 Comment choisir entre IFNULL et COALESCE
✔ Quand vous devez utiliser IFNULL
✅ Lorsque vous voulez un remplacement simple de NULL par une valeur par défaut
✅ Lorsque deux arguments suffisent (par ex., convertir NULL en 0)
✔ Quand vous devez utiliser COALESCE
✅ Lorsque vous voulez trouver la première valeur non-NULL (par ex., téléphone → email → « Non enregistré »)
✅ Lorsque vous devez évaluer trois valeurs ou plus
4.5 Comparaison des performances entre IFNULL et COALESCE
En général, IFNULL est plus rapide que COALESCE.
Cela s’explique par le fait que IFNULL évalue seulement deux valeurs, tandis que COALESCE évalue plusieurs valeurs dans l’ordre.
Test de performance
Lors de l’application de IFNULL et COALESCE à 1 million de lignes, vous pouvez obtenir des résultats similaires à ceux-ci.
| Function | Execution time (seconds) |
|---|---|
IFNULL | 0.02 |
COALESCE | 0.05 |
➡ Avec de gros volumes de données, IFNULL peut être légèrement plus rapide.
➡ Cependant, si vous n’avez besoin que d’un seul secours, utilisez IFNULL ; si vous voulez plusieurs candidats, utilisez COALESCE.

5. Fonctions de gestion des NULL dans les bases de données autres que MySQL
MySQL fournit la fonction IFNULL pour gérer les valeurs NULL, mais d’autres systèmes de gestion de bases de données (SGBD) utilisent des fonctions différentes.
Dans les principales bases de données comme Oracle, PostgreSQL et SQL Server, il est courant d’utiliser des fonctions qui diffèrent de MySQL pour la gestion des NULL.
Cette section explique comment les valeurs NULL sont gérées dans les bases de données autres que MySQL.
5.1 Gestion des NULL dans Oracle : la fonction NVL
Dans Oracle, la fonction NVL est fournie comme équivalent de IFNULL de MySQL.
La fonction NVL renvoie une autre valeur lorsque la valeur spécifiée est NULL.
Syntaxe
NVL(expression, fallback_value)
- expression : La colonne ou la valeur à vérifier pour NULL
- fallback_value : La valeur à renvoyer lorsque NULL (si non NULL, l’expression est renvoyée telle quelle)
Exemple
SELECT name, NVL(salary, 0) AS salary
FROM employees;
Résultat
| name | salary |
|---|---|
| Sato | 5000 |
| Suzuki | 0 |
| Takahashi | 8000 |
Le comportement de NVL est presque identique à celui de IFNULL de MySQL, donc dans Oracle vous pouvez simplement utiliser NVL.
5.2 Gestion des NULL dans PostgreSQL et SQL Server : la fonction COALESCE
Dans PostgreSQL et SQL Server, la fonction COALESCE est utilisée pour remplacer les valeurs NULL par des alternatives.
Cette fonction peut renvoyer la première valeur non-NULL parmi plusieurs candidats.
Syntaxe
COALESCE(expr1, expr2, ..., exprN)
- Évalue de gauche à droite et renvoie la première valeur non-NULL
- Renvoie NULL si tous les arguments sont NULL
Exemple
SELECT name, COALESCE(phone, email, 'Not registered') AS contact_info
FROM customers;
Résultat
| 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 |
Comme indiqué ci-dessus, dans PostgreSQL et SQL Server, l’utilisation de COALESCE permet une gestion des NULL plus flexible que IFNULL de MySQL.
5.3 Comparaison des fonctions de gestion des NULL selon les bases de données
| 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 |
- Gestion simple des NULL →
IFNULL(MySQL) ouNVL(Oracle) - Sélection de la meilleure valeur parmi plusieurs candidats →
COALESCE(PostgreSQL, SQL Server)
5.4 Remarques lors de la migration entre différents SGBD
Lors de la migration de systèmes entre différentes bases de données, vous devez prêter attention aux différences des fonctions de gestion des NULL.
En particulier, lors de la migration d’Oracle vers MySQL, vous devez réécrire NVL en IFNULL.
Exemples de réécriture lors de la migration
- 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;
Aussi, parce que COALESCE peut accepter plusieurs arguments, il est plus flexible que NVL d’Oracle ou IFNULL de MySQL.
Lors de la migration, il est important de choisir la fonction correcte pour la base de données cible.
6. Questions fréquemment posées (FAQ)
Les questions sur la fonction IFNULL de MySQL et la gestion des NULL sont importantes pour les développeurs et les administrateurs de bases de données.
Cette section résume les questions courantes sur IFNULL.
Q1. La fonction IFNULL et la fonction NVL sont-elles les mêmes ?
➡ Elles offrent presque la même fonctionnalité, mais le nom de la fonction diffère selon la base de données.
| Database | NULL-handling function |
|---|---|
| MySQL | IFNULL(expression, fallback_value) |
| Oracle | NVL(expression, fallback_value) |
| PostgreSQL / SQL Server | COALESCE(expr1, expr2, ...) |
En MySQL, utilisez IFNULL ; en Oracle, utilisez NVL pour convertir les valeurs NULL en une valeur de repli.
Q2. Quelle est la différence entre IFNULL et COALESCE ?
➡ IFNULL retourne la valeur non-NULL entre deux arguments, tandis que
COALESCE retourne la première valeur non-NULL parmi plusieurs arguments.
| 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 |
Exemples
SELECT IFNULL(NULL, 'Fallback value'); -- Result: 'Fallback value'
SELECT COALESCE(NULL, NULL, 'First non-NULL value'); -- Result: 'First non-NULL value'
✔ Quand utiliser IFNULL
✅ Retourner une valeur par défaut spécifique en cas de NULL (par ex., si NULL alors 0)
✅ Lorsque vous comparez deux valeurs seulement
✔ Quand utiliser COALESCE
✅ Récupérer la première valeur non-NULL (par ex., téléphone → email → valeur par défaut)
✅ Lorsque vous devez évaluer trois valeurs ou plus
Q3. IFNULL peut-il être utilisé avec des types de données autres que les nombres ?
➡ Oui. IFNULL peut être utilisé avec des chaînes, des dates, des nombres, et plus encore.
Exemple 1 : Utilisation avec des chaînes
SELECT name, IFNULL(email, 'Not registered') AS email
FROM users;
Exemple 2 : Utilisation avec des dates
SELECT name, IFNULL(last_login, '2000-01-01') AS last_login
FROM users;
Cependant, mélanger différents types de données (tels que nombres et chaînes) peut causer des erreurs, alors soyez prudent.
SELECT IFNULL(100, 'Error'); -- May cause an error due to different data types
Q4. L’utilisation de IFNULL réduit-elle les performances ?
➡ En général, l’impact sur les performances est minime, mais cela peut compter lors du traitement de grands volumes de données.
IFNULLest généralement rapide car il vérifie seulement deux valeurs- Cependant, une utilisation intensive de
IFNULLsur de très grands ensembles de données (millions de lignes) peut affecter l’optimisation des index dans certains cas
🔹 Conseils d’optimisation des performances
- Définir les index de manière appropriée
- Des requêtes comme
IFNULL(column, 0) = 100peuvent empêcher l’utilisation des index dans certains cas - Une approche consiste à stocker les valeurs avec une valeur par défaut appropriée au lieu de NULL dès le départ
IFNULLest plus léger queCOALESCE
- Parce que
COALESCEévalue plusieurs valeurs dans l’ordre,IFNULLpeut être plus rapide dans de nombreux cas
Q5. Peut-on utiliser CASE au lieu de IFNULL ?
➡ Oui. Vous pouvez obtenir un comportement similaire avec CASE, mais cela devient plus verbeux.
Avec IFNULL
SELECT name, IFNULL(salary, 0) AS salary
FROM employees;
Avec CASE
SELECT name,
CASE WHEN salary IS NULL THEN 0 ELSE salary END AS salary
FROM employees;
✔ IFNULL est concis et facile à utiliser
✔ CASE prend en charge des conditions plus flexibles (par ex., vous pouvez inclure des conditions non-NULL également)
Q6. IFNULL peut-il être utilisé dans une clause WHERE ?
➡ Oui. IFNULL peut être utilisé à l’intérieur d’une clause WHERE.
Exemple : Remplacer NULL par une valeur spécifique lors de la recherche
SELECT * FROM users WHERE IFNULL(status, 'Not set') = 'Not set';
Cela récupère les enregistrements où status est NULL.
Résumé
IFNULLetNVLont presque la même fonctionnalité, mais diffèrent selon le SGBDIFNULLévalue 2 valeurs ;COALESCEévalue plusieurs valeurs- Fonctionne avec des chaînes, des dates, des nombres, et plus encore
- Pour les grands ensembles de données, envisagez l’optimisation des index
- Vous pouvez utiliser
CASEau lieu deIFNULL IFNULLpeut aussi être utilisé dans les clausesWHERE
7. Conclusion
Dans cet article, nous avons étudié en détail la fonction IFNULL de MySQL, y compris la façon de gérer les valeurs NULL, ses différences avec d’autres fonctions et des exemples pratiques.
Enfin, passons en revue brièvement ce que nous avons couvert.
7.1 Qu’est‑ce que la fonction IFNULL ?
IFNULLrenvoie une valeur de secours lorsque la valeur spécifiée est NULL- Syntaxe :
IFNULL(expression, fallback_value)
- En évitant les NULL, vous pouvez prévenir les erreurs de calcul et les problèmes de données manquantes
7.2 Exemples pratiques de IFNULL
- Remplacer NULL par une valeur par défaut (0 ou une chaîne spécifique)
SELECT name, IFNULL(bonus, 0) AS bonus FROM employees;
- Gérer correctement les calculs incluant des NULL
SELECT name, salary + IFNULL(bonus, 0) AS total_income FROM employees;
- Convertir NULL en une chaîne appropriée telle que « Non enregistré »
SELECT id, IFNULL(email, 'Not registered') AS email FROM users;
- Utiliser dans les clauses
WHEREpour filtrer les valeurs NULLSELECT * FROM users WHERE IFNULL(status, 'Not set') = 'Not set';
7.3 Différences entre IFNULL et COALESCE
IFNULLrenvoie la valeur non‑NULL parmi deux argumentsCOALESCErenvoie la première valeur non‑NULL parmi plusieurs arguments- Comment choisir
- Gestion simple des NULL →
IFNULL - Sélectionner la première valeur non‑NULL →
COALESCE
7.4 Gestion des NULL dans d’autres SGBD
| Database | NULL-handling function |
|---|---|
| MySQL | IFNULL(expression, fallback_value) |
| Oracle | NVL(expression, fallback_value) |
| PostgreSQL / SQL Server | COALESCE(expr1, expr2, ...) |
- Le
NVLd’Oracle est presque identique àIFNULLde MySQL - PostgreSQL et SQL Server utilisent généralement
COALESCE - Lors d’une migration, vous devez remplacer les fonctions de manière appropriée
7.5 Performances et précautions pour IFNULL
IFNULLest plus léger queCOALESCE- Avec de grands ensembles de données, les performances peuvent se dégrader si l’optimisation des index est affectée
- Veillez à garder les types de données cohérents (ne mélangez pas types numériques et chaînes)
7.6 Conclusions finales
- Dans MySQL, utilisez
IFNULLpour gérer correctement les NULL - Vous pouvez traiter les données sans être impacté par les NULL
- Comprenez les différences avec
COALESCEetNVLet utilisez la fonction appropriée - Lors de la migration entre bases de données, faites attention aux différences des fonctions de gestion des NULL


