핵심 원리:
CASE 문은 SQL에서 조건에 따라 다른 값을 반환하는 기능을 제공합니다. IF 문과 유사한 역할을 하며, 여러 조건을 평가하여 가장 먼저 일치하는 조건의 결과를 반환합니다. 이때, ELSE 절을 사용하여 어느 조건에도 일치하지 않을 경우의 기본 값을 지정할 수 있습니다.
실무에서 쓰이는 이유:
CASE 문은 다양한 조건에 따라 데이터를 필터링하거나 특정 값을 도출할 때 사용됩니다. 복잡한 조건을 가진 쿼리에서 가독성을 높이고, 데이터를 조건에 따라 동적으로 변환할 수 있어 실무에서 유용합니다.
실무에서 구체적으로 어떤 상황일 경우 사용 되는지 예상 상황 예측:
- 보너스 계산: 직원의 월급에 따라 보너스를 다르게 지급하는 경우.
- 등급 분류: 특정 점수에 따라 학생들의 성적을 등급으로 분류하는 경우.
- 할인 적용: 구매 금액에 따라 할인율을 다르게 적용하는 경우.
- 상태 변환: 데이터베이스에서 상태 코드에 따라 사용자 친화적인 상태 설명을 반환하는 경우.
연습 문제:
1. SELECT ename, job, sal,
CASE WHEN sal >= 3000 THEN 500
WHEN sal >= 2000 THEN 300
WHEN sal >= 1000 THEN 200
ELSE 0 END AS bonus
FROM emp
WHERE job IN ('SALESMAN', 'ANALYST');
연습문제 해답:
해당 쿼리는 직원의 월급(sal)에 따라 보너스 금액을 계산하여 bonus
열에 출력합니다. sal
이 3000 이상이면 500, 2000 이상이면 300, 1000 이상이면 200을, 그 외에는 0을 출력합니다. 이 쿼리는 SALESMAN
과 ANALYST
직책을 가진 직원들에 대해서만 동작합니다.
응용 문제:
1. SELECT ename, job, comm,
CASE WHEN comm IS NULL THEN 500
ELSE 0 END AS bonus
FROM emp
WHERE job IN ('SALESMAN', 'ANALYST');
응용문제 해답:
이 쿼리는 커미션(comm)이 없는 직원들에게 500의 보너스를 지급하고, 커미션이 있는 직원에게는 0의 보너스를 지급하는 방식으로 동작합니다. SALESMAN
과 ANALYST
직책을 가진 직원들에 대해 실행됩니다.
실무 유형 문제:
1. SELECT ename, job,
CASE WHEN job IN ('SALESMAN', 'ANALYST') THEN 500
WHEN job IN ('CLERK', 'MANAGER') THEN 400
ELSE 0 END AS bonus
FROM emp;
실무 유형 문제 해답:
이 쿼리는 직원의 직업(job)에 따라 보너스를 계산합니다. SALESMAN
과 ANALYST
는 500, CLERK
와 MANAGER
는 400, 그 외의 직업은 0을 보너스로 지급합니다.