그만큼 사례 if-then-else 유형의 논리 쿼리를 수행하는 명령문입니다. 이 문은 지정된 조건이 True로 평가될 때 값을 반환합니다. 어떤 조건도 True로 평가되지 않으면 ELSE 부분의 값을 반환합니다.
ELSE 부분이 없고 True로 평가되는 조건이 없으면 NULL 값을 반환합니다.
구조적 쿼리 언어에서 CASE 문은 다음 세 가지 절이 있는 SELECT, INSERT 및 DELETE 문에 사용됩니다.
수학.랜덤 자바
- WHERE 절
- ORDER BY 조항
- GROUP BY 절
SQL의 이 문 뒤에는 항상 최소한 한 쌍의 WHEN 및 THEN 문이 오고 항상 END 키워드로 끝납니다.
CASE 문은 관계형 데이터베이스에서 두 가지 유형입니다.
- 간단한 CASE 문
- 검색된 CASE문
SQL의 CASE 문의 구문
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 부분은 선택 사항입니다.
Syntax에서 CASE와 END는 CASE문의 시작과 끝을 나타내는 가장 중요한 키워드이다.
SQL의 CASE 문의 예
Roll_no, 이름, 성적, 과목 및 학생 도시가 포함된 Student_Details 테이블을 살펴보겠습니다.
롤_아니요 | Stu_Name | Stu_주제 | Stu_Marks | Stu_City |
---|---|---|---|---|
2001년 | 악샤이 | 과학 | 92 | 노이다 |
2002년 | 램 | 수학 | 49 | 자이푸르 |
2004년 | 샤암 | 영어 | 52 | 구르가온 |
2005년 | 야틴 | 아니요 | 넷 다섯 | 러크나우 |
2006년 | 마노이 | 컴퓨터 | 70 | 가지아바드 |
2007년 | 시트탈 | 수학 | 82 | 노이다 |
2008년 | 머리카락 | 과학 | 62 | 구르가온 |
2009년 | 요게시 | 영어 | 42 | 러크나우 |
2010 | 램 | 컴퓨터 | 88 | 델리 |
2011년 | 샤암 | 아니요 | 35 | 칸푸르 |
예시 1: 다음 SQL 문은 CASE 문에 단일 WHEN 및 THEN 조건을 사용합니다.
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 문은 다음을 확인합니다. Stu_Marks 50보다 크고 같으면 다음을 반환합니다. 학생_합격 그렇지 않으면 다음으로 이동합니다. 또 다른 부품 및 반품 학생_실패 에서 학생_결과 열.
산출:
롤_아니요 | Stu_Name | Stu_주제 | Stu_Marks | 학생_결과 |
---|---|---|---|---|
2001년 | 악샤이 | 과학 | 92 | 학생_합격 |
2002년 | 램 | 수학 | 49 | 학생_실패 |
2004년 | 샤암 | 영어 | 52 | 학생_합격 |
2005년 | 야틴 | 아니요 | 넷 다섯 | 학생_실패 |
2006년 | 마노이 | 컴퓨터 | 70 | 학생_합격 |
2007년 | 시트탈 | 수학 | 82 | 학생_합격 |
2008년 | 머리카락 | 과학 | 62 | 학생_합격 |
2009년 | 요게시 | 영어 | 42 | 학생_실패 |
2010 | 램 | 컴퓨터 | 88 | 학생_합격 |
2011년 | 샤암 | 아니요 | 35 | 학생_실패 |
예 2: 다음 SQL 문은 CASE 문에 WHEN 및 THEN 조건을 두 개 이상 추가합니다.
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 | 감소 |
삼 | 샤암 | 매상 | 10000 | 증가 |
4 | 야틴 | 코딩 | 12000 | 증가 |
5 | 마노이 | 마케팅 | 8000 | 감소 |
예 4: 이 예에서는 SQL의 CASE 문과 함께 ORDER BY 절을 사용합니다.
Emp_ID, Emp_Name, Emp_Dept 및 Emp_Age가 포함된 다른 Employee_Details 테이블을 살펴보겠습니다.
SQL에서 다음 쿼리를 사용하여 Employee_Details의 데이터를 확인할 수 있습니다.
Select * From Employee_Details;
산출:
Emp_Id | Emp_Name | Emp_Dept | Emp_Age |
---|---|---|---|
1 | 악샤이 | 재원 | 23 |
2 | 램 | 마케팅 | 24 |
삼 | 발람 | 매상 | 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 |
삼 | 발람 | 매상 | 25 |
5 | 마노이 | 마케팅 | 23 |
9 | 나빈 | 마케팅 | 22 |
7 | 머리카락 | 재원 | 22 |
2 | 램 | 마케팅 | 24 |
6 | 시트탈 | 재원 | 24 |
10 | 타룬 | 재원 | 23 |
4 | 야틴 | 코딩 | 22 |
8 | 요게시 | 코딩 | 25 |
코딩 부서에서 일하는 직원을 맨 위에 표시하려면 이 작업을 위해 다음 쿼리에 표시된 대로 CASE 문에 단일 WHEN 및 THEN 문을 사용해야 합니다.
자바 문자열 메소드
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 |
삼 | 발람 | 매상 | 25 |
5 | 마노이 | 마케팅 | 23 |
9 | 나빈 | 마케팅 | 22 |
7 | 머리카락 | 재원 | 22 |
2 | 램 | 마케팅 | 24 |
6 | 시트탈 | 재원 | 24 |
10 | 타룬 | 재원 | 23 |
60>