logo

CAS SQL

Le CAS est une instruction qui opère du type if-then-else de requêtes logiques. Cette instruction renvoie la valeur lorsque la condition spécifiée est évaluée à True. Lorsqu’aucune condition n’est évaluée à True, elle renvoie la valeur de la partie ELSE.

Lorsqu’il n’y a pas de partie ELSE et qu’aucune condition n’est évaluée à True, elle renvoie une valeur NULL.

Dans le langage de requête structuré, l'instruction CASE est utilisée dans les instructions SELECT, INSERT et DELETE avec les trois clauses suivantes :

  1. Clause OÙ
  2. Clause ORDER PAR
  3. Clause GROUPE PAR

Cette instruction en SQL est toujours suivie d'au moins une paire d'instructions WHEN et THEN et toujours terminée par le mot-clé END.

L'instruction CASE est de deux types dans les bases de données relationnelles :

tableau.de Java
  1. Instruction CASE simple
  2. Instruction CASE recherchée

Syntaxe de l'instruction CASE en SQL

 CASE WHEN condition_1 THEN statement_1 WHEN condition_2 THEN statement_2 ……. WHEN condition_N THEN statement_N ELSE result END; 

Ici, l'instruction CASE évalue chaque condition une par une.

Si l'expression correspond à la condition de la première clause WHEN, elle ignore toutes les autres conditions WHEN et THEN et renvoie l'instruction_1 dans le résultat.

Si l’expression ne correspond pas à la première condition WHEN, elle est comparée à la seconde condition WHEN. Ce processus de correspondance se poursuivra jusqu'à ce que l'expression corresponde à une condition WHEN.

Si aucune condition ne correspond à l'expression, le contrôle passe automatiquement à la partie ELSE et renvoie son résultat. Dans la syntaxe CASE, la partie ELSE est facultative.

Dans la syntaxe, CASE et END sont les mots-clés les plus importants qui indiquent le début et la fin de l'instruction CASE.

communication analogique

Exemples d'instruction CASE en SQL

Prenons la table Student_Details, qui contient roll_no, le nom, les notes, le sujet et la ville des étudiants.

Roll_Non Stu_Name Stu_Sujet Stu_Marks Stu_Ville
2001 Akchay Science 92 Noida
2002 RAM Mathématiques 49 Jaïpur
2004 Shyam Anglais 52 Gurgaon
2005 yatin Non Quatre cinq Lucknow
2006 Manoj Ordinateur 70 Ghaziabad
2007 Feuille Mathématiques 82 Noida
2008 Les cheveux Science 62 Gurgaon
2009 Yogesh Anglais 42 Lucknow
2010 RAM Ordinateur 88 Delhi
2011 Shyam Non 35 Kanpur

Exemple 1: L'instruction SQL suivante utilise des conditions WHEN et THEN uniques pour l'instruction CASE :

 SELECT Roll_No, Stu_Name, Stu_Subject, Stu_marks, CASE WHEN Stu_Marks >= 50 THEN 'Student_Passed' ELSE 'Student_Failed' END AS Student_Result FROM Student_Details; 

Explication de la requête ci-dessus :

Ici, l'instruction CASE vérifie que si le Stu_Marks est supérieur et égal à 50, il renvoie Étudiant_Réussi sinon, il se déplace vers le AUTRE pièce et retours Étudiant_Échec dans le Résultat_étudiant colonne.

chaîne sous forme de tableau

Sortir:

Roll_Non Stu_Name Stu_Sujet Stu_Marks Résultat_étudiant
2001 Akchay Science 92 Étudiant_Réussi
2002 RAM Mathématiques 49 Étudiant_Échec
2004 Shyam Anglais 52 Étudiant_Réussi
2005 yatin Non Quatre cinq Étudiant_Échec
2006 Manoj Ordinateur 70 Étudiant_Réussi
2007 Feuille Mathématiques 82 Étudiant_Réussi
2008 Les cheveux Science 62 Étudiant_Réussi
2009 Yogesh Anglais 42 Étudiant_Échec
2010 RAM Ordinateur 88 Étudiant_Réussi
2011 Shyam Non 35 Étudiant_Échec

