De FALL är en sats som driver logiska frågor av typen if-then-else. Denna sats returnerar värdet när det angivna villkoret utvärderas till True. När inget villkor utvärderas till True, returnerar det värdet för ELSE-delen.
När det inte finns någon ELSE-del och inget villkor utvärderas till True, returnerar det ett NULL-värde.
I Structured Query Language används CASE-satsen i SELECT-, INSERT- och DELETE-satser med följande tre satser:
java hashmap
- VAR Klausul
- BESTÄLL MED Klausul
- GROUP BY Klausul
Denna sats i SQL följs alltid av minst ett par WHEN- och THEN-satser och avslutas alltid med nyckelordet END.
CASE-satsen är av två typer i relationsdatabaser:
- Enkelt CASE-uttalande
- Sökte i CASE-satsen
Syntax för CASE-satsen i SQL
CASE WHEN condition_1 THEN statement_1 WHEN condition_2 THEN statement_2 ……. WHEN condition_N THEN statement_N ELSE result END;
Här utvärderar CASE-satsen varje tillstånd en efter en.
Om uttrycket matchar villkoret för den första WHEN-satsen, hoppar det över alla ytterligare WHEN- och THEN-villkor och returnerar satsen_1 i resultatet.
Om uttrycket inte matchar det första WHEN-villkoret, jämförs det med det andra WHEN-villkoret. Denna matchning kommer att fortsätta tills uttrycket matchas med något WHEN-villkor.
Om inget villkor matchas med uttrycket, går kontrollen automatiskt till ELSE-delen och returnerar sitt resultat. I CASE-syntaxen är ELSE-delen valfri.
I Syntax är CASE och END de viktigaste nyckelorden som visar början och slutet av CASE-satsen.
Exempel på CASE-sats i SQL
Låt oss ta tabellen Student_Details, som innehåller roll_no, namn, betyg, ämne och studentstad.
Roll_No | Stu_Name | Stu_Subject | Stu_Marks | Stu_City |
---|---|---|---|---|
2001 | Akshay | Vetenskap | 92 | Noida |
2002 | Bagge | Matematik | 49 | Jaipur |
2004 | Shyam | engelsk | 52 | Gurgaon |
2005 | yatin | Nej | Fyra fem | Lyckligtvis |
2006 | Manoj | Dator | 70 | Ghaziabad |
2007 | Plåt | Matematik | 82 | Noida |
2008 | Håret | Vetenskap | 62 | Gurgaon |
2009 | Yogesh | engelsk | 42 | Lyckligtvis |
2010 | Bagge | Dator | 88 | Delhi |
2011 | Shyam | Nej | 35 | Kanpur |
Exempel 1: Följande SQL-sats använder enstaka WHEN- och THEN-villkor för CASE-satsen:
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;
Förklaring av ovanstående fråga:
Här kontrollerar CASE-utlåtandet att om Stu_Marks är större än och lika med 50, returnerar den Student_Godkänd annars flyttar till ANNAN del och returer Student_Failed i Student_Result kolumn.
Produktion:
Roll_No | Stu_Name | Stu_Subject | Stu_Marks | Student_Result |
---|---|---|---|---|
2001 | Akshay | Vetenskap | 92 | Student_Godkänd |
2002 | Bagge | Matematik | 49 | Student_Failed |
2004 | Shyam | engelsk | 52 | Student_Godkänd |
2005 | yatin | Nej | Fyra fem | Student_Failed |
2006 | Manoj | Dator | 70 | Student_Godkänd |
2007 | Plåt | Matematik | 82 | Student_Godkänd |
2008 | Håret | Vetenskap | 62 | Student_Godkänd |
2009 | Yogesh | engelsk | 42 | Student_Failed |
2010 | Bagge | Dator | 88 | Student_Godkänd |
2011 | Shyam | Nej | 35 | Student_Failed |
Exempel 2: Följande SQL-sats lägger till mer än ett WHEN- och THEN-villkor till CASE-satsen:
byt namn på linux-katalogen
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>
Produktion:
Emp_Id | Emp_Name | Emp_Dept | Total_Lön | Emp_Remarks |
---|---|---|---|---|
1 | Akshay | Finansiera | 17 000 | Ökning |
2 | Bagge | Marknadsföring | 9000 | Minskning |
3 | Shyam | Försäljning | 10 000 | Ökning |
4 | yatin | Kodning | 12 000 | Ökning |
5 | Manoj | Marknadsföring | 8000 | Minskning |
Exempel 4: I det här exemplet använder vi ORDER BY-satsen med en CASE-sats i SQL:
Låt oss ta en annan Employee_Details-tabell som innehåller Emp_ID, Emp_Name, Emp_Dept och Emp_Age.
Vi kan kontrollera data för Employee_Details genom att använda följande fråga i SQL:
Select * From Employee_Details;
Produktion:
Emp_Id | Emp_Name | Emp_Dept | Emp_Age |
---|---|---|---|
1 | Akshay | Finansiera | 23 |
2 | Bagge | Marknadsföring | 24 |
3 | Balram | Försäljning | 25 |
4 | yatin | Kodning | 22 |
5 | Manoj | Marknadsföring | 23 |
6 | Plåt | Finansiera | 24 |
7 | Håret | Finansiera | 22 |
8 | Yogesh | Kodning | 25 |
9 | Naveen | Marknadsföring | 22 |
10 | Tarun | Finansiera | 23 |
Följande SQL-fråga visar alla uppgifter om anställda i stigande ordning av anställdas namn:
SELECT * FROM Employee_Details ORDER BY Emp_Name;
Produktion:
Emp_Id | Emp_Name | Emp_Dept | Emp_Age |
---|---|---|---|
1 | Akshay | Finansiera | 23 |
3 | Balram | Försäljning | 25 |
5 | Manoj | Marknadsföring | 23 |
9 | Naveen | Marknadsföring | 22 |
7 | Håret | Finansiera | 22 |
2 | Bagge | Marknadsföring | 24 |
6 | Plåt | Finansiera | 24 |
10 | Tarun | Finansiera | 23 |
4 | yatin | Kodning | 22 |
8 | Yogesh | Kodning | 25 |
Om du vill visa de anställda högst upp som arbetar i kodningsavdelningen måste du för den här operationen använda en enkel WHEN- och THEN-sats i CASE-satsen som visas i följande fråga:
SELECT * FROM Employee_Details ORDER BY CASE WHEN Emp_Dept = 'Coding' THEN 0 ELSE 1 END, Emp_Name;
Produktion:
Emp_Id | Emp_Name | Emp_Dept | Emp_Age |
---|---|---|---|
4 | yatin | Kodning | 22 |
8 | Yogesh | Kodning | 25 |
1 | Akshay | Finansiera | 23 |
3 | Balram | Försäljning | 25 |
5 | Manoj | Marknadsföring | 23 |
9 | Naveen | Marknadsföring | 22 |
7 | Håret | Finansiera | 22 |
2 | Bagge | Marknadsföring | 24 |
6 | Plåt | Finansiera | 24 |
10 | Tarun | Finansiera | 23 |
60>