logo

СКЛ ЦАСЕ

Тхе ЦАСЕ је изјава која управља типом иф-тхен-елсе логичким упитима. Ова изјава враћа вредност када наведени услов процењује на Тачно. Када ниједан услов не добије вредност Тачно, враћа вредност дела ЕЛСЕ.

Када не постоји део ЕЛСЕ и ниједан услов не процењује вредност Тачно, враћа вредност НУЛЛ.

У језику структурираних упита, израз ЦАСЕ се користи у наредбама СЕЛЕЦТ, ИНСЕРТ и ДЕЛЕТЕ са следеће три клаузуле:

  1. Где клаузула
  2. ОРДЕР БИ Цлаусе
  3. ГРОУП БИ Клаузула

Овај израз у СКЛ-у је увек праћен најмање једним паром ВХЕН и ТХЕН наредби и увек се завршава кључном речи ЕНД.

Наредба ЦАСЕ има два типа у релационим базама података:

  1. Једноставна ЦАСЕ изјава
  2. Претражена ЦАСЕ изјава

Синтакса наредбе ЦАСЕ у СКЛ-у

 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 &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>

Излаз:

Емп_Ид Емп_Наме Емп_Депт Тотал_Салари Емп_Ремаркс
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 = &apos;Coding&apos; 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