:: DEVELOPER ZONE
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 14.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é.
© 1995-2005 MySQL AB. All rights reserved.
