티스토리 뷰

안녕하세요. MySQL에서는 CASE 문을 이용해 데이터를 변환할 수 있습니다. 그래서 오늘은 기본적인 CASE 문의 대한 개념과 기본적인 예를 들어 CASE문의 사용법에 대해서 포스팅 하도록 하겠습니다.


RDBMS에 준비된 함수나 사용자 정의 함수를 사용해 데이터를 특정 형태로 변환할 수도 있지만, 임의의 조건에 따라 간단한 변환 처리의 경우에는 CASE 문으로 처리할 수 있습니다.


우선, CASE 문의 사용법은 아래와 같습니다.

CASE WHEN 조건식1 THEN 식1

[ WHEN 조건식2 THEN 식2... ]

[ ELSE 식3 ]

END



// 여기서 []안에 있는 부분은 생략 가능합니다.


기본적으로 CASE문으로 시작해서  END절로 끝나며, WHEN 절에는 "참과 거짓"을 반환하는 조건식을 기술합니다. 해당 조건을 만족해 참이 되는 경우는 THEN 절에 기술한 식이 처리됩니다. 따라서 WHEN 조건을 위에서 차례대로 평가해 나가다가 먼저 조건을 만족한 WHEN 절과 대응하는 THEN 절의 처리 결과를 CASE 문의 결과 값으로 반환합니다. 그리고 아래쪽의 ELSE 문의 경우에는 위의 WHEN 조건이 모두 만족하지 못한 경우에 ELSE 절에 기술한 식이 결과 값으로 반환됩니다.


그럼 기본적인 예시를 들어서 확인해보겠습니다. 기본적으로 sample37이란 테이블에는 a라는 컬럼에 아래와 같은 데이터들이 있습니다.



그리고, 그 데이터들을 아래와 같이 CASE 문을 통해 분기해서 데이터를 변환할 수 있습니다.



즉, a라는 열을 기본적으로 출력하고, a 열 값이 NULL일때 WHEN a IS NULL은 참이 되므로 CASE 문은 THEN 절의 0을 결과 값으로 반환합니다. 그러나 a열 값이 NULL이 아닌 경우에는 기존의 a 열의 값을 반환합니다.


그럼 또 다른 예시를 들어 확인해보겠습니다. 똑같이 sample37의 테이블을 사용할 것이며, 데이터를 다르게 변환해서 화면에 출력해보도록 하겠습니다.



위의 쿼리문을 살펴보시면, a열의 데이터를 통해 a열의 데이터가 1이면 THEN 절의 남자를 출력할것이며, a열의 데이터가 2이면 THEN 절의 여자를 출력하고 위의 조건들이 모두 성립하지 않으면 미지정이라는 데이터를 결과 값으로 반환합니다.


※ CASE 문을 사용할 경우 주의 사항


위의 예제들을 통해 알아본 바와 같이 예제에서는 SELECT 구에서 CASE 문을 사용했습니다. 그러나 CASE 문은 어디에나 사용할 수 있고, WHERE 구에서 조건식의 일부로 사용될 수도 있고 ORDER BY 구에서도 사용할 수 있어서 적절히 활용하셔서 사용하시면 됩니다. 그리고 ELSE 문은 위의 조건들이 만족하지 않았을 때 실행되는 영역이므로 생략하지 않고 명시적으로 지정하는 편이 좋습니다.


이상으로 CASE문의 사용법에 대한 포스팅을 마치도록 하겠습니다. :0