logo

PŘÍPAD SQL

The POUZDRO je příkaz, který provozuje logické dotazy typu if-then-else. Tento příkaz vrátí hodnotu, když se zadaná podmínka vyhodnotí jako True. Když se žádná podmínka nevyhodnotí jako True, vrátí hodnotu části ELSE.

Pokud neexistuje žádná ELSE část a žádná podmínka není vyhodnocena jako True, vrátí hodnotu NULL.

V jazyce Structured Query Language se příkaz CASE používá v příkazech SELECT, INSERT a DELETE s následujícími třemi klauzulemi:

  1. Klauzule WHERE
  2. OBJEDNAT PODLE klauzule
  3. GROUP BY klauzule

Za tímto příkazem v SQL vždy následuje alespoň jeden pár příkazů WHEN a THEN a vždy je zakončen klíčovým slovem END.

Příkaz CASE je v relačních databázích dvou typů:

  1. Jednoduchý příkaz CASE
  2. Vyhledaný příkaz CASE

Syntaxe příkazu CASE v SQL

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

Zde příkaz CASE vyhodnocuje každou podmínku jednu po druhé.

Pokud výraz odpovídá podmínce první klauzule WHEN, přeskočí všechny další podmínky WHEN a THEN a ve výsledku vrátí příkaz_1.

Pokud výraz neodpovídá první podmínce WHEN, porovná se se sekundovou podmínkou WHEN. Tento proces porovnávání bude pokračovat, dokud nebude výraz porovnán s jakoukoli podmínkou WHEN.

Pokud výrazu neodpovídá žádná podmínka, ovládací prvek automaticky přejde do části ELSE a vrátí svůj výsledek. V syntaxi CASE je část ELSE volitelná.

V syntaxi jsou CASE a END nejdůležitější klíčová slova, která ukazují začátek a konec příkazu CASE.

Příklady příkazů CASE v SQL

Vezměme si tabulku Student_Details, která obsahuje číslo role, jméno, známky, předmět a město studentů.

Číslo_role Jméno Stu Stu_Subject Stu_Marks Stu_City
2001 Akshay Věda 92 Noida
2002 RAM Matematika 49 Jaipur
2004 Shyam Angličtina 52 Gurgaon
2005 yatin ani náhodou Čtyři pět Lucknow
2006 Manoj Počítač 70 Ghaziabad
2007 Plechové Matematika 82 Noida
2008 Vlasy Věda 62 Gurgaon
2009 Yogesh Angličtina 42 Lucknow
2010 RAM Počítač 88 Dillí
2011 Shyam ani náhodou 35 Kanpur

Příklad 1: Následující příkaz SQL používá jedinou podmínku WHEN a THEN pro příkaz CASE:

java programy
 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; 

Vysvětlení výše uvedeného dotazu:

Zde příkaz CASE kontroluje, zda je-li Stu_Marks je větší než a rovná se 50, vrátí Student_Passed jinak se přesune do JINÝ díl a vrací Student_Failed v Student_Result sloupec.

Výstup:

Číslo_role Jméno Stu Stu_Subject Stu_Marks Student_Result
2001 Akshay Věda 92 Student_Passed
2002 RAM Matematika 49 Student_Failed
2004 Shyam Angličtina 52 Student_Passed
2005 yatin ani náhodou Čtyři pět Student_Failed
2006 Manoj Počítač 70 Student_Passed
2007 Plechové Matematika 82 Student_Passed
2008 Vlasy Věda 62 Student_Passed
2009 Yogesh Angličtina 42 Student_Failed
2010 RAM Počítač 88 Student_Passed
2011 Shyam ani náhodou 35 Student_Failed

Příklad 2: Následující příkaz SQL přidá do příkazu CASE více než jednu podmínku WHEN a THEN:

 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>

Výstup:

Emp_Id Emp_Name Emp_Dept Celkový_plat Emp_Remarks
1 Akshay Finance 17 000 Přírůstek
2 RAM Marketing 9000 Dekrementovat
3 Shyam Odbyt 10 000 Přírůstek
4 yatin Kódování 12 000 Přírůstek
5 Manoj Marketing 8000 Dekrementovat

Příklad 4: V tomto příkladu používáme klauzuli ORDER BY s příkazem CASE v SQL:

Vezměme si další tabulku Employee_Details, která obsahuje Emp_ID, Emp_Name, Emp_Dept a Emp_Age.

dva na jeden multiplexer

Data Employee_Details můžeme zkontrolovat pomocí následujícího dotazu v SQL:

 Select * From Employee_Details; 

Výstup:

Emp_Id Emp_Name Emp_Dept Emp_Age
1 Akshay Finance 23
2 RAM Marketing 24
3 Balram Odbyt 25
4 yatin Kódování 22
5 Manoj Marketing 23
6 Plechové Finance 24
7 Vlasy Finance 22
8 Yogesh Kódování 25
9 Naveen Marketing 22
10 Tarun Finance 23

Následující SQL dotaz zobrazuje všechny podrobnosti o zaměstnancích ve vzestupném pořadí jmen zaměstnanců:

 SELECT * FROM Employee_Details ORDER BY Emp_Name; 

Výstup:

Emp_Id Emp_Name Emp_Dept Emp_Age
1 Akshay Finance 23
3 Balram Odbyt 25
5 Manoj Marketing 23
9 Naveen Marketing 22
7 Vlasy Finance 22
2 RAM Marketing 24
6 Plechové Finance 24
10 Tarun Finance 23
4 yatin Kódování 22
8 Yogesh Kódování 25

Pokud chcete zobrazit ty zaměstnance nahoře, kteří pracují v oddělení kódování, pak pro tuto operaci musíte použít jeden příkaz WHEN a THEN v příkazu CASE, jak je znázorněno v následujícím dotazu:

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

Výstup:

Emp_Id Emp_Name Emp_Dept Emp_Age
4 yatin Kódování 22
8 Yogesh Kódování 25
1 Akshay Finance 23
3 Balram Odbyt 25
5 Manoj Marketing 23
9 Naveen Marketing 22
7 Vlasy Finance 22
2 RAM Marketing 24
6 Plechové Finance 24
10 Tarun Finance 23