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:
- WAAR clausule
- BESTEL PER clausule
- 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:
- Eenvoudige CASE-instructie
- 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 >= 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>
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 = 'Coding' 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 |
60>