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.

  • ๐Ÿงฉ Dรฉfinition principale : NULL est une valeur de substitution pour des donnรฉes inexistantes. Ce n'est pas un type de donnรฉes, et ce n'est pas le nombre zรฉro.
  • (I.e. Comportement arithmรฉtique : Toute expression arithmรฉtique impliquant NULL renvoie NULL, donc 69 + NULL est รฉvaluรฉ ร  NULL plutรดt qu'ร  69.
  • (I.e. Impact global : La fonction COUNT(colonne) et d'autres fonctions d'agrรฉgation ignorent les lignes NULL, tandis que COUNT(*) compte toujours chaque ligne du tableau.
  • ๐Ÿšซ Contrainte NOT NULL : Dรฉclarer une colonne comme NOT NULL rejette toute insertion qui omet une valeur, ce qui protรจge les champs obligatoires tels que les identifiants.
  • ๐Ÿ” Filtrage correct : Les tests IS NULL et IS NOT NULL sont les seuls fiables, car l'opรฉrateur d'รฉgalitรฉ ne correspond jamais ร  une valeur NULL.
  • ๏ธ Logique ternaire : Les comparaisons avec NULL renvoient UNKNOWN, donc SELECT NULL = NULL produit NULL au lieu de TRUE.

MySQL EST NUL et EST NON NUL

En SQL, NULL est ร  la fois une valeur et un mot-clรฉ. Commenรงons par examiner la valeur NULL.

MySQL EST NULL ET N'EST PAS 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.

Nul comme valeur

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 email
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 12345rm@tstreet.com
4 Gloria Williams Female 14-02-1984 2nd Street 23 NULL NULL NULL
5 Leonard Hofstadter MaleNULL 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.

Valeurs NON NULLes

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

FAQ

Zรฉro est un nombre et une chaรฎne vide est du texte ; les deux correspondent donc ร  des tests dโ€™รฉgalitรฉ. NULL signifie quโ€™aucune valeur nโ€™a รฉtรฉ fournie, cโ€™est pourquoi il ne rรฉpond quโ€™aux tests IS NULL et IS NOT NULL.

IFNULL(colonne, 'N/A') renvoie une valeur de substitution lorsque la colonne est NULL. COALESCE(a, b, c) renvoie le premier argument non NULL. Ces deux fonctions sont utiles dans un contexte donnรฉ. MySQL fonctions et rapports.

Non. MySQL L'index NOT NULL est appliquรฉ automatiquement ร  chaque colonne de clรฉ primaire, car une clรฉ identifiant une ligne ne peut pas รชtre manquante. Un index UNIQUE est diffรฉrent et autorise plusieurs valeurs NULL.

Gรฉnรฉralement, oui. Les assistants IA intรฉgrรฉs ร  des outils tels queโ€ฆ MySQL Workbench transformer ยซ membres sans numรฉro de tรฉlรฉphone ยป en une clause WHERE column IS NULL. RevConsultez le filtre, car un test d'รฉgalitรฉ avec NULL ne renvoie rien silencieusement.

Souvent, oui. Les outils d'analyse par IA signalent des erreurs telles que les comparaisons = NULL, un SELECT Cette fonction calcule la moyenne d'une colonne contenant des valeurs NULL et exclut les listes contenant รฉgalement des valeurs NULL. La dรฉcision finale revient ร  la personne qui connaรฎt les donnรฉes.

Rรฉsumez cet article avec :