본문 바로가기
Database

오라클 BETWEEN과 IN 연산자의 이해와 활용

by 굿센스굿 2024. 12. 3.
반응형


데이터베이스에서 데이터를 효율적으로 필터링하는 것은 성능 최적화와 관련해 매우 중요한 요소입니다. BETWEEN IN 연산자는 데이터 검색 조건을 정의할 때 자주 사용되며, 각각 고유의 장점과 특성이 있습니다. 이번 블로그에서는 두 연산자의 특징, 사용 예시, 그리고 성능 최적화 팁을 심도 있게 다룹니다.


1. BETWEEN 연산자란?

BETWEEN 연산자는 특정 범위 내의 값을 검색할 때 사용됩니다. 시작값 끝값을 포함하는 범위를 지정하며, 숫자, 날짜, 문자 등 다양한 데이터 유형에 활용할 수 있습니다.

구문:

SELECT 컬럼명
FROM 테이블명
WHERE 컬럼명 BETWEEN 시작값 AND 끝값;

특징:

  • 시작값과 끝값 모두 검색 범위에 포함됩니다.
  • 범위를 정의하기 때문에 대량 데이터 검색 시 가독성과 효율성이 높아집니다.

[예시 1] 숫자 범위 검색

SELECT employee_id, salary
FROM employees
WHERE salary BETWEEN 3000 AND 7000;

위 쿼리는 직원 급여가 3000 이상 7000 이하인 데이터를 검색합니다.

[예시 2] 날짜 범위 검색

SELECT order_id, order_date
FROM orders
WHERE order_date BETWEEN TO_DATE('2024-01-01', 'YYYY-MM-DD') AND TO_DATE('2024-12-31', 'YYYY-MM-DD');

2024년 동안 발생한 주문 내역을 가져오는 쿼리입니다.

[예시 3] 문자 범위 검색

SELECT product_name
FROM products
WHERE product_name BETWEEN 'A' AND 'M';

제품명이 알파벳 A부터 M까지인 항목을 검색합니다.


2. IN 연산자란?

IN 연산자는 지정한 값 집합 중 하나와 일치하는 데이터를 검색합니다. 고정된 값 목록을 조건으로 사용할 때 유용하며, 조건 목록이 많아질수록 가독성이 높아집니다.

구문:

SELECT 컬럼명
FROM 테이블명
WHERE 컬럼명 IN (값1, 값2, 값3, ...);

특징:

  • 지정된 값 중 하나와 일치하면 조건을 만족합니다.
  • SQL 코드의 간결성과 가독성을 높이는 데 유리합니다.

[예시 1] 특정 값 검색

SELECT department_id, department_name
FROM departments
WHERE department_id IN (10, 20, 30);

부서 ID가 10, 20, 30인 데이터를 검색합니다.

[예시 2] 문자열 검색

SELECT customer_name, customer_status
FROM customers
WHERE customer_status IN ('Active', 'Pending', 'Inactive');

고객 상태가 'Active', 'Pending', 'Inactive'인 고객 목록을 검색합니다.

[예시 3] 서브쿼리와 IN 활용

SELECT employee_id, employee_name
FROM employees
WHERE department_id IN (
    SELECT department_id
    FROM departments
    WHERE location_id = 1700
);

부서 위치가 1700인 부서에 소속된 직원을 검색합니다.


3. BETWEEN과 IN: 어떤 연산자를 선택해야 할까?

두 연산자는 데이터 필터링에 강력하지만, 상황에 따라 적합도가 다릅니다.

비교 기준 BETWEEN IN

용도 범위 지정 고정된 값 집합
가독성 범위 조건이 명확할 때 유리 값 목록이 많을 때 가독성이 높음
범위 포함 여부 시작값과 끝값 포함 개별적으로 지정한 값만 포함
성능 인덱스를 활용할 수 있어 성능이 우수함 IN의 값 목록이 커질수록 성능 저하 가능성 있음

[예시 비교]

1) 급여가 3000, 4000, 5000인 직원 검색

  • IN 사용:
    SELECT employee_id, salary
    FROM employees
    WHERE salary IN (3000, 4000, 5000);
    
  • BETWEEN 사용 (잘못된 사용):
    SELECT employee_id, salary
    FROM employees
    WHERE salary BETWEEN 3000 AND 5000;
    
    BETWEEN을 사용하면 3000~5000 사이의 모든 값이 포함되므로 의도한 결과와 다를 수 있습니다.

4. 성능 최적화 팁

  1. BETWEEN과 인덱스
    BETWEEN은 시작값과 끝값 모두 범위에 포함하기 때문에 인덱스를 활용한 검색 성능이 높습니다. 특히, 범위 조건이 자주 사용되는 경우 해당 컬럼에 적절한 인덱스를 설정하세요.
  2. IN과 값 목록 최적화
    IN에 많은 값을 나열하면 옵티마이저의 처리 비용이 증가할 수 있습니다. 값의 개수가 많다면 임시 테이블을 활용하거나 JOIN으로 대체하는 것이 더 효율적입니다.
  3. 데이터 형식 일치
    BETWEEN이나 IN 조건의 값이 컬럼 데이터 유형과 일치하지 않으면 암묵적 변환이 발생해 성능이 저하될 수 있습니다. 예를 들어, 숫자 컬럼에 문자열 값을 비교하지 않도록 주의하세요.

5. 결론

BETWEEN과 IN 연산자는 각각 고유한 장점과 사용 사례를 가지고 있습니다. 범위 검색에는 BETWEEN, 고정된 값 집합 비교에는 IN을 사용하는 것이 일반적입니다. 이 두 연산자를 적재적소에 활용하면 쿼리의 가독성과 성능을 동시에 확보할 수 있습니다. 위에서 설명한 예시와 팁을 기반으로 실무에서 데이터 필터링을 최적화해보세요.

반응형