Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL ISNULL() expliqué

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 |
+-------+-----------+---------+---------+------+