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.