본문 바로가기
[파이썬]/데이터베이스

[MariaDB] Case 문

by sung min_Kim 2023. 11. 25.
Case 문


조건에 따른 결과 선택


· Case문을 사용하는 이유는?


 SQL의 Case문은 조건에 따른 다양한 결과를 반환하는 데 사용되는 통제 구문이다.
 이를 통해 특정 조건에 따라 다른 값을 선택하거나, 결과를 다르게 표현할 수 있다.



  • 다양한 조건 처리 : Case문은 하나 이상의 조건을 평가하고, 각 조건에 따라 다른 결과를 반환한다.


  • 유연성 : Case문은 거의 모든 곳에서 사용될 수 있다. Select, Where, Order By 절 등에서 사용할 수 있으며, 그룹 함수와도 함께 사용할 수 있다.


  • 사용자 정의 출력 : 특정 값을 다른 값으로 대체하는 것이 가능하다.


  • Null 처리 : 특정 값이 Null일 경우 다른 값을 반환하도록 설정할 수 있다.


· Case문의 표현 방식


 Case문의 표현 방식은 크게 '단순 Case문'과 '검색 Case'문으로 분류된다.
 각 Case 문에 사용되는 표현식 또는 조건식은 독립적인 조건을 가지며, 이 조건은 순차적으로 실행된다.

 첫 번째 When 절의 조건이 참인 경우, 해당 Then 문은 실행되고, Case 문의 나머지는 평가되지 않는다.
 만약, 첫 번째 When 절의 조건이 거짓인 경우, 두 번째 When 절의 조건이 평가된다.

 이런 식으로 참인 조건을 찾을 때까지 순차적으로 평가가 계속된다.
 모든 조건이 거짓인 경우에는 Else 절이 실행된다.

 Case 문을 Select 문에서 사용할 때에는 결과 컬럼에 이름을 부여하기 위해 일반적으로 End 뒤에 별칭을 사용한다.

 

<단순 Case문> : 입력 표현식을 평가하고, 그 값이 When절에 있는 표현식과 일치하는지에 따라 적절한 값을 반환한다.

 

Case 기준값
    When 비교값 Then (해당 조건이 참인 경우) 반환할 값
    Else (참이 아닌 경우) 반환할 값
End as 별칭


 기준값과 비교값이 같으면 참인 경우로 반환값을 출력한다. 그렇지 않으면 참이 아닌 경우의 반환값이 출력된다.


단순 Case 문

 Case 문의 입력 표현식('1')이 When 절에 있는 표현식('1', '0')과 일치하는지 확인한다. 위의 경우에는 첫 번째의 표현식과 일치하므로 '1'의 값을 반환하고, Case 문의 나머지 표현식은 평가되지 않는다. 만약 '-1'과 같은 음수를 기준값으로 지정한 경우에는 일치하는 표현식이 없기에 Else 절의 결과값인 음수를 반환하게 된다.


<검색 Case문> : 이 형태의 Case문은 각 각 When 절에 있는 조건을 평가하고, 참인 조건의 결과를 반환한다.

 

Case
    When 조건식 Then (해당 조건이 참인 경우) 반환할 값
    Else (참이 아닌 경우) 반환할 값
End as 별칭


  조건식이 참이라면 Then 문의 값이 반환되며, 참인 경우가 존재하지 않는다면 Else 문이 실행된다.


검색 Case 문

 나이가 20살 이상은 '성인' 미만은 '미성년자'로 값을 반환하고, 둘 다 만족하지 않으면 Else 문의 'Unknown' 값이 반환된다.  When 절의 첫 번째 조건이 참이면 '성인'이라는 결과값을 반환하고, 그 이후의 When 절의 조건은 평가하지 않는다.

 


· Case 문과 If 문의 차이점

 

 

  • 조건 처리 방식: Case 문은 여러 개의 조건을 순차적으로 평가하는 반면, If 문은 단일 조건을 평가하며, 조건이 참인 경우와 거짓인 경우에 반환할 값 두 가지를 지정한다.

  • 조건 개수 : Case문은 필요한 만큼 여러 개의 When 절을 가질 수 있어 복잡한 로직을 처리하는데 유용하지만, If 문은 하나의 조건만 처리할 수 있다. 

 복잡한 로직을 처리하는 경우에는 Case문을, 단순한 로직을 처리하는 경우에는 If문을 사용하는 것이 좋다.

 


· 예시

 

<예시_Case 문 활용하기>  회원ID, 회원이름, 성별을 조회하기

- 조회 컬럼 : 회원ID(mem_id), 회원이름(mem_name), 성별(mem_regno2)

 

 회원의 주민번호 뒷자리 중 첫 번째 자리가 짝수이면 '여성', 홀수이면 '남성'이라는 두 가지의 조건식을 나열하였다. 따라서 회원(Member) 테이블에 있는 모든 행에 대해 이 조건을 검사하고, 각 행마다 해당하는 값('여성' or '남성')을 men_gen 컬럼으로 반환한다. 각 행은 개별적으로 조건을 평가하므로, 한 행에서는 '여성'이 반환되고, 다른 한 행에서는 '남성'이 반환된다.
 

'[파이썬] > 데이터베이스' 카테고리의 다른 글

[MariaDB] Join (Inner Join, Outer Join)  (1) 2023.11.26
[MariaDB] If 함수  (0) 2023.11.25
[MariaDB] 정렬 (Order By)  (0) 2023.11.25
[MariaDB] 별칭(식별자)  (1) 2023.11.25
[MariaDB] 연산자  (1) 2023.11.25