MySQL을 사용하다 보면 Query(쿼리) 구문에서 Switch(스위치) 문 혹은 IF문과 같이 조건문을 사용하여 결과값을 내야 하는 경우가 있다.
물론 이런 거 없이 Query 하여 나온 결과를 가져와 Code(코드)상에서 처리할 수 도 있으나 그것보다는 Query로 나온 결과값을 바로 사용하는 편이 훨씬 간결하고 가독성도 좋다.(물론 이해하기에도 더 쉽다)
MySQL에서는 CASE라는 Function(함수)을 제공하고 있으며, 해당 Function은 "MySQL 4.0 이상"부터 사용이 가능하다.
CASE 문은 조건을 통과하고 첫 번째 조건이 충족되면 값을 반환한다.
조건에 따라 True(참)이면 읽기를 중지하고 결과를 반환하고, 조건이 True(참)가 아니면 ELSE 절의 값을 반환한다.
ELSE 부분이 없고 조건이 참이 아니면 NULL을 반환합니다.
그럼 아래 예제를 통해서 사용하는 방법을 알아보도록 하자.
1. CASE문 사용 방법
- WHEN - THEN은 항상 같이 사용 되어야 한다.
- WHEN - THEN은 여러개 사용이 가능하다.
- ELSE가 존재하면 모든 WHEN - THEN 조건이 TRUE(참)이 아닌 경우 ELSE의 결과값을 반환한다.
- ELSE가 없고, 조건이 TRUE(참)이 아니면 NULL을 반환한다.
# CASE문 사용 방법
CASE
WHEN 조건1 THEN 결과값1
WHEN 조건2 THEN 결과값2
WHEN 조건N THEN 결과값N
ELSE 결과값
END
2. 예제(Example)
그럼 예제(Example)을 통해서 실행해보도록 하자.
먼저 테스트 테이블을 생성(Test Create table) 및 테스트 데이터를 넣어(Test Data Insert) 보자.
# CREATE 문
CREATE TABLE `test` (
`id` int(1) unsigned NOT NULL,
`number` int(1) unsigned NOT NULL,
`kind` varchar(200) NOT NULL,
PRIMARY KEY (`id`)
) DEFAULT CHARSET=utf8;
# INSERT 문
INSERT INTO `test` (`id`, `number`, `kind`) VALUES
('1', '1', 'Apple'),
('2', '1', 'Pear'),
('3', '2', 'carrot'),
('4', '3', 'cat'),
('5', '3', 'dog'),
('6', '4', 'human');
테이블을 준비 했으면 Query를 작성해보도록 하자.
# CASE Query
SELECT
id AS id,
(
CASE
WHEN number = 1 THEN 'fruit'
WHEN number = 2 THEN 'vegetable'
WHEN number = 3 THEN 'animal'
ELSE 'not'
END
) AS type,
kind AS type_desc
FROM
test;
[OUTPUT]
---------------------------------
id type type_desc
---------------------------------
1 fruit Apple
2 fruit Pear
3 vegetable carrot
4 animal cat
5 animal dog
6 not human
이처럼 CASE문을 통해서 Query상에서 원하는 결과값으로 변경하여 사용할 수 있다.
그리고 SQL Fiddle 라는 사이트를 통해서 간단한 테이블 생성, Query 등을 할 수 있고, 진행했던 내용에 대해서도 Link(링크)를 남길 수 있다.
위 Query의 대한 테스트 내용도 아래와 같이 남겨 놓았다. 같이 참고하면 더 쉽게 이해할 수 있을 것이다.