oracle

오라클 case문 where 절에 활용하기

구름Grum 2023. 2. 24. 15:47


Oracle에서 CASE 문을 사용하는 방법은 다음과 같습니다.

예를 들어, "employees" 테이블에서 "salary" 컬럼이 5000 이상인 직원의 정보를 가져오되, "commission_pct" 컬럼 값이 NULL이면 "No Commission" 이라는 문자열을 출력하고, 그렇지 않으면 해당 컬럼 값을 출력하는 쿼리를 작성해보겠습니다.


SELECT employee_id, first_name, last_name,
CASE
WHEN commission_pct IS NULL THEN 'No Commission'
ELSE commission_pct
END AS commission
FROM employees
WHERE salary >= 5000;



위의 쿼리에서 "CASE" 문은 "commission_pct" 컬럼 값이 NULL인 경우 "No Commission"문자열을 출력하고, 그렇지 않으면 해당 컬럼 값을 출력합니다. "WHERE" 절은 "salary" 컬럼 값이 5000 이상인 직원의 정보만을 가져옵니다. "AS" 키워드를 사용하여 "commission"이라는 새로운 컬럼 이름을 정의할 수 있습니다.

Oracle에서 WHERE 절에 CASE 문을 사용하는 방법은 다음과 같습니다.

예를 들어, "orders" 테이블에서 "order_date" 컬럼 값이 오늘보다 이전인 주문 정보를 가져오되, "status" 컬럼 값이 'CANCEL'인 경우는 제외하고, 그 외에는 모두 가져오는 쿼리를 작성해보겠습니다."


SELECT *
FROM orders
WHERE order_date < SYSDATE
AND CASE
WHEN status = 'CANCEL' THEN 0
ELSE 1
END = 1;



위의 쿼리에서 "CASE" 문은 "status" 컬럼 값이 'CANCEL'인 경우 0을 반환하고, 그 외의 경우 1을 반환합니다. "WHERE" 절에서 "order_date" 컬럼 값이 오늘보다 이전인 주문 정보를 가져옵니다. "CASE" 문에서 반환된 값이 1인 경우에만 해당 주문 정보를 가져옵니다.

또한, 위의 쿼리를 간단하게 작성할 수도 있습니다.


SELECT *
FROM orders
WHERE order_date < SYSDATE
AND (status != 'CANCEL' OR status IS NULL);



위의 쿼리는 "WHERE" 절에서 "order_date" 컬럼 값이 오늘보다 이전인 주문 정보를 가져오되, "status" 컬럼 값이 'CANCEL'이 아니거나 NULL인 경우에만 해당 주문 정보를 가져옵니다.