MySQL IS NULL et IS NOT NULL avec des exemples
⚡ Résumé intelligent
MySQL Les mots-clés IS NULL et IS NOT NULL permettent de comparer les données d'une colonne et de déterminer si elle contient une valeur manquante. La valeur NULL indique l'absence de données, se comporte différemment de zéro ou d'une chaîne vide et nécessite des opérateurs spécifiques pour un filtrage fiable.
En SQL, NULL est à la fois une valeur et un mot-clé. Commençons par examiner la valeur NULL.
Qu'est-ce que NULL dans MySQL?
En termes simples, NULL est un espace réservé pour des données qui n'existent pas.Lors d'opérations d'insertion dans des tables, il arrive que certaines valeurs de champs ne soient pas disponibles.
Afin de répondre aux exigences des véritables systèmes de gestion de bases de données relationnelles, MySQL Utilise la valeur NULL comme espace réservé pour les valeurs non soumises. La capture d'écran ci-dessous illustre l'apparence des valeurs NULL dans une table de base de données.
Notez que les cellules vides sont marquées NULL, et non pas « texte vide » ou « zéro ». Avant d’aller plus loin, examinons quelques notions de base sur la valeur NULL.
- NULL n'est pas un type de données – cela signifie qu'il n'est pas reconnu comme un « int », une « date » ou tout autre type de données défini.
- Opérations arithmétiques impliquant NULL toujours retourner NULL, par exemple, 69 + NULL = NULL.
- pont fonctions d'agrégation ignorer les lignes contenant des valeurs NULLLa seule exception est COUNT(*), qui compte chaque ligne indépendamment de la valeur NULL.
Comment les fonctions d'agrégation traitent les valeurs NULL
Cette règle modifie les réponses renvoyées par les requêtes de reporting ; démontrons-le. Commençons par le contenu actuel de la table des membres.
SELECT * FROM `members`;
L'exécution du script ci-dessus nous donne les résultats suivants.
| membership_ number | full_ names | gender | date_of_ birth | physical_ address | postal_ address | contact_ number | |
|---|---|---|---|---|---|---|---|
| 1 | Janet Jones | Female | 21-07-1980 | First Street Plot No 4 | Private Bag | 0759 253 542 | janetjones@yagoo.cm |
| 2 | Janet Smith Jones | Female | 23-06-1980 | Melrose 123 | NULL | NULL | jj@fstreet.com |
| 3 | Robert Phil | Male | 12-07-1989 | 3rd Street 34 | NULL | 12345 | rm@tstreet.com |
| 4 | Gloria Williams | Female | 14-02-1984 | 2nd Street 23 | NULL | NULL | NULL |
| 5 | Leonard Hofstadter | Male | NULL | Woodcrest | NULL | 845738767 | NULL |
| 6 | Sheldon Cooper | Male | NULL | Woodcrest | NULL | 976736763 | NULL |
| 7 | Rajesh Koothrappali | Male | NULL | Woodcrest | NULL | 938867763 | NULL |
| 8 | Leslie Winkle | Male | 14-02-1984 | Woodcrest | NULL | 987636553 | NULL |
| 9 | Howard Wolowitz | Male | 24-08-1981 | SouthPark | P.O. Box 4563 | 987786553 | lwolowitz[at]email.me |
La colonne « numéro de téléphone » mise en évidence contient neuf lignes au total, mais deux d'entre elles sont vides. Comptons tous les membres qui ont mis à jour leur numéro de téléphone.
SELECT COUNT(contact_number) FROM `members`;
L'exécution de la requête ci-dessus nous donne les résultats suivants.
| COUNT(contact_number) |
|---|
| 7 |
À noter: La réponse est 7 et non 9, car les deux valeurs NULL n'ont pas été prises en compte. L'exécution de COUNT(*) sur la même table renverrait 9, car COUNT(*) compte les lignes et non les valeurs.
Valeurs NON NULLes
Une approche plus sûre consiste à empêcher complètement l'insertion de valeurs NULL dans les colonnes obligatoires. C'est le rôle de la contrainte NOT NULL.
Qu'est-ce que le NON ? Operator?
L'opérateur logique NON permet de tester des conditions booléennes ; il renvoie vrai si la condition est fausse et faux si elle est vraie.
| État | pas Operarésultat |
|---|---|
| Vrai | Faux |
| Faux | Vrai |
Pourquoi utiliser NOT NULL ?
Il arrive que nous devions effectuer des calculs sur un ensemble de résultats de requête et renvoyer les valeurs. Toute opération arithmétique effectuée sur une colonne contenant une valeur NULL renvoie un résultat NULL. Afin d'éviter ce genre de situation, nous pouvons utiliser la clause NOT NULL pour limiter les résultats sur lesquels nos données sont traitées.
Création d'une table avec une colonne NOT NULL
Supposons que nous souhaitions créer une table avec certains champs qui doivent toujours être renseignés lors de l'insertion de nouvelles lignes. Nous pouvons utiliser la clause NOT NULL sur un champ donné lors de la création de la table.
L'exemple ci-dessous crée une nouvelle table contenant les données des employés. Le numéro d'employé doit toujours être renseigné.
CREATE TABLE `employees`( employee_number int NOT NULL, full_names varchar(255) , gender varchar(6) );
Essayons maintenant d'insérer un nouvel enregistrement sans préciser le numéro d'employé et voyons ce qui se passe.
INSERT INTO `employees` (full_names,gender) VALUES ('Steve Jobs', 'Male');
Exécuter le script ci-dessus dans MySQL Workbench génère l'erreur suivante, car la colonne obligatoire a été omise.
Mots clés IS NULL et IS NOT NULL
Cette contrainte bloque les nouvelles valeurs NULL. Pour manipuler les valeurs NULL existantes, utilisez le mot-clé NULL. La syntaxe est la suivante.
column_name IS NULL column_name IS NOT NULL
ICI. (en anglais seulement)
- « EST NULL » est le mot-clé qui effectue la comparaison booléenne. Il renvoie vrai si la valeur fournie est NULL et false si la valeur fournie n'est pas NULL.
- « N'EST PAS NUL » Le mot-clé `is` effectue la comparaison inverse. Il renvoie `true` si la valeur fournie n'est pas `NULL` et `false` si la valeur fournie est `NULL`.
Prenons un exemple pratique qui utilise le mot-clé IS NOT NULL pour éliminer toutes les lignes contenant des valeurs NULL dans une colonne.
En reprenant le tableau des membres ci-dessus, supposons que nous ayons besoin des informations des membres dont le numéro de téléphone n'est pas nul. Nous pouvons exécuter une requête comme celle-ci.
SELECT * FROM `members` WHERE contact_number IS NOT NULL;
L'exécution de la requête ci-dessus ne renvoie que les sept enregistrements où le numéro de contact est présent, ce qui correspond au résultat COUNT de la section précédente.
Supposons maintenant que nous souhaitions obtenir l'inverse : les enregistrements des membres pour lesquels le numéro de téléphone est manquant. Nous pouvons utiliser la requête suivante.
SELECT * FROM `members` WHERE contact_number IS NULL;
L'exécution de la requête ci-dessus renvoie les deux enregistrements de membres dont le numéro de contact est NULL.
| membership_ number | full_names | gender | date_of_birth | physical_address | postal_address | contact_ number | |
|---|---|---|---|---|---|---|---|
| 2 | Janet Smith Jones | Female | 23-06-1980 | Melrose 123 | NULL | NULL | jj@fstreet.com |
| 4 | Gloria Williams | Female | 14-02-1984 | 2nd Street 23 | NULL | NULL | NULL |
Mise en garde: Une condition telle que WHERE contact_number = NULL renvoie un ensemble de résultats vide, même si des valeurs NULL existent. L'opérateur d'égalité ne peut jamais correspondre à NULL ; par conséquent, seul le test IS NULL est correct.
Comparaison des valeurs NULL avec la logique à trois valeurs
Logique à trois valeurs – l’exécution d’opérations booléennes sur des conditions impliquant NULL peut renvoyer « Inconnu », « Vrai » ou « Faux ».
Utilisation du mot-clé « IS NULL » lors d'opérations de comparaison impliquant NULL Retours oui or nonL'utilisation des autres opérateurs de comparaison renvoie « Inconnu » (NULL)Le tableau ci-dessous compare chaque expression côte à côte.
| Expression | Résultat | Sens |
|---|---|---|
| SÉLECTIONNER 5 = 5 ; | 1 | TRUE |
| SÉLECTIONNER NULL = NULL ; | NULL | INCONNU |
| SÉLECTIONNER 5 > 5 ; | 0 | FAUX |
| SÉLECTIONNER NULL > NULL ; | NULL | INCONNU |
| SÉLECTIONNER 5 EST NUL ; | 0 | FAUX |
| SÉLECTIONNER NULL EST NULL ; | 1 | TRUE |
Comparez le nombre cinq avec lui-même, puis répétez l'opération avec NULL.
SELECT 5 =5; SELECT NULL = NULL;
| 5 =5 | NULL = NULL |
|---|---|
| 1 | NULL |
Le premier résultat est 1 (VRAI). Le second est NULL, car MySQL On ne peut pas affirmer que deux valeurs inconnues sont égales. Utilisez plutôt le mot-clé IS NULL sur ces mêmes valeurs.
SELECT 5 IS NULL; SELECT NULL IS NULL;
| 5 IS NULL | NULL IS NULL |
|---|---|
| 0 | 1 |
Cette fois, les réponses sont binaires : 0 (FAUX) et 1 (VRAI). Seuls les mots clés IS NULL et IS NOT NULL renvoient une réponse binaire lorsque la valeur NULL est impliquée.



