A ÜGY egy olyan utasítás, amely if-then-else típusú logikai lekérdezéseket működtet. Ez az utasítás visszaadja az értéket, amikor a megadott feltétel kiértékelése True. Ha egyetlen feltétel sem ad igaz értéket, akkor az ELSE rész értékét adja vissza.
Ha nincs ELSE rész, és egyetlen feltétel sem ad igazat, akkor NULL értéket ad vissza.
A Strukturált lekérdezési nyelvben a CASE utasítás a SELECT, INSERT és DELETE utasításokban használatos a következő három záradékkal:
- WHERE záradék
- RENDELÉS ZÁRADÉKKAL
- GROUP BY záradék
Ezt az SQL utasítást mindig legalább egy pár WHEN és THEN követi, és mindig az END kulcsszóval fejeződik be.
A CASE utasításnak két típusa van a relációs adatbázisokban:
- Egyszerű CASE utasítás
- CASE utasítás keresve
A CASE utasítás szintaxisa SQL-ben
CASE WHEN condition_1 THEN statement_1 WHEN condition_2 THEN statement_2 ……. WHEN condition_N THEN statement_N ELSE result END;
Itt a CASE utasítás egyenként értékeli az egyes feltételeket.
Ha a kifejezés egyezik az első WHEN záradék feltételével, akkor kihagyja az összes további WHEN és THEN feltételt, és az eredményben a_1 utasítást adja vissza.
Ha a kifejezés nem egyezik az első WHEN feltétellel, akkor összehasonlítja a második WHEN feltétellel. Ez az egyeztetési folyamat mindaddig folytatódik, amíg a kifejezés nem illeszkedik bármely WHEN feltételhez.
Ha egy feltétel sem egyezik a kifejezéssel, a vezérlő automatikusan az ELSE részre lép, és visszaadja az eredményét. A CASE szintaxisban az ELSE rész nem kötelező.
A szintaxisban a CASE és az END a legfontosabb kulcsszavak, amelyek a CASE utasítás elejét és zárását jelzik.
Példák a CASE utasításra SQL-ben
Vegyük a Student_Details táblát, amely tartalmazza a roll_no-t, a nevet, a jegyeket, a tárgyat és a tanulók városát.
Roll_No | Stu_Name | Stu_Subject | Stu_Marks | Stu_City |
---|---|---|---|---|
2001 | Akshay | Tudomány | 92 | Noida |
2002 | Ram | Math | 49 | Jaipur |
2004 | Shyam | angol | 52 | Gurgaon |
2005 | yatin | Dehogy | Négy öt | Lucknow |
2006 | Manoj | Számítógép | 70 | Ghaziabad |
2007 | Sheetal | Math | 82 | Noida |
2008 | A haj | Tudomány | 62 | Gurgaon |
2009 | Yogesh | angol | 42 | Lucknow |
2010 | Ram | Számítógép | 88 | Delhi |
2011 | Shyam | Dehogy | 35 | Kanpur |
1. példa: A következő SQL utasítás egyetlen WHEN és THEN feltételt használ a CASE utasításhoz:
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;
A fenti lekérdezés magyarázata:
Itt a CASE utasítás ellenőrzi, hogy ha a Stu_Marks nagyobb, mint 50 és egyenlő, akkor visszaadja Student_Passed egyébként a MÁS rész és visszaküldi Student_Failed ban,-ben Diák_eredmény oszlop.
Kimenet:
Roll_No | Stu_Name | Stu_Subject | Stu_Marks | Diák_eredmény |
---|---|---|---|---|
2001 | Akshay | Tudomány | 92 | Student_Passed |
2002 | Ram | Math | 49 | Student_Failed |
2004 | Shyam | angol | 52 | Student_Passed |
2005 | yatin | Dehogy | Négy öt | Student_Failed |
2006 | Manoj | Számítógép | 70 | Student_Passed |
2007 | Sheetal | Math | 82 | Student_Passed |
2008 | A haj | Tudomány | 62 | Student_Passed |
2009 | Yogesh | angol | 42 | Student_Failed |
2010 | Ram | Számítógép | 88 | Student_Passed |
2011 | Shyam | Dehogy | 35 | Student_Failed |
2. példa: A következő SQL utasítás egynél több WHEN és THEN feltételt ad a CASE utasításhoz:
java fő módszer
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>
Kimenet:
Emp_Id | Emp_Name | Emp_Dept | Összes_fizetés | Emp_Megjegyzések |
---|---|---|---|---|
1 | Akshay | Pénzügy | 17000 | Növekedés |
2 | Ram | Marketing | 9000 | Csökkenés |
3 | Shyam | Értékesítés | 10000 | Növekedés |
4 | yatin | Kódolás | 12000 | Növekedés |
5 | Manoj | Marketing | 8000 | Csökkenés |
4. példa: Ebben a példában az ORDER BY záradékot használjuk egy CASE utasítással az SQL-ben:
Vegyünk egy másik Employee_Details táblát, amely az Emp_ID, Emp_Name, Emp_Dept és Emp_Age elemeket tartalmazza.
Az Employee_Details adatait a következő lekérdezéssel tudjuk ellenőrizni SQL-ben:
Select * From Employee_Details;
Kimenet:
Emp_Id | Emp_Name | Emp_Dept | Emp_Age |
---|---|---|---|
1 | Akshay | Pénzügy | 23 |
2 | Ram | Marketing | 24 |
3 | Balram | Értékesítés | 25 |
4 | yatin | Kódolás | 22 |
5 | Manoj | Marketing | 23 |
6 | Sheetal | Pénzügy | 24 |
7 | A haj | Pénzügy | 22 |
8 | Yogesh | Kódolás | 25 |
9 | Naveen | Marketing | 22 |
10 | Tarun | Pénzügy | 23 |
A következő SQL-lekérdezés az alkalmazottak összes adatát az alkalmazottak nevének növekvő sorrendjében jeleníti meg:
SELECT * FROM Employee_Details ORDER BY Emp_Name;
Kimenet:
Emp_Id | Emp_Name | Emp_Dept | Emp_Age |
---|---|---|---|
1 | Akshay | Pénzügy | 23 |
3 | Balram | Értékesítés | 25 |
5 | Manoj | Marketing | 23 |
9 | Naveen | Marketing | 22 |
7 | A haj | Pénzügy | 22 |
2 | Ram | Marketing | 24 |
6 | Sheetal | Pénzügy | 24 |
10 | Tarun | Pénzügy | 23 |
4 | yatin | Kódolás | 22 |
8 | Yogesh | Kódolás | 25 |
Ha a Kódolási Osztályon dolgozó alkalmazottakat szeretné a tetején megjeleníteni, akkor ehhez a művelethez egyetlen WHEN és THEN utasítást kell használnia a CASE utasításban, ahogy az a következő lekérdezésben látható:
SELECT * FROM Employee_Details ORDER BY CASE WHEN Emp_Dept = 'Coding' THEN 0 ELSE 1 END, Emp_Name;
Kimenet:
Emp_Id | Emp_Name | Emp_Dept | Emp_Age |
---|---|---|---|
4 | yatin | Kódolás | 22 |
8 | Yogesh | Kódolás | 25 |
1 | Akshay | Pénzügy | 23 |
3 | Balram | Értékesítés | 25 |
5 | Manoj | Marketing | 23 |
9 | Naveen | Marketing | 22 |
7 | A haj | Pénzügy | 22 |
2 | Ram | Marketing | 24 |
6 | Sheetal | Pénzügy | 24 |
10 | Tarun | Pénzügy | 23 |
60>