Dans MySQL, le ISNULL()
la fonction permet de vérifier si une valeur est null
ou pas. Si c'est null
, puis 1
est retourné, sinon 0
est renvoyé.
Syntaxe
ISNULL(expr)
Exemple
Voici un exemple simple pour illustrer :
SELECT ISNULL( null );
Résultat :
1
Dans ce cas, l'expression est null
et donc la sortie est 1
.
Le voici avec un non-null
valeur :
SELECT ISNULL( 'Cake' );
Résultat :
0
Cette fois, le résultat est 0
(car l'expression n'est pas null
).
Expressions
ISNULL()
vérifie le résultat de toute expression. Donc, si nous faisons ce qui suit, par exemple :
SELECT ISNULL( 3 / 0 );
Nous obtenons ceci :
1
Donc, bien que nous n'ayons pas spécifié null
en argument, le résultat de l'expression est null
, et donc ISNULL()
renvoie 1
.
Cela peut être démontré plus clairement avec l'exemple suivant :
SELECT
3 / 0,
ISNULL( 3 / 0 );
Résultat :
+-------+-----------------+ | 3 / 0 | ISNULL( 3 / 0 ) | +-------+-----------------+ | NULL | 1 | +-------+-----------------+ 1 row in set, 2 warnings (0.00 sec)
Dans la première colonne, nous pouvons voir que le calcul lui-même a donné une valeur nulle, et donc la deuxième colonne a renvoyé 1
.
Pendant que nous y sommes, voici les avertissements :
SHOW WARNINGS
Résultat :
+---------+------+---------------+ | Level | Code | Message | +---------+------+---------------+ | Warning | 1365 | Division by 0 | | Warning | 1365 | Division by 0 | +---------+------+---------------+
Nous sommes avertis que nous avons essayé de diviser par zéro (ce qui donne une valeur nulle).
Exemple de base de données
Supposons que nous ayons une table de base de données comme celle-ci :
SELECT * FROM Pets;
Résultat :
+-------+-----------+---------+---------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | +-------+-----------+---------+---------+------------+ | 1 | 2 | 3 | Fluffy | 2020-11-20 | | 2 | 3 | 3 | Fetch | 2019-08-16 | | 3 | 2 | 2 | Scratch | 2018-10-01 | | 4 | 3 | 3 | Wag | 2020-03-15 | | 5 | 1 | 1 | Tweet | 2020-11-28 | | 6 | 3 | 4 | Fluffy | 2020-09-17 | | 7 | 3 | 2 | Bark | NULL | | 8 | 2 | 4 | Meow | NULL | | 9 | 3 | 1 | Woof | 2020-10-03 | | 10 | 4 | 5 | Ears | 2022-01-11 | +-------+-----------+---------+---------+------------+
Voici une requête qui utilise le ISNULL()
fonction sur cette table :
SELECT
PetId,
PetName,
ISNULL( DOB ) AS "DOB is Missing?"
FROM Pets;
Résultat :
+-------+---------+-----------------+ | PetId | PetName | DOB is Missing? | +-------+---------+-----------------+ | 1 | Fluffy | 0 | | 2 | Fetch | 0 | | 3 | Scratch | 0 | | 4 | Wag | 0 | | 5 | Tweet | 0 | | 6 | Fluffy | 0 | | 7 | Bark | 1 | | 8 | Meow | 1 | | 9 | Woof | 0 | | 10 | Ears | 0 | +-------+---------+-----------------+
Dans ce cas, nous avons créé une colonne qui affiche 1
pour tous les animaux qui n'ont rien dans leur colonne DDN.
Disons que nous voulons renvoyer tous les animaux de compagnie qui n'ont pas de date de naissance répertoriée (c'est-à-dire leur DOB
le champ est null
). Dans ce cas, nous pouvons procéder comme suit :
SELECT * FROM Pets
WHERE ISNULL(DOB) = 1;
Résultat :
+-------+-----------+---------+---------+------+ | PetId | PetTypeId | OwnerId | PetName | DOB | +-------+-----------+---------+---------+------+ | 7 | 3 | 2 | Bark | NULL | | 8 | 2 | 4 | Meow | NULL | +-------+-----------+---------+---------+------+
Cela donne le même résultat que de faire ce qui suit :
SELECT * FROM Pets
WHERE DOB IS NULL;
Résultat :
+-------+-----------+---------+---------+------+ | PetId | PetTypeId | OwnerId | PetName | DOB | +-------+-----------+---------+---------+------+ | 7 | 3 | 2 | Bark | NULL | | 8 | 2 | 4 | Meow | NULL | +-------+-----------+---------+---------+------+