[SQL] CASE문

kimgwon·2024년 10월 15일

SQL

목록 보기
1/4
post-thumbnail

SQL에서 CASE문은 조건에 따라 다른 값을 반환하는 제어문이다. 프로그래밍 언어의 if-else 구문과 비슷한 역할을 한다.
CASE문은 SELECT, WHERE, ORDER BY절 등에서 사용할 수 있다.

기본 구조

CASE WHEN - ELSE- END로 구성되어있다.
ELSE는 선택이다. ELSE를 명시하지 않으면, 주어진 조건에 모두 맞지 않은 경우 NULL이 반환된다.
END는 필수이다. CASE문을 닫는 역할을 한다.

CASE문

특정 컬럼의 값에 따라 다른 값을 반환하는 방식이다.

SELECT 컬럼명,
       CASE 컬럼명
           WHEN1 THEN 반환값1
           WHEN2 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;

조건 CASE문

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;

WHERE절에서 CASE문 사용

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;

ORDER BY에서 CASE문 사용

department가 'HR'이면 salary로 정렬하고, 그렇지 않으면 department로 정렬한다.

SELECT name, department, salary
FROM employees
ORDER BY 
    CASE 
        WHEN department = 'HR' THEN salary
        ELSE department
    END;

0개의 댓글