Retour à la liste des articles Articles
6 minutes de lecture

Utilisation de l'expression CASE avec les instructions de modification de données

Que se passe-t-il lorsque vous combinez CASE avec les instructions de modification des données de SQL ? Découvrez-le dans cet article.

L'expression CASE est un élément très utile de SQL, que vous utiliserez fréquemment. Nous avons déjà vu ce que fait l'expression CASE, comment la formater et comment l'utiliser dans une instruction SELECT dans l'article "Utilisation de CASE pour ajouter de la logique à un SELECT". Un autre article,"Comment trier des enregistrements avec la clause ORDER BY", a montré comment utiliser CASE dans une clause ORDER BY.

Mais nous n'avons pas épuisé toutes les possibilités de l'expression CASE. Dans cet article, nous allons aborder l'utilisation de CASE avec les instructions de modification des données de SQL.

Quelles sont les instructions SQL de modification des données ?

Il existe trois instructions de modification des données en SQL. Elles sont appelées "modificatrices de données" car elles apportent des changements aux données stockées dans une table de base de données. Ces instructions sont assez familières, même pour les utilisateurs novices de SQL. Il s'agit de

  • INSERT - Ajoute des enregistrements à une table
  • UPDATE - Modifie les valeurs des colonnes de la table
  • DELETE - Suppression d'enregistrements dans la table

Nous allons voir comment chacune de ces instructions fonctionne avec une expression CASE. Toutefois, avant de commencer à écrire des requêtes, examinons la table car illustré ci-dessous. Nous l'utiliserons dans tous nos exemples :

id brand model info
1 Ford Fiesta NULL
2 Ford Mondeo NULL
3 Opel Astra NULL
4 Ford Galaxy NULL
5 Toyota Corolla NULL
6 Toyota RAV4 NULL

Comme vous pouvez le voir, cette table stocke des informations sur les voitures : leur numéro d'identification interne, la marque de la voiture, le nom du modèle et un champ facultatif pour des informations supplémentaires.

Nous allons commencer notre étude de l'utilisation des instructions de modification des données avec l'expression CASE par l'instruction INSERT.

Insertion d'enregistrements à l'aide de CASE

Vous pouvez utiliser une instruction INSERT pour insérer de nouveaux enregistrements dans une table. Si vous souhaitez déplacer des enregistrements d'une table vers une autre, vous utilisez l'instruction SELECT INTO.

Notre premier exemple va démontrer l'ajout d'informations dans une nouvelle table, tab. Cette nouvelle table sera créée avec la requête. Remarquez que nous utilisons en fait une déclaration SELECT INTO pour ce faire. Voici comment cela fonctionne :

SELECT brand, model,
          CASE brand
               WHEN 'Ford' THEN 'Founder was Henry Ford'
               WHEN 'Opel' THEN 'Founder was Adam Opel'
               WHEN 'Toyota' THEN 'Founder was Kiichiro Toyoda'
                ELSE '-'
		END AS info
INTO tab
FROM car;

L'instruction SELECT INTO commence par prendre les données des colonnes brand et model de la table et les déplace dans la nouvelle table. car et les déplace dans la nouvelle table tab nouvellement créée. La troisième colonne de tab est la colonne info. La valeur de la colonne info dépend de la valeur de la colonne car.brand. Si la valeur de la colonne car.brand est "Ford", la chaîne "Le fondateur était Henry Ford" sera affichée dans la colonne tab.info. Si la marque est "Opel", la chaîne "Le fondateur était Adam Opel" sera affichée ; pour "Toyota", la chaîne "Le fondateur était Kiichiro Toyoda" sera affichée. Dans tous les autres cas, la valeur renvoyée sera "-".

Voici le tableau résultant tab et son contenu :

brand model info
Ford Fiesta Founder was Henry Ford
Ford Mondeo Founder was Henry Ford
Opel Astra Founder was Adam Opel
Ford Galaxy Founder was Henry Ford
Toyota Corolla Founder was Kiichiro Toyoda
Toyota RAV4 Founder was Kiichiro Toyoda

Utilisation de CASE avec UPDATE

L'expression CASE peut également être utilisée dans une instruction UPDATE. L'instruction UPDATE vous est familière : elle modifie ou met à jour les valeurs de colonnes existantes. Si vous souhaitez mettre à jour des enregistrements en fonction des valeurs des colonnes, vous pouvez le faire avec l'expression CASE. Regardez l'exemple suivant :

UPDATE car SET info =
CASE brand
          WHEN 'Ford' THEN 'Founder was Henry Ford'
          WHEN 'Toyota' THEN 'Founder was Kiichiro Toyoda'
          ELSE '-'
          END
;

Nous voyons que les informations de la colonne info ont été mises à jour. Normalement, nous devrions mettre la nouvelle valeur dans la clause SET. Au lieu de cela, cette valeur prédéterminée a été remplacée par l'expression CASE. L'expression CASE teste la valeur de la colonne brand et l'utilise pour déterminer ce qu'il faut saisir dans la colonne info. Si une valeur autre que "Ford" ou "Toyota" est enregistrée dans la colonne brand, une chaîne "-" s'affiche dans la colonne info pour cet enregistrement.

Voici le tableau car tableau après la mise à jour :

id brand model info
1 Ford Fiesta Founder was Henry Ford
2 Ford Mondeo Founder was Henry Ford
3 Opel Astra
4 Ford Galaxy Founder was Henry Ford
5 Toyota Corolla Founder was Kiichiro Toyoda
6 Toyota RAV4 Founder was Kiichiro Toyoda

Notez que l'enregistrement de l'Opel Astra ne contient rien dans la colonne info. Cela est dû au fait que "Opel" n'a pas été spécifié comme marque dans l'expression WHEN de CASE. La valeur définie dans ELSE a été renvoyée.

Suppression de données à l'aide de l'expression CASE

Abordons maintenant la dernière des instructions de modification des données : DELETE. Elle est utilisée pour supprimer des enregistrements d'une table. Une fois encore, vous pouvez utiliser l'expression CASE dans la clause WHERE pour contrôler vos résultats. Regardez cet exemple :

DELETE FROM car 
WHERE FALSE = CASE 
    WHEN info IS NOT NULL THEN TRUE
      ELSE FALSE
END
;

Ce CASE teste si la valeur de la colonne info est NULL. Si elle n'est pas NULL, la valeur TRUE est renvoyée. Si la valeur est NULL, la valeur FALSE de ELSE est renvoyée. Si l'expression CASE renvoie une valeur FALSE, cet enregistrement est supprimé.

Ci-dessous, nous voyons le tableau car après que les lignes avec des valeurs NULL dans la colonne info ont été supprimées :

id brand model info
1 Ford Fiesta Founder was Henry Ford
2 Ford Mondeo Founder was Henry Ford
4 Ford Galaxy Founder was Henry Ford
5 Toyota Corolla Founder was Kiichiro Toyoda
6 Toyota RAV4 Founder was Kiichiro Toyoda

En savoir plus sur l'expression SQL CASE

Si vous souhaitez en savoir plus sur l'expression CASE, consultez le cours Fonctions SQL standards de LearnSQL. Vous en saurez plus sur cette expression et sur d'autres. De plus, vous pourrez mettre en pratique vos nouvelles connaissances grâce à des exercices interactifs. Essayez-le dès aujourd'hui !