logo

SQL 케이스

그만큼 사례 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 문은 관계형 데이터베이스에서 두 가지 유형입니다.

  1. 간단한 CASE 문
  2. 검색된 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 &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 감소
샤암 매상 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 = &apos;Coding&apos; 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