Guide de la fonction IFNULL de MySQL : Remplacer les valeurs NULL (alternative à Oracle NVL)

目次

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.

IDNameAge
1Yamada25
2SatoNULL
3Suzuki30

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.

  1. 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.
  1. Elle utilise une syntaxe simple
  • Elle est plus simple à écrire que l’utilisation d’une expression CASE.
  1. Vous devez prendre en compte les types de données
  • Il est recommandé que les arguments de IFNULL soient 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.

  1. 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;
    
  1. Éviter les calculs impliquant des NULL
  • Si vous calculez avec un NULL tel quel, le résultat devient également NULL.
  • Utiliser IFNULL pour é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;
    
  1. 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

namebonus
Sato5000
SuzukiNULL
Takahashi8000

Après application de IFNULL

namebonus
Sato5000
Suzuki0
Takahashi8000

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

namesalarybonus
Sato3000005000
Suzuki280000NULL
Takahashi3200008000

Après application de IFNULL

namesalarybonustotal_income
Sato3000005000305000
Suzuki2800000280000
Takahashi3200008000328000

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

idnameemail
1Satosatou@example.com
2SuzukiNULL
3Takahashitakahashi@example.com

Après application de IFNULL

idnameemail
1Satosatou@example.com
2SuzukiNot registered
3Takahashitakahashi@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.

  1. Si phone n’est pas NULL, renvoyer phone.
  2. Si phone est NULL et que email n’est pas NULL, renvoyer email.
  3. Si phone et email sont tous deux NULL, renvoyer 'Not registered'.

4.2 Différences entre IFNULL et COALESCE

Comparison itemIFNULLCOALESCE
NULL handlingReturns the fallback value if one expression is NULLEvaluates multiple expressions and returns the first non-NULL value
Number of argumentsOnly 22 or more (multiple allowed)
Use caseSimple NULL replacementNULL handling with priority order
Execution speedFast (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

namephonecontact_info
Sato080-1234-5678080-1234-5678
SuzukiNULLNot 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

namephoneemailcontact_info
Sato080-1234-5678satou@example.com080-1234-5678
SuzukiNULLsuzuki@example.comsuzuki@example.com
TakahashiNULLNULLNot registered
  • Si phone n’est pas NULL, renvoyez phone
  • Si phone est NULL et que email n’est pas NULL, renvoyez email
  • Si phone et email sont 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.

FunctionExecution time (seconds)
IFNULL0.02
COALESCE0.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

namesalary
Sato5000
Suzuki0
Takahashi8000

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

namephoneemailcontact_info
Sato080-1234-5678satou@example.com080-1234-5678
SuzukiNULLsuzuki@example.comsuzuki@example.com
TakahashiNULLNULLNot 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

DatabaseNULL-handling functionRole
MySQLIFNULL(expression, fallback_value)Convert NULL to a fallback value
OracleNVL(expression, fallback_value)Convert NULL to a fallback value (equivalent to IFNULL)
PostgreSQL / SQL ServerCOALESCE(expr1, expr2, ...)Return the first non-NULL value
  • Gestion simple des NULLIFNULL (MySQL) ou NVL (Oracle)
  • Sélection de la meilleure valeur parmi plusieurs candidatsCOALESCE (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.

DatabaseNULL-handling function
MySQLIFNULL(expression, fallback_value)
OracleNVL(expression, fallback_value)
PostgreSQL / SQL ServerCOALESCE(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.

FunctionFeature
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.

  • IFNULL est généralement rapide car il vérifie seulement deux valeurs
  • Cependant, une utilisation intensive de IFNULL sur 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

  1. Définir les index de manière appropriée
  • Des requêtes comme IFNULL(column, 0) = 100 peuvent 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
  1. IFNULL est plus léger que COALESCE
  • Parce que COALESCE évalue plusieurs valeurs dans l’ordre, IFNULL peut ê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é

  • IFNULL et NVL ont presque la même fonctionnalité, mais diffèrent selon le SGBD
  • IFNULL é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 CASE au lieu de IFNULL
  • IFNULL peut aussi être utilisé dans les clauses WHERE

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 ?

  • IFNULL renvoie 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 WHERE pour filtrer les valeurs NULL
    SELECT * FROM users WHERE IFNULL(status, 'Not set') = 'Not set';
    

7.3 Différences entre IFNULL et COALESCE

  • IFNULL renvoie la valeur non‑NULL parmi deux arguments
  • COALESCE renvoie 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

DatabaseNULL-handling function
MySQLIFNULL(expression, fallback_value)
OracleNVL(expression, fallback_value)
PostgreSQL / SQL ServerCOALESCE(expr1, expr2, ...)
  • Le NVL d’Oracle est presque identique à IFNULL de 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

  • IFNULL est plus léger que COALESCE
  • 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 IFNULL pour gérer correctement les NULL
  • Vous pouvez traiter les données sans être impacté par les NULL
  • Comprenez les différences avec COALESCE et NVL et 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