본문 바로가기
데이터 모델과 SQL

[데이터 모델과 SQL] 19. CASE 구문 - 조건에 따른 처리

by 영바이트 2023. 4. 6.

 

데이터(data)와 정보(information)는 다르다. 데이터를 데이터베이스에 저장되어 있는 그대로의 것이라고 한다면 정보는 이를 가공하여 읽는 사람에게 의미를 주도록 한 것이다. 예를 들어 데이터베이스에 성별을 의미하는 'M', 'F'라는 알파벳이 저장되어 있다면 이를 '남성', '여성'이라는 정보로 변환할 수 있다.

 

데이터를 어떤 조건에 따라 변환할 때 SQL에서는 CASE WHEN 구문을 사용한다. 사용 방법을 먼저 살펴보자.

CASE WHEN <조건 1> THEN <처리 1> WHEN <조건 2> THEN <처리 2> ELSE <처리 3> END

예는 아래와 같다. StudGender 컬럼의 값이 'M', 'F' 혹은 그 이외의 값인가에 따라 다른 값으로 바꾸어준다.

SELECT StudId, StudFirstName, StudLastName, 
(CASE WHEN StudGender='M' THEN 'Male' 
WHEN StudGender='F' THEN 'Female' 
ELSE 'Not specified' END) AS GENDER 
FROM students;

 

CASE 구문을 아래와 같이 CASE와 WHEN 키워드 사이에 조건을 제공하는 컬럼을 넣어 사용할 수도 있다.

CASE <컬럼> WHEN <컬럼 조건 1> THEN <처리 1> WHEN <컬럼 조건 2> THEN <처리 2> ELSE <처리 3> END

다시 학생의 성별을 나타내는 예를 위 문법으로 표현하면 아래와 같다.

SELECT StudId, StudFirstName, StudLastName, 
(CASE StudGender 
WHEN 'M' THEN 'Male' 
WHEN 'F' THEN 'Female' 
ELSE 'Not specified' END) AS GENDER 
FROM students;

 

개인적인 생각이지만 첫 번째 방법, CASE WHEN을 사용하고 컬럼='조건'으로 나열해 주는 방법이 조금 더 직관적이고 외우기 쉽다고 생각한다. 중요한 것은 두 방법을 함께 사용하면 혼란스러우니 한 방법을 택해서 그 방법만 사용하는 것을 추천한다.

 

CASE WHEN 구문을 보통 SELECT list 안의 값을 나타낼 때 사용한다. 하지만 반드시 SELECT list 안에서만 사용되어야 하는 것은 아니다. 조인 조건이 되는 두 테이블의 컬럼을 매칭 시킬때도 CASE WHEN 구문을 사용할 수 있다. 당장 적절한 예가 생각나지 않아 예는 제공하지 못했다. 하지만 조건에 따른 처리가 필요한 경우 다양한 위치에서 CASE WHEN 구문을 사용할 수 있다고 정리하면 좋을 것 같다.

 

댓글