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 :
- Clause OÙ
- Clause ORDER PAR
- 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
- Instruction CASE simple
- 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 >= 90 THEN 'Outstanding' WHEN Stu_Marks >= 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'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) >= 10000 THEN 'Increment' ELSE 'Constant' 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'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 = 'Coding' 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 = 'Coding' 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 |
60>