logo

SQL-CASE

De GEVAL is een instructie die logische query's van het type if-thens uitvoert. Deze instructie retourneert de waarde wanneer de opgegeven voorwaarde resulteert in True. Als geen enkele voorwaarde True oplevert, retourneert deze de waarde van het ELSE-gedeelte.

Als er geen ELSE-onderdeel is en geen enkele voorwaarde evalueert naar True, retourneert het een NULL-waarde.

In Structured Query Language wordt de CASE-instructie gebruikt in SELECT-, INSERT- en DELETE-instructies met de volgende drie clausules:

  1. WAAR clausule
  2. BESTEL PER clausule
  3. GROEP OP clausule

Deze instructie in SQL wordt altijd gevolgd door minimaal één paar WHEN- en THEN-instructies en wordt altijd afgesloten met het trefwoord END.

De CASE-instructie bestaat uit twee typen in relationele databases:

  1. Eenvoudige CASE-instructie
  2. CASE-instructie gezocht

Syntaxis van de CASE-instructie in SQL

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

Hier evalueert de CASE-instructie elke voorwaarde één voor één.

Als de expressie overeenkomt met de voorwaarde van de eerste WHEN-clausule, worden alle verdere WHEN- en THEN-voorwaarden overgeslagen en wordt statement_1 in het resultaat geretourneerd.

java tostring

Als de expressie niet overeenkomt met de eerste WHEN-voorwaarde, wordt deze vergeleken met de tweede WHEN-voorwaarde. Dit matchingproces gaat door totdat de expressie is gekoppeld aan een WHEN-voorwaarde.

Als er geen voorwaarde aan de uitdrukking voldoet, gaat het besturingselement automatisch naar het ELSE-gedeelte en retourneert het resultaat ervan. In de CASE-syntaxis is het ELSE-gedeelte optioneel.

In de syntaxis zijn CASE en END de belangrijkste trefwoorden die het begin en het einde van de CASE-instructie weergeven.

Voorbeelden van CASE-instructie in SQL

Laten we de tabel Student_Details nemen, die roll_no, naam, cijfers, onderwerp en stad van de studenten bevat.

Rol_nr Stu_Naam Stu_Onderwerp Stu_Marks Stu_City
2001 Akshay Wetenschap 92 Noida
2002 Ram Wiskunde 49 Jaipur
2004 Shyam Engels 52 Gurgaon
2005 yatin Nee Vier vijf Lucknow
2006 Manoj Computer 70 Ghaziabad
2007 Velaal Wiskunde 82 Noida
2008 Het haar Wetenschap 62 Gurgaon
2009 Yogesh Engels 42 Lucknow
2010 Ram Computer 88 Delhi
2011 Shyam Nee 35 Kanpur

Voorbeeld 1: De volgende SQL-instructie gebruikt een enkele WHEN- en THEN-voorwaarde voor de CASE-instructie:

 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; 

Verklaring van bovenstaande vraag:

Hier controleert de CASE-instructie of de Stu_Marks groter is dan en gelijk is aan 50, retourneert het Student_Geslaagd anders verhuist naar de ANDERS onderdeel en retour Student_Mislukt in de Student_Resultaat kolom.

Uitgang:

Rol_nr Stu_Naam Stu_Onderwerp Stu_Marks Student_Resultaat
2001 Akshay Wetenschap 92 Student_Geslaagd
2002 Ram Wiskunde 49 Student_Mislukt
2004 Shyam Engels 52 Student_Geslaagd
2005 yatin Nee Vier vijf Student_Mislukt
2006 Manoj Computer 70 Student_Geslaagd
2007 Velaal Wiskunde 82 Student_Geslaagd
2008 Het haar Wetenschap 62 Student_Geslaagd
2009 Yogesh Engels 42 Student_Mislukt
2010 Ram Computer 88 Student_Geslaagd
2011 Shyam Nee 35 Student_Mislukt

Voorbeeld 2: De volgende SQL-instructie voegt meer dan één WHEN- en THEN-voorwaarde toe aan de CASE-instructie:

c++ gesplitste tekenreeks
 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>

Uitgang:

Emp_Id Emp_Naam Emp_Dept Totale salaris Emp_Opmerkingen
1 Akshay Financiën 17000 Verhogen
2 Ram Marketing 9000 Verlagen
3 Shyam verkoop 10000 Verhogen
4 yatin Codering 12000 Verhogen
5 Manoj Marketing 8000 Verlagen

Voorbeeld 4: In dit voorbeeld gebruiken we de ORDER BY-clausule met een CASE-instructie in SQL:

Laten we nog een tabel Employee_Details nemen die Emp_ID, Emp_Name, Emp_Dept en Emp_Age bevat.

We kunnen de gegevens van Employee_Details controleren door de volgende query in SQL te gebruiken:

 Select * From Employee_Details; 

Uitgang:

Emp_Id Emp_Naam Emp_Dept Emp_Leeftijd
1 Akshay Financiën 23
2 Ram Marketing 24
3 Balram verkoop 25
4 yatin Codering 22
5 Manoj Marketing 23
6 Velaal Financiën 24
7 Het haar Financiën 22
8 Yogesh Codering 25
9 Naveen Marketing 22
10 Tarun Financiën 23

De volgende SQL-query toont alle details van werknemers in oplopende volgorde van werknemersnamen:

 SELECT * FROM Employee_Details ORDER BY Emp_Name; 

Uitgang:

Emp_Id Emp_Naam Emp_Dept Emp_Leeftijd
1 Akshay Financiën 23
3 Balram verkoop 25
5 Manoj Marketing 23
9 Naveen Marketing 22
7 Het haar Financiën 22
2 Ram Marketing 24
6 Velaal Financiën 24
10 Tarun Financiën 23
4 yatin Codering 22
8 Yogesh Codering 25

Als u de werknemers bovenaan wilt laten zien die op de afdeling Codering werken, moet u voor deze bewerking een enkele WHEN- en THEN-instructie gebruiken in de CASE-instructie, zoals weergegeven in de volgende query:

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

Uitgang:

Emp_Id Emp_Naam Emp_Dept Emp_Leeftijd
4 yatin Codering 22
8 Yogesh Codering 25
1 Akshay Financiën 23
3 Balram verkoop 25
5 Manoj Marketing 23
9 Naveen Marketing 22
7 Het haar Financiën 22
2 Ram Marketing 24
6 Velaal Financiën 24
10 Tarun Financiën 23