The СПРАВА це оператор, який оперує типом логічних запитів if-then-else. Цей оператор повертає значення, коли вказана умова оцінюється як True. Якщо жодна умова не має значення True, повертається значення частини ELSE.
Якщо немає частини ELSE і жодна умова не має значення True, повертається значення NULL.
У мові структурованих запитів оператор CASE використовується в операторах SELECT, INSERT і DELETE з такими трьома пунктами:
- Речення WHERE
- ORDER BY пункт
- Речення GROUP BY
Цей оператор у SQL завжди супроводжується принаймні однією парою операторів WHEN і THEN і завжди закінчується ключовим словом END.
У реляційних базах даних оператор CASE буває двох типів:
сортування вибору java
- Простий оператор 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 необов’язкова.
що означає xdxd
У синтаксисі CASE і END є найважливішими ключовими словами, які показують початок і кінець оператора CASE.
Приклади оператора CASE в SQL
Давайте візьмемо таблицю Student_Details, яка містить roll_no, ім’я, оцінки, предмет і місто студентів.
№ рулону | Stu_Name | Stu_Subject | Стю_Маркс | Stu_City |
---|---|---|---|---|
2001 рік | Акшай | Наука | 92 | Ноїда |
2002 рік | ОЗП | математика | 49 | Джайпур |
2004 рік | Шям | англійська | 52 | Гургаон |
2005 рік | ятин | ні | Чотири | Лакнау |
2006 рік | Манодж | комп'ютер | 70 | Газіабад |
2007 рік | Листовий | математика | 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_Passed інакше переходить до ІНШЕ частина і повертає Student_Failed в Учень_Результат колонка.
Вихід:
двійковий пошук
№ рулону | Stu_Name | Stu_Subject | Стю_Маркс | Учень_Результат |
---|---|---|---|---|
2001 рік | Акшай | Наука | 92 | Student_Passed |
2002 рік | ОЗП | математика | 49 | Student_Failed |
2004 рік | Шям | англійська | 52 | Student_Passed |
2005 рік | ятин | ні | Чотири | Student_Failed |
2006 рік | Манодж | комп'ютер | 70 | Student_Passed |
2007 рік | Листовий | математика | 82 | Student_Passed |
2008 рік | Волосся | Наука | 62 | Student_Passed |
2009 рік | Йогеш | англійська | 42 | Student_Failed |
2010 рік | ОЗП | комп'ютер | 88 | Student_Passed |
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 | Акшай | Фінанси | 17000 | Приріст |
2 | ОЗП | Маркетинг | 9000 | Декремент |
3 | Шям | Продажі | 10000 | Приріст |
4 | ятин | Кодування | 12000 | Приріст |
5 | Манодж | Маркетинг | 8000 | Декремент |
Приклад 4. У цьому прикладі ми використовуємо речення ORDER BY із оператором CASE у SQL:
спробуйте структуру даних
Давайте візьмемо ще одну таблицю 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 | Листовий | Фінанси | 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 | Листовий | Фінанси | 24 |
10 | Тарун | Фінанси | 23 |
4 | ятин | Кодування | 22 |
8 | Йогеш | Кодування | 25 |
Якщо ви хочете показати тих працівників у верхній частині, які працюють у відділі кодування, тоді для цієї операції ви повинні використовувати один оператор WHEN і THEN у операторі CASE, як показано в наступному запиті:
sql порядок у випадковому порядку
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 | Листовий | Фінанси | 24 |
10 | Тарун | Фінанси | 23 |
60>