logo

SQL CASE

The СПРАВА це оператор, який оперує типом логічних запитів if-then-else. Цей оператор повертає значення, коли вказана умова оцінюється як True. Якщо жодна умова не має значення True, повертається значення частини ELSE.

Якщо немає частини ELSE і жодна умова не має значення True, повертається значення NULL.

У мові структурованих запитів оператор CASE використовується в операторах SELECT, INSERT і DELETE з такими трьома пунктами:

  1. Речення WHERE
  2. ORDER BY пункт
  3. Речення GROUP BY

Цей оператор у SQL завжди супроводжується принаймні однією парою операторів WHEN і THEN і завжди закінчується ключовим словом END.

У реляційних базах даних оператор CASE буває двох типів:

сортування вибору java
  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 необов’язкова.

що означає 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 &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 Акшай Фінанси 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 = &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 Листовий Фінанси 24
10 Тарун Фінанси 23