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.


