SQL에서 CASE문은 조건에 따라 다른 값을 반환하는 제어문이다. 프로그래밍 언어의 if-else 구문과 비슷한 역할을 한다.
CASE문은 SELECT, WHERE, ORDER BY절 등에서 사용할 수 있다.
CASE WHEN - ELSE- END로 구성되어있다.
ELSE는 선택이다. ELSE를 명시하지 않으면, 주어진 조건에 모두 맞지 않은 경우 NULL이 반환된다.
END는 필수이다. CASE문을 닫는 역할을 한다.
특정 컬럼의 값에 따라 다른 값을 반환하는 방식이다.
SELECT 컬럼명,
CASE 컬럼명
WHEN 값1 THEN 반환값1
WHEN 값2 THEN 반환값2
ELSE 반환값3 -- 위 조건에 맞지 않으면 반환
END AS 새_컬럼명
FROM 테이블명;
<예시>
department 칼럼의 값이 'HR'이면 'Human Resources', 'IT'면 'Information Technology'로 출력하고, 그 외의 값은 'Other Department'로 출력한다.
SELECT name,
CASE department
WHEN 'HR' THEN 'Human Resources'
WHEN 'IT' THEN 'Information Technology'
ELSE 'Other Department'
END AS department_name
FROM employees;
SELECT 컬럼명,
CASE
WHEN 조건1 THEN 반환값1
WHEN 조건2 THEN 반환값2
ELSE 반환값3 -- 모든 조건에 맞지 않을 때 반환
END AS 새_컬럼명
FROM 테이블명;
<예시>
salary 값에 따라 급여 등급을 나눈다.
salary > 10000인 경우 'High Salary';
salary가 5000에서 10000 사이일 때는 'Medium Salary';
그 외에는 'Low Salary'로 출력된다.
SELECT employee_id, salary,
CASE
WHEN salary > 10000 THEN 'High Salary'
WHEN salary BETWEEN 5000 AND 10000 THEN 'Medium Salary'
ELSE 'Low Salary'
END AS salary_grade
FROM employees;
department가 'HR'이면 salary>5000,
'IT'면 salary > 10000,
그 외에는 salary > 3000인 경우만 출력된다.
SELECT *
FROM employees
WHERE
CASE
WHEN department = 'HR' THEN salary > 5000
WHEN department = 'IT' THEN salary > 10000
ELSE salary > 3000
END;
department가 'HR'이면 salary로 정렬하고, 그렇지 않으면 department로 정렬한다.
SELECT name, department, salary
FROM employees
ORDER BY
CASE
WHEN department = 'HR' THEN salary
ELSE department
END;