SQL CASE vous permet de manipuler une base de données en in­ter­ro­geant certaines con­di­tions et en affichant les résultats. L’approche de la condition CASE est similaire à l’ins­truc­tion IF THEN ELSE.

Qu’est-ce que SQL CASE ?

Dans de nombreux langages de base de données et de pro­gram­ma­tion, l’ins­truc­tion IF THEN ELSE est très répandue. Celle-ci exécute une action aussi longtemps qu’une certaine condition est remplie. Si cette condition n’est plus remplie, le programme cor­res­pon­dant quitte la boucle ou exécute une autre action. Le Struc­tu­red Query Language utilise un principe similaire et met à dis­po­si­tion l’ins­truc­tion SQL CASE. Celle-ci parcourt une liste de con­di­tions et répond avec une certaine valeur si une condition est remplie. Si aucune condition n’est remplie, elle répond avec une valeur définie sous ELSE. S’il n’y a pas de res­tric­tion ELSE et que les con­di­tions ne sont pas remplies, la réponse est NULL.

Serveurs virtuels (VPS)
VPS éco­no­miques sur serveurs Dell En­ter­prise
  • 1 Gbit/s de bande passante et trafic illimité
  • Dis­po­ni­bi­lité de 99,99 % et cer­ti­fi­ca­tion ISO
  • As­sis­tance 24/7 primée pour sa qualité et con­seil­ler personnel

SQL CASE : syntaxe et fonc­tion­ne­ment

La syntaxe de base de SQL CASE se présente comme suit :

SELECT colonne1, colonne2, ...,
CASE
    WHEN condition1 THEN résultat1
END AS nom
FROM nom_de_la_table;
sql

Vous indiquez avec la commande SQL SELECT quelles colonnes doivent être prises en compte. Avec CASE, vous vérifiez la condition. Si elle s’applique (si elle est true), la valeur du résultat en­re­gis­tré est affichée. END AS termine la boucle. FROM indique dans quelle table cette boucle doit être exécutée.

Avec la res­tric­tion op­tion­nelle ELSE, la syntaxe se présente comme suit :

SELECT colonne1, colonne2, ...,
CASE
    WHEN condition1 THEN résultat1
    ELSE autre_resultat
END AS nom
FROM nom_de_la_table;
sql

SQL CASE : exemple de condition

Pour illustrer le fonc­tion­ne­ment de SQL CASE, nous créons une table simple appelée « Clients ». Nous y en­re­gis­trons un numéro de client, le nom du client, la ville et la date de la commande, le nombre d’articles commandés, ainsi que le montant payé en euros.

Numéro de client Nom Ville Date Article Montant
1427 Henri Paris 1/13/2024 14 634
1377 Clément Marseille 1/19/2024 9 220
1212 Petit Marseille 1/3/2024 15 400
1431 Garcia Biarritz 1/19/2024 22 912
1118 Simon Rouen 2/1/2024 10 312

Nous utilisons main­te­nant la condition pour parcourir la liste. Pour les montants su­pé­rieurs à 400 euros, un certain texte doit être édité. Il en va de même pour les montants in­fé­rieurs à 400 euros. Nous utilisons la res­tric­tion ELSE pour les commandes qui se situent exac­te­ment à 400 euros. Plusieurs con­di­tions peuvent donc être demandées l’une après l’autre. La syntaxe ap­pro­priée pour notre exemple est la suivante :

SELECT Numéro de client, Nom, Ville, Date, Article, Montant,
CASE
	WHEN Montant > 400 THEN 'Le montant est supérieur à 400 euros'
	WHEN Montant < 400 THEN 'Le montant est inférieur à 400 euros'
	ELSE 'Le montant est exactement de 400 euros'
END AS Détails de la commande
FROM Clients;
sql

La sortie cor­res­pon­dante ressemble à ceci :

Numéro de client Nom Ville Date Article Montant Détails de la commande
1427 Henri Paris 1/13/2024 14 634 Le montant est supérieur à 400 euros
1377 Clément Marseille 1/19/2024 9 220 Le montant est inférieur à 400 euros
1212 Petit Marseille 1/3/2024 15 400 Le montant est exac­te­ment de 400 euros
1431 Garcia Biarritz 1/19/2024 22 912 Le montant est supérieur à 400 euros
1118 Simon Rouen 2/1/2024 10 312 Le montant est inférieur à 400 euros

SQL CASE en com­bi­nai­son avec d’autres ins­truc­tions

Vous pouvez également demander les con­di­tions au sein d’autres ins­truc­tions. Dans ce qui suit, nous classons les entrées par numéro de client. Si celui-ci n’est pas indiqué (donc NULL), le nom du client doit être pris en compte à la place. Voici le code cor­res­pon­dant :

SELECT Numéro de client, Nom, Ville, Date, Article, Montant,
FROM Clients
ORDER BY
    (CASE
        WHEN Numéro de client IS NULL THEN Nom
        ELSE Numéro de client
END);
sql

Le résultat est le suivant :

Numéro de client Nom Ville Date Article Montant
1118 Simon Rouen 2/1/2024 10 312
1212 Petit Marseille 1/3/2024 15 400
1377 Clément Marseille 1/19/2024 9 220
1427 Henri Paris 1/13/2024 14 634
1431 Garcia Biarritz 1/19/2024 22 912
Conseil

Avec le serveur d’hé­ber­ge­ment SQL de IONOS, vous avez le choix entre MSSQL, MySQL ou MariaDB. Profitez d’une per­for­mance ex­cep­tion­nelle, d’une ar­chi­tec­ture de sécurité solide et d’un conseil per­son­na­lisé !

Aller au menu principal