logo

SQL CASE

The CASE on lauseke, joka käyttää if-then-else-tyyppisiä loogisia kyselyitä. Tämä lauseke palauttaa arvon, kun määritetyn ehdon arvo on tosi. Kun mikään ehto ei anna arvoa Tosi, se palauttaa ELSE-osan arvon.

java swing

Kun ELSE-osaa ei ole eikä mikään ehto anna arvoa Tosi, se palauttaa NULL-arvon.

Strukturoidussa kyselykielessä CASE-käskyä käytetään SELECT-, INSERT- ja DELETE-käskyissä seuraavilla kolmella lauseella:

  1. WHERE-lauseke
  2. TILAA lausekkeen mukaan
  3. GROUP BY Clause

Tätä SQL-käskyä seuraa aina vähintään yksi WHEN- ja THEN-käskypari, ja se päättyy aina END-avainsanalla.

CASE-käskyä on kahdenlaisia ​​relaatiotietokannoista:

  1. Yksinkertainen CASE-lauseke
  2. Haettiin CASE-lausuntoa

CASE-käskyn syntaksi SQL:ssä

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

Tässä CASE-käsky arvioi jokaisen ehdon yksitellen.

Jos lauseke vastaa ensimmäisen WHEN-lauseen ehtoa, se ohittaa kaikki muut WHEN- ja THEN-ehdot ja palauttaa tuloksessa lausekkeen_1.

Jos lauseke ei vastaa ensimmäistä WHEN-ehtoa, sitä verrataan sekuntia WHEN-ehtoon. Tämä sovitusprosessi jatkuu, kunnes lauseke on sovitettu mihin tahansa WHEN-ehtoon.

Jos lauseketta ei täsmää, ohjausobjekti siirtyy automaattisesti ELSE-osaan ja palauttaa tuloksensa. CASE-syntaksissa ELSE-osa on valinnainen.

Syntaksissa CASE ja END ovat tärkeimmät avainsanat, jotka osoittavat CASE-käskyn alun ja sulkemisen.

lista lajiteltu java

Esimerkkejä CASE-käskystä SQL:ssä

Otetaan taulukko Student_Details, joka sisältää roll_no, nimen, pisteet, aiheen ja opiskelijoiden kaupungin.

Roll_No Stu_Name Stu_Subject Stu_Marks Stu_City
2001 Akshay Tiede 92 Noida
2002 RAM Matematiikka 49 Jaipur
2004 Shyam Englanti 52 Gurgaon
2005 yatin Ei Neljä viisi Lucknow
2006 Manoj Tietokone 70 Ghaziabad
2007 Sheetal Matematiikka 82 Noida
2008 Hiukset Tiede 62 Gurgaon
2009 Yogesh Englanti 42 Lucknow
2010 RAM Tietokone 88 Delhi
2011 Shyam Ei 35 Kanpur

Esimerkki 1: Seuraava SQL-käsky käyttää yhtä WHEN- ja THEN-ehtoa CASE-käskyssä:

 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; 

Selitys yllä olevaan kyselyyn:

Tässä CASE-lauseke tarkistaa, että jos Stu_Marks on suurempi ja yhtä suuri kuin 50, se palauttaa Opiskelija_hyväksytty muutoin siirtyy MUU osa ja palautukset Opiskelija_Epäonnistui in Opiskelija_tulos sarakkeessa.

Lähtö:

Roll_No Stu_Name Stu_Subject Stu_Marks Opiskelija_tulos
2001 Akshay Tiede 92 Opiskelija_hyväksytty
2002 RAM Matematiikka 49 Opiskelija_Epäonnistui
2004 Shyam Englanti 52 Opiskelija_hyväksytty
2005 yatin Ei Neljä viisi Opiskelija_Epäonnistui
2006 Manoj Tietokone 70 Opiskelija_hyväksytty
2007 Sheetal Matematiikka 82 Opiskelija_hyväksytty
2008 Hiukset Tiede 62 Opiskelija_hyväksytty
2009 Yogesh Englanti 42 Opiskelija_Epäonnistui
2010 RAM Tietokone 88 Opiskelija_hyväksytty
2011 Shyam Ei 35 Opiskelija_Epäonnistui

Esimerkki 2: Seuraava SQL-käsky lisää CASE-käskyyn useamman kuin yhden WHEN- ja THEN-ehdon:

 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>

Lähtö:

Emp_Id Emp_Name Emp_Dept Yhteensä_Palkka Emp_Remarks
1 Akshay Rahoittaa 17 000 Lisäys
2 RAM Markkinointi 9000 Vähennys
3 Shyam Myynti 10 000 Lisäys
4 yatin Koodaus 12 000 Lisäys
5 Manoj Markkinointi 8000 Vähennys

Esimerkki 4: Tässä esimerkissä käytämme ORDER BY -lausetta CASE-käskyn kanssa SQL:ssä:

Otetaan toinen Employee_Details-taulukko, joka sisältää Emp_ID, Emp_Name, Emp_Dept ja Emp_Age.

Voimme tarkistaa Employee_Details-tiedot käyttämällä seuraavaa SQL-kyselyä:

dhl merkitys
 Select * From Employee_Details; 

Lähtö:

Emp_Id Emp_Name Emp_Dept Emp_Age
1 Akshay Rahoittaa 23
2 RAM Markkinointi 24
3 Balram Myynti 25
4 yatin Koodaus 22
5 Manoj Markkinointi 23
6 Sheetal Rahoittaa 24
7 Hiukset Rahoittaa 22
8 Yogesh Koodaus 25
9 Naveen Markkinointi 22
10 Tarun Rahoittaa 23

Seuraava SQL-kysely näyttää kaikki työntekijöiden tiedot työntekijöiden nimien nousevassa järjestyksessä:

 SELECT * FROM Employee_Details ORDER BY Emp_Name; 

Lähtö:

Emp_Id Emp_Name Emp_Dept Emp_Age
1 Akshay Rahoittaa 23
3 Balram Myynti 25
5 Manoj Markkinointi 23
9 Naveen Markkinointi 22
7 Hiukset Rahoittaa 22
2 RAM Markkinointi 24
6 Sheetal Rahoittaa 24
10 Tarun Rahoittaa 23
4 yatin Koodaus 22
8 Yogesh Koodaus 25

Jos haluat näyttää yläosassa olevat koodausosastolla työskentelevät työntekijät, sinun on käytettävä tätä toimintoa varten yhtä WHEN- ja THEN-käskyä CASE-käskyssä seuraavan kyselyn mukaisesti:

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

Lähtö:

Emp_Id Emp_Name Emp_Dept Emp_Age
4 yatin Koodaus 22
8 Yogesh Koodaus 25
1 Akshay Rahoittaa 23
3 Balram Myynti 25
5 Manoj Markkinointi 23
9 Naveen Markkinointi 22
7 Hiukset Rahoittaa 22
2 RAM Markkinointi 24
6 Sheetal Rahoittaa 24
10 Tarun Rahoittaa 23