CASE et WHEN
Introduction :
Je fais ce tutorial car j'ai vu qu'il y avait plein de question a ce sujet et je n'ai pas vu de tutoriaux la dessus sur ce site a moins que je n'ai pas bien vu ou regardé...
Donc je fais ce tutorial pour les débutants que ne savent pas se servir de CASE et WHEN...
Ce tutorial me servira aussi de référence sur le forum donc si quelque chose n'est pas vrai ou vous choque n'hésitez pas a poster un commentaire, je ne voudrai pas induire les débutants en erreurs !
Qu'est-ce-que c'est ?
CASE est un mot réservé en SQL, en fait 'est une sorte de boucle qui contient des conditions représentés par le mot réservé WHEN, si cette condition est vrai on a un autre mot réservé THEN qui est placé après la condition et après ce mot on a la résultat souhaité...
Cette boucle ne s'arête que lorsqu'une condition est vrai et dans ce cas si une condition est vrai ou quand elle est arrivé a la fin sans trouvé des condition vrai !
WHEN représente une condition et dans une boucle CASE, on peut avoir autant de condition que l'on veut !
THEN représente le résultat qui doit être retourné si la condition est vrai !
Le fameux ELSE retourne ce qui est placé après lui au cas ou aucune des conditions représenté par les WHEN n'est vrai !
Une boucle CASE se finit toujours par le mot réservé END !
Shéma :
Voici comment se présente généralement une boucle CASE :
SELECT france, resultat, CASE
WHEN `france` = 3THEN 'La france a marqué 3 buts'
WHEN `france` = 0 THEN 'La france a marqué 0 but'
WHEN `france` < 5 THEN 'La france a marqué moins de 5 buts'
WHEN `france` > 5 THEN 'La france a marqué plus de 5 buts'
ELSE 'Résultat inconue !'
END AS `resultat` FROM match;
Dans cet exemple :
'match' est la table qui contient les matchs !
'france' est le champs qui contient le nombre de but(s) qu'a marqué la france
'resultat' est le champs qui va contenir le résultat retourné par par la boucle CASE
Le ORDER BY et le GROUP BY :
Suite a la remarque de nhervagault je rajoute une explication sur l'utilisation très peut connu des CASE et des WHEN avec GROUP BY et ORDER BY...
Donc je pense que le plus simple pour vous et pour moi est de vous montrer un exemple et de l'expliquer...
SELECT * FROM table ORDER BY CASE
WHEN@variable = 1 THEN colone1
WHEN@variable = 2THEN colone2
WHEN @variable = 3 THEN colone3
END
C'est exactement pareil pour le GROUP BY...
Dans cet exemple :
'table' est la table utilisée...
'@variable' est une variable contenant un nombre...
Et ce qui se trouve derrière le THEN c'est le nom de la colone avec laquelle on va trier les résultat...
Que va t-il se passer si deux condition ou plus sont vrai ?
Très bonne question, si deux condition ou plus sont vrai c'est le résutat de la première condition vrai qui sera retourné et on sortira de la boucle sinon ce qui est après le else sera retourné !
Ce comportement est le même sous SQL server 2005 et et Mysql, j'ai fais les test pour mysql et casy s'est chargé des tests sous SQL server 2005, d'ailleur je remercie casy pour sa question sur le forum car elle m'a donné envie de me remettre au SQL, au vrai avec les Procédure stocké, etc...
Si vous pouvez faire des test sur d'autre SGBD ce serai avec plaisir que je rajouterai le comportement ici !
Conclusion :
Bonne lecture et ne vous gènez pas pour mettre des commentaires !
Si vous avez des idées pour étendre ce tutorial, metez les aussi !
a++