Exemple 2 : L'instruction SQL suivante ajoute plusieurs conditions WHEN et THEN à l'instruction CASE :

 SELECT Roll_No, Stu_Name, Stu_Subject, Stu_marks, CASE WHEN Stu_Marks &gt;= 90 THEN &apos;Outstanding&apos; WHEN Stu_Marks &gt;= 80 AND Stu_Marks = 70 AND Stu_Marks = 60 AND Stu_Marks = 50 AND Stu_Marks <60 50 then 'bad' when stu_marks < 'failed' end as stu_remarks from student_details; pre> <p> <strong>Explanation of above query:</strong> </p> <p>Here, the CASE statement checks multiple WHEN and THEN conditions one by one. If the value of <strong>Stu_Marks</strong> column is greater than or equals to <strong>90</strong> , it returns <strong>Outstanding</strong> otherwise moves to the further WHEN and THEN conditions.</p> <p>If none of the conditions is matched with the <strong>Student_Details</strong> table, CASE returns <strong>the NULL</strong> value in the <strong>Stu_Remarks</strong> column because there is no ELSE part in the query.</p> <p> <strong>Output:</strong> </p> <table class="table"> <tr> <th>Roll_No</th> <th>Stu_Name</th> <th>Stu_Subject</th> <th>Stu_Marks</th> <th>Stu_Remarks</th> </tr> <tr> <td>2001</td> <td>Akshay</td> <td>Science</td> <td>92</td> <td>Outstanding</td> </tr> <tr> <td>2002</td> <td>Ram Math</td> <td>49</td> <td>Failed</td> </tr> <tr> <td>2004</td> <td>Shyam</td> <td>English</td> <td>52</td> <td>Bad</td> </tr> <tr> <td>2005</td> <td>Yatin</td> <td>Hindi</td> <td>45</td> <td>Failed</td> </tr> <tr> <td>2006</td> <td>Manoj</td> <td>Computer</td> <td>70</td> <td>Good</td> </tr> <tr> <td>2007</td> <td>Sheetal</td> <td>Math</td> <td>82</td> <td>Excellent</td> </tr> <tr> <td>2008</td> <td>Parul</td> <td>Science</td> <td>62</td> <td>Average</td> </tr> <tr> <td>2009</td> <td>Yogesh</td> <td>English</td> <td>42</td> <td>Failed</td> </tr> <tr> <td>2010</td> <td>Ram</td> <td>Computer</td> <td>88</td> <td>Excellent</td> </tr> <tr> <td>2011</td> <td>Shyam</td> <td>Hindi</td> <td>35</td> <td>Failed</td> </tr> </table> <p> <strong>Example 3:</strong> </p> <p>Let&apos;s take another Employee_Details table which contains Emp_ID, Emp_Name, Emp_Dept, and Emp_Salary.</p> <table class="table"> <tr> <th>Emp_Id</th> <th>Emp_Name</th> <th>Emp_Dept</th> <th>Emp_Salary</th> </tr> <tr> <td>1</td> <td>Akshay</td> <td>Finance</td> <td>9000</td> </tr> <tr> <td>2</td> <td>Ram</td> <td>Marketing</td> <td>4000</td> </tr> <tr> <td>3</td> <td>Shyam</td> <td>Sales</td> <td>5000</td> </tr> <tr> <td>4</td> <td>Yatin</td> <td>Coding</td> <td>4000</td> </tr> <tr> <td>5</td> <td>Manoj</td> <td>Marketing</td> <td>5000</td> </tr> <tr> <td>1</td> <td>Akshay</td> <td>Finance</td> <td>8000</td> </tr> <tr> <td>2</td> <td>Ram</td> <td>Coding</td> <td>6000</td> </tr> <tr> <td>3</td> <td>Shyam</td> <td>Coding</td> <td>4000</td> </tr> <tr> <td>4</td> <td>Yatin</td> <td>Marketing</td> <td>8000</td> </tr> <tr> <td>5</td> <td>Manoj</td> <td>Finance</td> <td>3000</td> </tr> </table> <p> <strong>The following SQL query uses GROUP BY clause with CASE statement:</strong> </p> <pre> SELECT Emp_Id, Emp_Name, Emp_Dept, sum(Emp_Salary) as Total_Salary, CASE WHEN SUM(Emp_Salary) &gt;= 10000 THEN &apos;Increment&apos; ELSE &apos;Constant&apos; END AS Emp_Remarks FROM Employee_Details GROUP BY Emp_id, Emp_Name; </pre> <p> <strong>Output:</strong> </p> <table class="table"> <tr> <th>Emp_Id</th> <th>Emp_Name</th> <th>Emp_Dept</th> <th>Total_Salary</th> <th>Emp_Remarks</th> </tr> <tr> <td>1</td> <td>Akshay</td> <td>Finance</td> <td>17000</td> <td>Increment</td> </tr> <tr> <td>2</td> <td>Ram</td> <td>Marketing</td> <td>9000</td> <td>Decrement</td> </tr> <tr> <td>3</td> <td>Shyam</td> <td>Sales</td> <td>10000</td> <td>Increment</td> </tr> <tr> <td>4</td> <td>Yatin</td> <td>Coding</td> <td>12000</td> <td>Increment</td> </tr> <tr> <td>5</td> <td>Manoj</td> <td>Marketing</td> <td>8000</td> <td>Decrement</td> </tr> </table> <p> <strong>Example 4: In this example, we use the ORDER BY clause with a CASE statement in SQL:</strong> </p> <p>Let&apos;s take another Employee_Details table which contains Emp_ID, Emp_Name, Emp_Dept, and Emp_Age.</p> <p>We can check the data of Employee_Details by using the following query in SQL:</p> <pre> Select * From Employee_Details; </pre> <p> <strong>Output:</strong> </p> <table class="table"> <tr> <th>Emp_Id</th> <th>Emp_Name</th> <th>Emp_Dept</th> <th>Emp_Age</th> </tr> <tr> <td>1</td> <td>Akshay</td> <td>Finance</td> <td>23</td> </tr> <tr> <td>2</td> <td>Ram</td> <td>Marketing</td> <td>24</td> </tr> <tr> <td>3</td> <td>Balram</td> <td>Sales</td> <td>25</td> </tr> <tr> <td>4</td> <td>Yatin</td> <td>Coding</td> <td>22</td> </tr> <tr> <td>5</td> <td>Manoj</td> <td>Marketing</td> <td>23</td> </tr> <tr> <td>6</td> <td>Sheetal</td> <td>Finance</td> <td>24</td> </tr> <tr> <td>7</td> <td>Parul</td> <td>Finance</td> <td>22</td> </tr> <tr> <td>8</td> <td>Yogesh</td> <td>Coding</td> <td>25</td> </tr> <tr> <td>9</td> <td>Naveen</td> <td>Marketing</td> <td>22</td> </tr> <tr> <td>10</td> <td>Tarun</td> <td>Finance</td> <td>23</td> </tr> </table> <p>The following SQL query shows all the details of employees in the ascending order of employee names:</p> <pre> SELECT * FROM Employee_Details ORDER BY Emp_Name; </pre> <p> <strong>Output:</strong> </p> <table class="table"> <tr> <th>Emp_Id</th> <th>Emp_Name</th> <th>Emp_Dept</th> <th>Emp_Age</th> </tr> <tr> <td>1</td> <td>Akshay</td> <td>Finance</td> <td>23</td> </tr> <tr> <td>3</td> <td>Balram</td> <td>Sales</td> <td>25</td> </tr> <tr> <td>5</td> <td>Manoj</td> <td>Marketing</td> <td>23</td> </tr> <tr> <td>9</td> <td>Naveen</td> <td>Marketing</td> <td>22</td> </tr> <tr> <td>7</td> <td>Parul</td> <td>Finance</td> <td>22</td> </tr> <tr> <td>2</td> <td>Ram</td> <td>Marketing</td> <td>24</td> </tr> <tr> <td>6</td> <td>Sheetal</td> <td>Finance</td> <td>24</td> </tr> <tr> <td>10</td> <td>Tarun</td> <td>Finance</td> <td>23</td> </tr> <tr> <td>4</td> <td>Yatin</td> <td>Coding</td> <td>22</td> </tr> <tr> <td>8</td> <td>Yogesh</td> <td>Coding</td> <td>25</td> </tr> </table> <p>If you want to show those employees at the top who work in the Coding Department, then for this operation, you have to use single WHEN and THEN statement in the CASE statement as shown in the following query:</p> <pre> SELECT * FROM Employee_Details ORDER BY CASE WHEN Emp_Dept = &apos;Coding&apos; THEN 0 ELSE 1 END, Emp_Name; </pre> <p> <strong>Output:</strong> </p> <table class="table"> <tr> <th>Emp_Id</th> <th>Emp_Name</th> <th>Emp_Dept</th> <th>Emp_Age</th> </tr> <tr> <td>4</td> <td>Yatin</td> <td>Coding</td> <td>22</td> </tr> <tr> <td>8</td> <td>Yogesh</td> <td>Coding</td> <td>25</td> </tr> <tr> <td>1</td> <td>Akshay</td> <td>Finance</td> <td>23</td> </tr> <tr> <td>3</td> <td>Balram</td> <td>Sales</td> <td>25</td> </tr> <tr> <td>5</td> <td>Manoj</td> <td>Marketing</td> <td>23</td> </tr> <tr> <td>9</td> <td>Naveen</td> <td>Marketing</td> <td>22</td> </tr> <tr> <td>7</td> <td>Parul</td> <td>Finance</td> <td>22</td> </tr> <tr> <td>2</td> <td>Ram</td> <td>Marketing</td> <td>24</td> </tr> <tr> <td>6</td> <td>Sheetal</td> <td>Finance</td> <td>24</td> </tr> <tr> <td>10</td> <td>Tarun</td> <td>Finance</td> <td>23</td> </tr> </table> <hr></60>

