2가지 이상의 여러 가지 경우일 때 처리가 가능하므로
다중 분기라고 부른다.
CASE
WHEN 조건1 THEN
SQL문장들1
WHEN 조건2 THEN
SQL문장들2
WHEN 조건3 THEN
SQL문장들3
ELSE
SQL문장들4
END CASE;
DROP PROCEDURE IF EXISTS caseProc;
DELIMITER $$
CREATE PROCEDURE caseProc()
BEGIN
DECLARE point INT;
DECLARE credit CHAR(1);
SET point = 88;
CASE
WHEN point >= 90 THEN
SET credit = 'A';
WHEN point >= 80 THEN
SET credit = 'B';
WHEN point >= 70 THEN
SET credit = 'C';
WHEN point >= 60 THEN
SET credit = 'D';
ELSE
SET credit = 'F';
END CASE;
SELECT CONCAT('취득점수 ==> ', point), CONCAT('학점 ==> ', credit);
END $$
DELIMITER ;
CALL caseProc();

인터넷 마켓 데이터베이스의 회원들의 총 구매액을 계산해서 회원의 등급을 다음과 같이 4단계로 나누려고 한다.
| 총 구매액 | 회원 등급 |
|---|---|
| 1500 이상 | 최우수고객 |
| 1000 ~ 1499 | 우수고객 |
| 1 ~ 999 | 일반고객 |
| 0 이하 | 유령고객 |
구매 테이블(buy)에서 회원별로 총구매액 구하고, 총 구매액이 많은 순서로 정렬
SELECT mem_id, SUM(price*amount) "총구매액"
FROM buy
GROUP BY mem_id
ORDER BY SUM(price*amount) DESC;

회원 이름 출력
SELECT M.mem_id, M.mem_name, SUM(price*amount) "총구매액"
FROM buy B
RIGHT OUTER JOIN member M
ON B.mem_id = M.mem_id
GROUP BY M.mem_id
ORDER BY SUM(price*amount) DESC;

총 구매액에 따라 회원 등급 구분
CASE
WHEN (총구매액 >= 1500) THEN '최우수고객'
WHEN (총구매액 >= 1000) THEN '우수고객'
WHEN (총구매액 >= 1) THEN '일반고객'
ELSE '유령고객'
END
전체 코드
SELECT M.mem_id, M.mem_name, SUM(price*amount) "총구매액",
CASE
WHEN (SUM(price*amount) >= 1500) THEN '최우수고객'
WHEN (SUM(price*amount) >= 1000) THEN '우수고객'
WHEN (SUM(price*amount) >= 1) THEN '일반고객'
ELSE '유령고객'
END "회원등급"
FROM buy B
RIGHT OUTER JOIN member M
ON B.mem_id = M.mem_id
GROUP BY M.mem_id
ORDER BY SUM(price*amount) DESC;
