데이터베이스/ORACLE

SQL 초보자를 위한 WHERE CASE WHEN 사용법: Oracle vs 다른 DB

CodeCaine Explorer 2024. 12. 20. 11:54
728x90
반응형
SMALL

🌟 Oracle에서 WHERE CASE WHEN 사용법

WHERE 절에서 CASE WHEN조건에 따라 WHERE 필터링을 동적으로 적용할 때 사용됩니다. 다만, CASE는 SQL의 조건문처럼 보이지만 실제로는 값을 반환하는 표현식입니다. 즉, WHERE 절에서 특정 조건의 결과를 비교하거나 조건식 안에 CASE를 삽입하는 방식으로 동작합니다.


📋 CASE 구문의 기본 구조

CASE 
    WHEN 조건1 THEN 반환값1
    WHEN 조건2 THEN 반환값2
    ELSE 기본값
END

WHERE 절에서 사용되는 형식

SELECT *
FROM 테이블명
WHERE 컬럼명 = CASE 
    WHEN 조건1 THEN 값1
    WHEN 조건2 THEN 값2
    ELSE 기본값
END;

🌟 실전 예제: Oracle에서의 사용법

1️⃣ 간단한 WHERE 절 필터링

다음은 직원 데이터를 필터링하는 예제입니다.

SELECT *
FROM employees
WHERE department_id = CASE 
    WHEN job_id = 'IT_PROG' THEN 60
    WHEN job_id = 'ST_CLERK' THEN 50
    ELSE 0
END;
  • job_idIT_PROG라면 department_id = 60을 필터링.
  • job_idST_CLERK라면 department_id = 50을 필터링.
  • 그 외의 경우 0이 반환되어 필터링되지 않음.

2️⃣ 복잡한 조건: ANDOR 활용

CASE는 여러 조건을 조합할 때 유용합니다.

SELECT *
FROM employees
WHERE 
    CASE 
        WHEN department_id = 60 THEN salary > 10000
        WHEN department_id = 50 THEN salary > 5000
        ELSE 0
    END = 1;
  • 부서 60은 급여가 10,000 이상인 직원만 반환.
  • 부서 50은 급여가 5,000 이상인 직원만 반환.

3️⃣ 다른 필터링 조건과 결합

IN과 함께 사용할 수도 있습니다.

SELECT *
FROM employees
WHERE employee_id IN (
    CASE 
        WHEN department_id = 60 THEN (101, 102, 103)
        WHEN department_id = 50 THEN (201, 202, 203)
        ELSE NULL
    END
);

🌟 다른 데이터베이스와의 차이점

📌 1. Oracle과 MySQL

  • Oracle: WHERE 절에서 CASE 사용 가능. 복잡한 필터링에도 적합.
  • MySQL: CASE는 값을 반환하는 표현식으로 사용되지만, 일부 복잡한 조건 필터링에서는 지원이 제한적.MySQL은 CASE 구문 대신 IF() 함수를 사용하는 경우도 많음.
    • 예:
    • SELECT * FROM employees WHERE IF(department_id = 60, salary > 10000, salary > 5000);

📌 2. Oracle과 PostgreSQL

  • Oracle: CASE 사용 시 유연하지만, 기본적으로 조건의 반환값을 필터링으로 처리.
  • PostgreSQL
    • SELECT SUM(salary) 
      FROM employees
      FILTER (WHERE department_id = 60);
  • : Oracle과 비슷한 방식으로 작동하며 CASE 활용이 자유로움. 하지만 FILTER 절과 조합해 더 세밀한 조건 처리가 가능.PostgreSQL은 FILTER 절로 조건을 구체화할 수 있음.

📌 3. Oracle과 SQL Server

  • Oracle: WHERE 절에서 CASE를 자유롭게 사용 가능.
  • SQL Server: CASE 를 사용해 복잡한 필터링 처리 가능. 하지만 성능 최적화가 더 중요하며, IF
    • 예:
    • SELECT * FROM employees WHERE IIF(department_id = 60, salary > 10000, salary > 5000);
  • 나 IIF() 구문과 함께 쓰이는 경우도 있음.

🌟 Oracle의 장점과 제한

✅ 장점

  1. CASE를 활용한 복잡한 조건 처리 가능.
  2. 값 반환 및 조건 필터링 모두 수행 가능.
  3. 다른 DB와 비교해 유연한 활용 가능.

❌ 제한

  1. 복잡한 논리를 처리할 때 성능 저하 가능성.
  2. 특정 상황에서 CASE 대신 OR, AND를 사용하는 것이 가독성과 성능에 유리.

🌈 초보자에게 응원 한마디 😊

처음에는 CASE WHEN 구문이 어렵게 느껴질 수 있지만, 차근차근 조건을 나누다 보면 금방 익숙해질 거예요! SQL은 실습이 중요하니, 다양한 예제를 따라 해보세요. 한 걸음씩 배워가는 여러분을 응원합니다! 🎉

728x90
반응형
SMALL