Sortir:

Emp_Id Emp_Name Emp_Dept Salaire total Emp_Remarks
1 Akchay Finance 17000 Incrément
2 RAM Commercialisation 9000 Décrémenter
3 Shyam Ventes 10000 Incrément
4 yatin Codage 12000 Incrément
5 Manoj Commercialisation 8000 Décrémenter

Exemple 4 : Dans cet exemple, nous utilisons la clause ORDER BY avec une instruction CASE en SQL :

Prenons une autre table Employee_Details qui contient Emp_ID, Emp_Name, Emp_Dept et Emp_Age.

Nous pouvons vérifier les données de Employee_Details en utilisant la requête suivante en SQL :

 Select * From Employee_Details; 

Sortir:

Emp_Id Emp_Name Emp_Dept Emp_Âge
1 Akchay Finance 23
2 RAM Commercialisation 24
3 Balram Ventes 25
4 yatin Codage 22
5 Manoj Commercialisation 23
6 Feuille Finance 24
7 Les cheveux Finance 22
8 Yogesh Codage 25
9 Naveen Commercialisation 22
dix Tarun Finance 23

La requête SQL suivante affiche tous les détails des employés dans l'ordre croissant des noms d'employés :

foreach java
 SELECT * FROM Employee_Details ORDER BY Emp_Name; 

Sortir:

Emp_Id Emp_Name Emp_Dept Emp_Âge
1 Akchay Finance 23
3 Balram Ventes 25
5 Manoj Commercialisation 23
9 Naveen Commercialisation 22
7 Les cheveux Finance 22
2 RAM Commercialisation 24
6 Feuille Finance 24
dix Tarun Finance 23
4 yatin Codage 22
8 Yogesh Codage 25

Si vous souhaitez afficher les employés au sommet qui travaillent dans le service de codage, alors pour cette opération, vous devez utiliser une seule instruction WHEN et THEN dans l'instruction CASE, comme indiqué dans la requête suivante :

 SELECT * FROM Employee_Details ORDER BY CASE WHEN Emp_Dept = &apos;Coding&apos; THEN 0 ELSE 1 END, Emp_Name; 

Sortir:

Emp_Id Emp_Name Emp_Dept Emp_Âge
4 yatin Codage 22
8 Yogesh Codage 25
1 Akchay Finance 23
3 Balram Ventes 25
5 Manoj Commercialisation 23
9 Naveen Commercialisation 22
7 Les cheveux Finance 22
2 RAM Commercialisation 24
6 Feuille Finance 24
dix Tarun Finance 23