# SQL CASE : définir et interroger des conditions

SQL CASE vous permet de manipuler une base de données en interrogeant certaines conditions et en affichant les résultats. L’approche de la condition CASE est similaire à l’instruction IF THEN ELSE.

## Qu’est-ce que SQL CASE ?

Dans de nombreux langages de base de données et de [programmation](https://www.ionos.fr/digitalguide/sites-internet/developpement-web/langages-de-programmation-web/), l’instruction 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 correspondant quitte la boucle ou exécute une autre action. Le [Structured Query Language](https://www.ionos.fr/digitalguide/serveur/know-how/definition-de-sql/) utilise un principe similaire et met à disposition l’instruction SQL CASE. Celle-ci parcourt une liste de conditions 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 restriction ELSE et que les conditions ne sont pas remplies, la réponse est NULL.

## SQL CASE : syntaxe et fonctionnement

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

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

Vous indiquez avec la [commande SQL](https://www.ionos.fr/digitalguide/serveur/configuration/commandes-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 enregistré est affichée. END AS termine la boucle. FROM indique dans quelle table cette boucle doit être exécutée.

Avec la restriction optionnelle ELSE, la syntaxe se présente comme suit :

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

## SQL CASE : exemple de condition

Pour illustrer le fonctionnement de SQL CASE, nous créons une table simple appelée « Clients ». Nous y enregistrons 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.

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

Nous utilisons maintenant la condition pour parcourir la liste. Pour les montants supérieurs à 400 euros, un certain texte doit être édité. Il en va de même pour les montants inférieurs à 400 euros. Nous utilisons la restriction ELSE pour les commandes qui se situent exactement à 400 euros. Plusieurs conditions peuvent donc être demandées l’une après l’autre. La syntaxe appropriée pour notre exemple est la suivante :

```sql
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;
```

La sortie correspondante ressemble à ceci :

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

## SQL CASE en combinaison avec d’autres instructions

Vous pouvez également demander les conditions au sein d’autres instructions. 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 correspondant :

```sql
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);
```

Le résultat est le suivant :

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

Conseil Avec le [serveur d’hébergement SQL](https://www.ionos.fr/cloud/hebergement-serveur-sql "Hébergement SQL pour les bases de données MSSQL, MySQL et MariaDB | IONOS") de IONOS, vous avez le choix entre MSSQL, MySQL ou MariaDB. Profitez d’une performance exceptionnelle, d’une architecture de sécurité solide et d’un conseil personnalisé !


This is a markdown version of: [https://www.ionos.fr/digitalguide/serveur/configuration/sql-case/](https://www.ionos.fr/digitalguide/serveur/configuration/sql-case/) for AI/LLM consumption.