logo

SQL CASE

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
  1. VAR Klausul
  2. BESTÄLL MED Klausul
  3. 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:

  1. Enkelt CASE-uttalande
  2. 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 &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>

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 = &apos;Coding&apos; 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