💡CASE END
CASE는 대부분의 절에서 사용할 수 있으며, 조건문 역할을 한다.
제어문은 시작하는 괄호가 있으면 끝내는 괄호가 필요한데, SQL은 특성상 괄호를 잘 나타내지 않는다.
CASE 키워드는 시작 괄호로 사용하고 END 키워드는 끝내는 괄호로 사용한다.
WHEN THEN
SELECT
LAST || FIRST AS NAME,
CASE
--WHEN 조건 THEN 값
WHEN GENDER = 'm' THEN '남자'
WHEN GENDER = 'f' THEN '여자'
END AS GENDER
FROM TBLCOMEDIAN;
CASE END 안의 조건은 'WHEN 조건 THEN 값' 형태로 작성한다.
SELECT
NAME, CONTINENT,
CASE
WHEN CONTINENT = 'AS' THEN '아시아'
WHEN CONTINENT = 'EU' THEN '유럽'
WHEN CONTINENT = 'AF' THEN '아프리카'
END AS continentName
FROM TBLCOUNTRY;
CASE END는 조건을 만족하지 못하면 null을 반환한다는 특징이 있다.
이러한 특징을 이용해서 여러 가지 일을 할 수 있다.
위 코드에서는 아시아에 속한 나라는 4개밖에 없어서 조건에 만족하지 않으니 null을 돌려준다.
ELSE
SELECT
NAME, CONTINENT,
CASE
WHEN CONTINENT = 'AS' THEN '아시아'
WHEN CONTINENT = 'EU' THEN '유럽'
WHEN CONTINENT = 'AF' THEN '아프리카'
--ELSE '기타'
ELSE CONTINENT
END AS continentName
FROM TBLCOUNTRY;
ELSE로 상수를 반환할 수도 있고, 가공하지 않은 값을 돌려줄 수도 있다.
물론 값을 돌려줄 때, 자료형 타입을 같게 해야 한다.
CASE END의 활용
SELECT
LAST || FIRST AS name,
WEIGHT,
CASE
WHEN WEIGHT > 90 THEN '과체중'
WHEN WEIGHT > 50 THEN '정상체중'
ELSE '저체중'
END AS state
FROM TBLCOMEDIAN;
SELECT
name, jikwi,
CASE
WHEN JIKWI = '과장' OR JIKWI = '부장' THEN '관리직'
ELSE '생산직'
END,
CASE
WHEN JIKWI IN ('과장', '부장') THEN '관리직'
ELSE '생산직'
END
FROM TBLINSA;
SELECT
NAME, SUDANG,
CASE
WHEN NAME LIKE '홍%' THEN 50000
ELSE 0
END + SUDANG AS PLUSSUDANG
FROM TBLINSA;
SELECT
TITLE,
CASE
WHEN COMPLETEDATE IS NULL THEN '미완료'
WHEN COMPLETEDATE IS NOT NULL THEN '완료'
END AS state
FROM TBLTODO;