Тхе ЦАСЕ је изјава која управља типом иф-тхен-елсе логичким упитима. Ова изјава враћа вредност када наведени услов процењује на Тачно. Када ниједан услов не добије вредност Тачно, враћа вредност дела ЕЛСЕ.
Када не постоји део ЕЛСЕ и ниједан услов не процењује вредност Тачно, враћа вредност НУЛЛ.
У језику структурираних упита, израз ЦАСЕ се користи у наредбама СЕЛЕЦТ, ИНСЕРТ и ДЕЛЕТЕ са следеће три клаузуле:
- Где клаузула
- ОРДЕР БИ Цлаусе
- ГРОУП БИ Клаузула
Овај израз у СКЛ-у је увек праћен најмање једним паром ВХЕН и ТХЕН наредби и увек се завршава кључном речи ЕНД.
Наредба ЦАСЕ има два типа у релационим базама података:
- Једноставна ЦАСЕ изјава
- Претражена ЦАСЕ изјава
Синтакса наредбе ЦАСЕ у СКЛ-у
CASE WHEN condition_1 THEN statement_1 WHEN condition_2 THEN statement_2 ……. WHEN condition_N THEN statement_N ELSE result END;
Овде, наредба ЦАСЕ процењује сваки услов један по један.
Ако израз одговара услову прве ВХЕН клаузуле, он прескаче све даље услове ВХЕН и ТХЕН и враћа исказ_1 у резултату.
755 цхмод
Ако се израз не поклапа са првим условом ВХЕН, упоређује се са другим условом ВХЕН. Овај процес упаривања ће се наставити све док се израз не усклади са било којим условом ВХЕН.
Ако се ниједан услов не подудара са изразом, контрола аутоматски иде у ЕЛСЕ део и враћа свој резултат. У синтакси ЦАСЕ, део ЕЛСЕ је опциони.
У синтакси, ЦАСЕ и ЕНД су најважније кључне речи које показују почетак и затварање наредбе ЦАСЕ.
Примери исказа ЦАСЕ у СКЛ-у
Узмимо табелу Студент_Детаилс, која садржи ролл_но, име, оцене, предмет и град ученика.
Ролл_Но | Сту_Наме | Сту_Субјецт | Сту_Маркс | Сту_Цити |
---|---|---|---|---|
2001 | Аксхаи | Наука | 92 | Ноида |
2002 | РАМ | Матх | 49 | Јаипур |
2004 | Схиам | енглески језик | 52 | Гургаон |
2005 | иатин | Јок | Четири, пет | Луцкнов |
2006 | Маној | рачунар | 70 | Гхазиабад |
2007 | Схеетал | Матх | 82 | Ноида |
2008 | Коса | Наука | 62 | Гургаон |
2009 | Иогесх | енглески језик | 42 | Луцкнов |
2010 | РАМ | рачунар | 88 | Делхи |
2011 | Схиам | Јок | 35 | Канпур |
Пример 1: Следећи СКЛ израз користи један услов ВХЕН и ТХЕН за наредбу ЦАСЕ:
саира бану глумац
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;
Објашњење горњег упита:
Овде, наредба ЦАСЕ проверава да ли је Сту_Маркс је већи и једнак 50, враћа се Студент_Пассед иначе прелази на ЕЛСЕ део и враћа Студент_Фаилед у Студент_Ресулт колона.
Излаз:
Ролл_Но | Сту_Наме | Сту_Субјецт | Сту_Маркс | Студент_Ресулт |
---|---|---|---|---|
2001 | Аксхаи | Наука | 92 | Студент_Пассед |
2002 | РАМ | Матх | 49 | Студент_Фаилед |
2004 | Схиам | енглески језик | 52 | Студент_Пассед |
2005 | иатин | Јок | Четири, пет | Студент_Фаилед |
2006 | Маној | рачунар | 70 | Студент_Пассед |
2007 | Схеетал | Матх | 82 | Студент_Пассед |
2008 | Коса | Наука | 62 | Студент_Пассед |
2009 | Иогесх | енглески језик | 42 | Студент_Фаилед |
2010 | РАМ | рачунар | 88 | Студент_Пассед |
2011 | Схиам | Јок | 35 | Студент_Фаилед |
Пример 2: Следећи СКЛ израз додаје више од једног услова ВХЕН и ТХЕН наредби ЦАСЕ:
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>
Излаз:
Емп_Ид | Емп_Наме | Емп_Депт | Тотал_Салари | Емп_Ремаркс |
---|---|---|---|---|
1 | Аксхаи | финансије | 17000 | Повећање |
2 | РАМ | Маркетинг | 9000 | Декремент |
3 | Схиам | Продаја | 10000 | Повећање |
4 | иатин | Кодирање | 12000 | Повећање |
5 | Маној | Маркетинг | 8000 | Декремент |
Пример 4: У овом примеру користимо клаузулу ОРДЕР БИ са наредбом ЦАСЕ у СКЛ-у:
Узмимо још једну табелу Емплоиее_Детаилс која садржи Емп_ИД, Емп_Наме, Емп_Депт и Емп_Аге.
Можемо да проверимо податке Емплоиее_Детаилс користећи следећи упит у СКЛ-у:
Select * From Employee_Details;
Излаз:
Емп_Ид | Емп_Наме | Емп_Депт | Емп_Аге |
---|---|---|---|
1 | Аксхаи | финансије | 23 |
2 | РАМ | Маркетинг | 24 |
3 | Балрам | Продаја | 25 |
4 | иатин | Кодирање | 22 |
5 | Маној | Маркетинг | 23 |
6 | Схеетал | финансије | 24 |
7 | Коса | финансије | 22 |
8 | Иогесх | Кодирање | 25 |
9 | Навеен | Маркетинг | 22 |
10 | Тарун | финансије | 23 |
Следећи СКЛ упит приказује све детаље о запосленима у растућем редоследу имена запослених:
најбољи ауто на свету
SELECT * FROM Employee_Details ORDER BY Emp_Name;
Излаз:
Емп_Ид | Емп_Наме | Емп_Депт | Емп_Аге |
---|---|---|---|
1 | Аксхаи | финансије | 23 |
3 | Балрам | Продаја | 25 |
5 | Маној | Маркетинг | 23 |
9 | Навеен | Маркетинг | 22 |
7 | Коса | финансије | 22 |
2 | РАМ | Маркетинг | 24 |
6 | Схеетал | финансије | 24 |
10 | Тарун | финансије | 23 |
4 | иатин | Кодирање | 22 |
8 | Иогесх | Кодирање | 25 |
Ако желите да прикажете оне запослене на врху који раде у одељењу за кодирање, онда за ову операцију морате да користите једну изјаву ВХЕН и ТХЕН у исказу ЦАСЕ као што је приказано у следећем упиту:
SELECT * FROM Employee_Details ORDER BY CASE WHEN Emp_Dept = 'Coding' THEN 0 ELSE 1 END, Emp_Name;
Излаз:
Емп_Ид | Емп_Наме | Емп_Депт | Емп_Аге |
---|---|---|---|
4 | иатин | Кодирање | 22 |
8 | Иогесх | Кодирање | 25 |
1 | Аксхаи | финансије | 23 |
3 | Балрам | Продаја | 25 |
5 | Маној | Маркетинг | 23 |
9 | Навеен | Маркетинг | 22 |
7 | Коса | финансије | 22 |
2 | РАМ | Маркетинг | 24 |
6 | Схеетал | финансије | 24 |
10 | Тарун | финансије | 23 |
60>