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인 경우에만 해당 주문 정보를 가져옵니다.
'oracle' 카테고리의 다른 글
오라클 Group by having 절 사용하기 (0) | 2023.03.07 |
---|---|
오라클 랜덤 번호 생성하기 DBMS_RANDOM (0) | 2023.03.04 |
Oracle ROWID 사용하기 (0) | 2023.02.17 |
ORACLE 정렬함수의 종류와 활용 예시 (0) | 2023.01.26 |
오라클 날짜 함수의 종류와 활용 예시 (0) | 2023.01.18 |