Le concept de la valeur NULL est une source
de confusions pour les débutants en SQL, qui pensent souvent
que NULL est la même chose qu'une chaîne de
caractères vide "". Ce n'est pas le cas !
Par exemple, les deux requêtes suivantes sont complètement
différentes :
mysql>INSERT INTO ma_table (telephone) VALUES (NULL);mysql>INSERT INTO ma_table (telephone) VALUES ("");
Les deux requêtes insèrent des valeurs dans la colonne
telephone, mais la première insère une
valeur NULL et la seconde insère une chaîne
vide. La signification de la première peut être ``le numéro
de téléphone est inconnu'' et la seconde peut être
considérée comme ``elle n'a pas de téléphone''.
En SQL, la valeur NULL est toujours false en
comparaison à n'importe quelle autre valeur, même
NULL. Une expression contenant
NULL produit toujours un résultat
NULL sauf si une indication contraire est
présente dans la documentation des opérateurs et des fonctions
impliquées dans l'expression. Toutes les colonnes de l'exemple
suivant retournent NULL :
mysql> SELECT NULL,1+NULL,CONCAT('Invisible',NULL);
Si vous voulez trouver les colonnes dont la valeur est
NULL, vous ne pouvez pas utiliser le test
=NULL. La requête suivante ne retourne
aucune ligne car expr = NULL est FALSE, pour
n'importe quelle expression :
mysql> SELECT * FROM ma_table WHERE telephone = NULL;
Pour trouver les valeurs NULL, vous devez
utiliser le test IS NULL. Ce qui suit montre
comment trouver les numéros de téléphone
NULL et les numéros vides :
mysql>SELECT * FROM ma_table WHERE telephone IS NULL;mysql>SELECT * FROM ma_table WHERE telephone = "";
Notez que vous ne pouvez ajouter d'index qu'aux colonnes pouvant
avoir la valeur NULL si vous utilisez la
version 3.23.2 de MySQL ou plus récente avec des tables de type
MyISAM ou InnoDB. Dans les
versions précédentes et avec les autres types, vous devez
déclarer de telles colonnes NOT NULL. Cela
signifie aussi que vous ne pouvez pas insérer
NULL dans les colonnes indexées.
Lors de la lecture de données avec LOAD DATA
INFILE, les colonnes vides sont interprétées en tant
que ''. Si vous voulez une valeur
NULL dans une colonne, vous devez utiliser
\N dans le fichier. Le mot littéral
'NULL' peut aussi être utilisé dans
certaines circonstances. See Section 13.1.5, « Syntaxe de LOAD DATA INFILE ».
Lors de l'utilisation de ORDER BY, les
valeurs NULL sont présentées en premier. Si
vous triez dans l'ordre décroissant en utilisant
DESC, les valeurs NULL
sont présentées en dernier. Lors de l'utilisation de
GROUP BY, toutes les valeurs
NULL sont considérées comme égales.
Pour mieux gérer les valeurs NULL, vous
pouvez utiliser les opérateurs IS NULL et
IS NOT NULL et la fonction
IFNULL().
Lors de l'utilisation de GROUP BY, toutes les
valeurs NULL sont considérées comme
égales.
Les fonctions agrégeantes comme COUNT(),
MIN() et SUM() ignorent
les valeurs NULL. Exception faite de
COUNT(*), qui compte les lignes et non pas
les valeurs de colonnes. Par exemple, la commande suivante va
donner deux comptes différents. Le premier est le nombre de
lignes de la table, et le second est le nombre de ligne
non-NULL de la colonne
age :
mysql> SELECT COUNT(*), COUNT(age) FROM person;
Pour certains types de colonnes, les valeurs
NULL sont traitées spécialement. Si vous
insérez NULL dans la première colonne
TIMESTAMP d'une table, la date et le temps
courants sont insérés. Si vous insérez
NULL dans une colonne
AUTO_INCREMENT, le nombre suivant de la
séquence sera inséré.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.
