본문 바로가기

DB/Oracle

1 = ( case when) 구문을 where에서 사용하는 경우

반응형
SMALL

WHERE 절에서 CASE WHEN 사용하는 이유

WHERE 절에서 1 = (CASE WHEN) 구문을 사용하는 주된 이유는 복잡한 조건을 한 번에 표현하기 위해서입니다. 특히, 여러 개의 AND/OR 조건을 사용해야 하는 경우, CASE WHEN을 활용하면 코드를 더욱 간결하게 만들고 가독성을 높일 수 있습니다.

예시 쿼리

1. 부서 번호가 10, 20 또는 30이고 급여가 3000 이상인 사원 조회

SQL
SELECT *
FROM emp
WHERE 1 = (
    CASE WHEN deptno IN (10, 20, 30) AND sal >= 3000 THEN 1
    ELSE 0
    END
);
Use code with caution.
 
  • 설명: deptno가 10, 20, 30 중 하나이고 sal이 3000 이상인 경우에만 1을 반환하므로, 해당 조건을 만족하는 사원만 조회됩니다.

2. 입사일이 1981년 이후이고, 직급이 'SALESMAN' 또는 'MANAGER'인 사원 조회

SQL
SELECT *
FROM emp
WHERE 1 = (
    CASE WHEN hiredate >= '1981-01-01' AND job IN ('SALESMAN', 'MANAGER') THEN 1
    ELSE 0
    END
);
Use code with caution.
 
  • 설명: hiredate가 1981년 이후이고 job이 'SALESMAN' 또는 'MANAGER'인 경우에만 1을 반환합니다.

3. 급여가 평균 급여의 1.5배 이상이거나, 커미션이 NULL인 사원 조회

SQL
SELECT *
FROM emp
WHERE 1 = (
    CASE WHEN sal >= (SELECT AVG(sal) FROM emp) * 1.5 OR comm IS NULL THEN 1
    ELSE 0
    END
);
Use code with caution.
 
  • 설명: 서브쿼리를 이용하여 평균 급여를 구하고, 개별 사원의 급여와 비교하거나 커미션이 NULL인 경우를 판단합니다.

CASE WHEN을 WHERE 절에서 사용하는 이점

  • 복잡한 조건 간결하게 표현: 여러 개의 AND/OR 조건을 하나의 CASE WHEN으로 표현할 수 있습니다.
  • 가독성 향상: 복잡한 조건을 논리적으로 분리하여 코드를 더 쉽게 이해할 수 있습니다.
  • 유지보수 용이: 조건 변경 시 CASE WHEN 부분만 수정하면 되므로 유지보수가 편리합니다.
반응형
LIST