The СЛУЧАЙ е израз, който оперира тип логически заявки if-then-else. Този израз връща стойността, когато указаното условие се изчисли като True. Когато нито едно условие не се изчисли като True, то връща стойността на частта ELSE.
Когато няма част ELSE и нито едно условие не се оценява на True, то връща стойност NULL.
В езика за структурирани заявки операторът CASE се използва в операторите SELECT, INSERT и DELETE със следните три клаузи:
- Клауза WHERE
- Клауза ORDER BY
- ГРУПИРАНЕ ПО Клауза
Този оператор в SQL винаги е последван от поне една двойка изрази WHEN и THEN и винаги завършва с ключовата дума END.
Изявлението CASE е от два типа в релационни бази данни:
урок за селен
- Прост оператор CASE
- Търсен оператор 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 >= 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>
Изход:
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 = 'Coding' 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 |
60>