logo

SQL CASE

The СЛУЧАЙ е израз, който оперира тип логически заявки if-then-else. Този израз връща стойността, когато указаното условие се изчисли като True. Когато нито едно условие не се изчисли като True, то връща стойността на частта ELSE.

Когато няма част ELSE и нито едно условие не се оценява на True, то връща стойност NULL.

В езика за структурирани заявки операторът CASE се използва в операторите SELECT, INSERT и DELETE със следните три клаузи:

  1. Клауза WHERE
  2. Клауза ORDER BY
  3. ГРУПИРАНЕ ПО Клауза

Този оператор в SQL винаги е последван от поне една двойка изрази WHEN и THEN и винаги завършва с ключовата дума END.

Изявлението CASE е от два типа в релационни бази данни:

урок за селен
  1. Прост оператор CASE
  2. Търсен оператор CASE

Синтаксис на оператор CASE в SQL

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

Тук операторът CASE оценява всяко условие едно по едно.

Ако изразът съответства на условието на първата клауза WHEN, той пропуска всички следващи условия WHEN и THEN и връща оператора_1 в резултата.

Ако изразът не съответства на първото условие WHEN, той се сравнява с второто условие WHEN. Този процес на съпоставяне ще продължи, докато изразът не бъде съпоставен с което и да е условие WHEN.

Ако никое условие не съответства на израза, контролата автоматично преминава към частта ELSE и връща своя резултат. В синтаксиса CASE частта ELSE не е задължителна.

търсачка и примери

В синтаксиса CASE и END са най-важните ключови думи, които показват началото и края на оператора CASE.

Примери за оператор CASE в SQL

Нека вземем таблицата Student_Details, която съдържа roll_no, име, оценки, предмет и град на учениците.

Roll_No Стю_Име Stu_Subject Стю_Маркс Stu_City
2001 г Акшай Наука 92 Ноида
2002 г Рам математика 49 Джайпур
2004 г Шям Английски 52 Гургаон
2005 г ятин не Четири пет Лакнау
2006 г Манодж компютър 70 Газиабад
2007 г Sheetal математика 82 Ноида
2008 г Косата Наука 62 Гургаон
2009 г Йогеш Английски 42 Лакнау
2010 г Рам компютър 88 Делхи
2011 г Шям не 35 Канпур

Пример 1: Следният SQL израз използва едно условие WHEN и THEN към оператора CASE:

 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; 

Обяснение на горната заявка:

Тук изразът CASE проверява дали ако Стю_Маркс е по-голямо от и равно на 50, връща Студент_издържал в противен случай се премества към ДРУГО част и се връща Student_Failed в Ученик_Резултат колона.

Изход:

опитайте да хванете java
Roll_No Стю_Име Stu_Subject Стю_Маркс Ученик_Резултат
2001 г Акшай Наука 92 Студент_издържал
2002 г Рам математика 49 Student_Failed
2004 г Шям Английски 52 Студент_издържал
2005 г ятин не Четири пет Student_Failed
2006 г Манодж компютър 70 Студент_издържал
2007 г Sheetal математика 82 Студент_издържал
2008 г Косата Наука 62 Студент_издържал
2009 г Йогеш Английски 42 Student_Failed
2010 г Рам компютър 88 Студент_издържал
2011 г Шям не 35 Student_Failed

Пример 2: Следният SQL израз добавя повече от едно условие WHEN и THEN към оператора CASE:

 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>

Изход:

Emp_Id Emp_Name Emp_Dept Общо_Заплата Emp_Remarks
1 Акшай Финанси 17 000 Увеличаване
2 Рам Маркетинг 9000 Намаляване
3 Шям Продажби 10 000 Увеличаване
4 ятин Кодиране 12000 Увеличаване
5 Манодж Маркетинг 8000 Намаляване

Пример 4: В този пример използваме клаузата ORDER BY с оператор CASE в SQL:

java обръща низ

Нека вземем друга таблица Employee_Details, която съдържа Emp_ID, Emp_Name, Emp_Dept и Emp_Age.

Можем да проверим данните на Employee_Details, като използваме следната заявка в SQL:

 Select * From Employee_Details; 

Изход:

Emp_Id Emp_Name Emp_Dept Emp_Age
1 Акшай Финанси 23
2 Рам Маркетинг 24
3 Балрам Продажби 25
4 ятин Кодиране 22
5 Манодж Маркетинг 23
6 Sheetal Финанси 24
7 Косата Финанси 22
8 Йогеш Кодиране 25
9 Навийн Маркетинг 22
10 Тарун Финанси 23

Следната SQL заявка показва всички подробности за служителите във възходящ ред на имената на служителите:

 SELECT * FROM Employee_Details ORDER BY Emp_Name; 

Изход:

Emp_Id Emp_Name Emp_Dept Emp_Age
1 Акшай Финанси 23
3 Балрам Продажби 25
5 Манодж Маркетинг 23
9 Навийн Маркетинг 22
7 Косата Финанси 22
2 Рам Маркетинг 24
6 Sheetal Финанси 24
10 Тарун Финанси 23
4 ятин Кодиране 22
8 Йогеш Кодиране 25

Ако искате да покажете онези служители в горната част, които работят в отдела за кодиране, тогава за тази операция трябва да използвате единичен оператор WHEN и THEN в оператора CASE, както е показано в следната заявка:

хвърляне на обработка на изключения в Java
 SELECT * FROM Employee_Details ORDER BY CASE WHEN Emp_Dept = &apos;Coding&apos; THEN 0 ELSE 1 END, Emp_Name; 

Изход:

Emp_Id Emp_Name Emp_Dept Emp_Age
4 ятин Кодиране 22
8 Йогеш Кодиране 25
1 Акшай Финанси 23
3 Балрам Продажби 25
5 Манодж Маркетинг 23
9 Навийн Маркетинг 22
7 Косата Финанси 22
2 Рам Маркетинг 24
6 Sheetal Финанси 24
10 Тарун Финанси 23