« MySQL/NULL » : différence entre les versions

Contenu supprimé Contenu ajouté
DannyS712 (discussion | contributions)
m <source> -> <syntaxhighlight> (phab:T237267)
 
Ligne 6 :
<code>NULL</code> étant une absence de valeur, il peut être assigné à des colonnes <code>TEXT</code>, <code>INTEGER</code> ou autres. Toutefois une colonne déclarée <code>NOT NULL</code> ne pourra pas en contenir.
 
<sourcesyntaxhighlight lang="mysql">
INSERT into Singer
(F_Name, L_Name, Birth_place, Language)
Ligne 13 :
("", "Sting", NULL, "English"),
("Jonny", "Five", NULL, "Binary");
</syntaxhighlight>
</source>
<code>NULL</code> ne doit pas être entouré d'apostrophes ou de guillemets, ou bien il désignera une chaine de caractères contenant son nom.
Ligne 19 :
 
L'exemple ci-dessous peut sélectionner des chanteurs avec prénom de taille zéro (""), par exemple pour Sting et Homer. Il vérifie si la date de naissance est nulle :
<sourcesyntaxhighlight lang="mysql">
SELECT * from Singer WHERE Birth_place IS NULL;
Ligne 25 :
SELECT * from Singer WHERE isNull(Birth_place)
</syntaxhighlight>
</source>
 
{{attention|1=Les enregistrements X à NULL ne sont pas renvoyés par un WHERE X != 'Y'|clear=left}}
 
<code>COUNT</code> ne tient pas compte des <code>NULL</code> :
<sourcesyntaxhighlight lang="mysql">
select count(Birth_place) from Singer;
0
</syntaxhighlight>
</source>
 
Par ailleurs, SUM(NULL) renvoie NULL.
 
Les opérations normales (comparaisons, expressions...) renvoient <code>NULL</code> si au moins un des éléments comparés est <code>NULL</code> :
<sourcesyntaxhighlight lang="mysql">
SELECT (NULL=NULL) OR (NULL<>NULL) OR (NOT NULL) OR (1<NULL) OR (1>NULL) OR (1 + NULL) OR (1 LIKE NULL)
</syntaxhighlight>
</source>
 
Deux valeurs inconnues ne sont donc pas égales (<code>NULL</code>=<code>NULL</code> renvoie <code>NULL</code>).
Ligne 48 :
 
Par exemple, pour éviter de montrer les valeurs nulles en les traitant comme des zéros :
<sourcesyntaxhighlight lang="mysql">
SELECT COALESCE(colname,0) from table where COALESCE(colname,0) > 1;
</syntaxhighlight>
</source>
 
Dans un champ date, les traiter comme celle actuelle :
<sourcesyntaxhighlight lang="mysql">
ORDER BY (COALESCE(TO_DAYS(date),TO_DAYS(CURDATE()))-TO_DAYS(CURDATE()))
</syntaxhighlight>
</source>
 
<sourcesyntaxhighlight lang="mysql">
EXP(SUM(LOG(COALESCE(''*the field you want to multiply*'',1)))
</syntaxhighlight>
</source>
La fonction <code>coalesce()</code> prévient des problèmes de calcul logarithmique d'une valeur nulle, et peut être optionnelle selon les circonstances.
<sourcesyntaxhighlight lang="mysql">
SELECT t4.gene_name, COALESCE(g2d.score,0),
COALESCE(dgp.score,0), COALESCE(pocus.score,0)
Ligne 68 :
LEFT JOIN dgp ON t4.gene_name=dgp.gene_name
LEFT JOIN pocus ON t4.gene_name=pocus.gene_name;
</syntaxhighlight>
</source>
 
<code>IFNULL()</code> dans un <code>SELECT</code> fait de <code>NULL</code> n'importe quelle valeur désirée.
<sourcesyntaxhighlight lang="mysql">
IFNULL(expr1,expr2)
</syntaxhighlight>
</source>
Si ''expr1'' n'est pas nulle, <code>IFNULL()</code> renvoie ''expr1'', sinon ''expr2''.
 
<code>IFNULL()</code> renvoie une chaine ou un nombre, selon le contexte :
<sourcesyntaxhighlight lang="mysql">
mysql> SELECT IFNULL(1,0);
-> 1
Ligne 86 :
mysql> SELECT IFNULL(1/0,'yes');
-> 'yes'
</syntaxhighlight>
</source>
 
Attention aux résultats peu prévisibles, par exemple la requête suivante efface toutes les entrées :
<sourcesyntaxhighlight lang="mysql">
DELETE FROM ma_table1 WHERE field > NULL -- fonctionne aussi avec une fonction renvoyant NULL
</syntaxhighlight>
</source>
 
Pour obtenir les <code>NULL</code> en dernier lors d'un <code>ORDER BY</code> :
<sourcesyntaxhighlight lang="mysql">
SELECT * FROM ma_table1 ORDER BY ISNULL(field), field [ ASC | DESC ]
</syntaxhighlight>
</source>
 
Enfin, pour déterminer les champs d'une table qui ne peuvent pas être nuls :
<sourcesyntaxhighlight lang=mysql>
SELECT *
FROM `information_schema`.`COLUMNS`
WHERE IS_NULLABLE = 'NO' AND TABLE_NAME = 'ma_table1'
</syntaxhighlight>
</source>