Et voilà, vous avez bien défini les différents niveaux, il n'y a plus qu'à écrire la requête avec les bons opérateurs logiques !
Secret (cliquez pour afficher)
Code : SQL
SELECT *
FROM Animal
WHERE date_naissance > '2009-12-31'
OR
( espece='chat'
AND
( sexe='M'
OR
( sexe='F' AND date_naissance < '2007-06-01' )
)
);
Le cas de NULL
Vous vous souvenez sans doute de la liste des opérateurs de comparaison que je vous ai présentée (sinon, retournez au début
de la partie sur la clause WHERE). Vous avez probablement été un peu étonnés de voir dans cette liste l'opérateur <=> : égal
(valable aussi pour NULL). D'autant plus que j'ai fait un peu semblant de rien et ne vous ai pas donné d'explication sur cette
mystérieuse précision "aussi valable pour NULL"
. Mais je vais me rattraper maintenant !
En fait, c'est très simple, le marqueur NULL (qui représente donc "pas de valeur") est un peu particulier. En effet, vous ne pouvez
pas tester directement colonne = NULL. Essayons donc :
Code : SQL
SELECT *
FROM Animal
WHERE nom = NULL; -- sélection des animaux sans nom
SELECT *
FROM Animal
WHERE commentaires <> NULL; -- sélection des animaux pour lesquels
un commentaire existe
Comme vous pouvez vous en douter après ma petite introduction, ces deux requêtes ne renvoient pas les résultats que l'on
pourrait espérer. En fait, elles ne renvoient aucun résultat. C'est donc ici qu'intervient notre opérateur de comparaison un peu
spécial <=> qui permet de reconnaître NULL. Une autre possibilité est d'utiliser les mots-clés IS NULL, et si l'on veut exclure les
NULL : IS NOT NULL. Nous pouvons donc réécrire nos requêtes, correctement cette fois-ci :
Code : SQL
SELECT *
FROM Animal
WHERE nom <=> NULL; -- sélection des animaux sans nom
-- OU
SELECT *
FROM Animal
WHERE nom IS NULL;
SELECT *
FROM Animal
WHERE commentaires IS NOT NULL; -- sélection des animaux pour
lesquels un commentaire existe
Cette fois-ci, ça fonctionne parfaitement !
Partie 1 : MySQL et les bases du langage SQL
57/414
www.openclassrooms.com
Secret (cliquez pour afficher)
Code : SQL
SELECT *
FROM Animal
WHERE date_naissance > '2009-12-31'
OR
( espece='chat'
AND
( sexe='M'
OR
( sexe='F' AND date_naissance < '2007-06-01' )
)
);
Le cas de NULL
Vous vous souvenez sans doute de la liste des opérateurs de comparaison que je vous ai présentée (sinon, retournez au début
de la partie sur la clause WHERE). Vous avez probablement été un peu étonnés de voir dans cette liste l'opérateur <=> : égal
(valable aussi pour NULL). D'autant plus que j'ai fait un peu semblant de rien et ne vous ai pas donné d'explication sur cette
mystérieuse précision "aussi valable pour NULL"
. Mais je vais me rattraper maintenant !
En fait, c'est très simple, le marqueur NULL (qui représente donc "pas de valeur") est un peu particulier. En effet, vous ne pouvez
pas tester directement colonne = NULL. Essayons donc :
Code : SQL
SELECT *
FROM Animal
WHERE nom = NULL; -- sélection des animaux sans nom
SELECT *
FROM Animal
WHERE commentaires <> NULL; -- sélection des animaux pour lesquels
un commentaire existe
Comme vous pouvez vous en douter après ma petite introduction, ces deux requêtes ne renvoient pas les résultats que l'on
pourrait espérer. En fait, elles ne renvoient aucun résultat. C'est donc ici qu'intervient notre opérateur de comparaison un peu
spécial <=> qui permet de reconnaître NULL. Une autre possibilité est d'utiliser les mots-clés IS NULL, et si l'on veut exclure les
NULL : IS NOT NULL. Nous pouvons donc réécrire nos requêtes, correctement cette fois-ci :
Code : SQL
SELECT *
FROM Animal
WHERE nom <=> NULL; -- sélection des animaux sans nom
-- OU
SELECT *
FROM Animal
WHERE nom IS NULL;
SELECT *
FROM Animal
WHERE commentaires IS NOT NULL; -- sélection des animaux pour
lesquels un commentaire existe
Cette fois-ci, ça fonctionne parfaitement !
Partie 1 : MySQL et les bases du langage SQL
57/414
www.openclassrooms.com
