본문 바로가기
Database

오라클 DB에서 AND, OR, NOT 논리 연산자 사용법

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


오라클 데이터베이스에서 AND, OR, NOT는 SQL 쿼리에서 조건을 결합하거나 반전시킬 때 사용하는 주요 논리 연산자입니다. 이 연산자는 데이터 필터링을 정교하게 수행하며, WHERE 절에서 주로 활용됩니다. 이번 블로그에서는 AND, OR, NOT 연산자의 기본 사용법과 함께 실무에서 자주 사용되는 예시를 들어 자세히 설명하겠습니다.


1. AND 연산자: 모든 조건이 참일 때 결과 반환

AND는 두 개 이상의 조건이 **모두 참(True)**일 경우에만 해당 데이터를 반환합니다. 조건 중 하나라도 거짓(False)이라면 결과는 반환되지 않습니다.

사용법

SELECT * 
FROM employees 
WHERE department_id = 10 
AND salary > 5000;

예시

  1. 부서와 급여 조건을 동시에 만족하는 직원 검색
    • 부서 ID가 30이고, 입사일이 2020년 1월 1일 이후인 직원만 조회합니다.
  2. SELECT * FROM employees WHERE department_id = 30 AND hire_date > TO_DATE('2020-01-01', 'YYYY-MM-DD');
  3. 재고 관리
    • 재고가 남아있고, 제품 상태가 활성화된 품목만 조회합니다.
  4. SELECT * FROM inventory WHERE stock > 0 AND product_status = 'ACTIVE';

2. OR 연산자: 조건 중 하나만 참이면 결과 반환

OR는 조건 중 **하나라도 참(True)**이면 해당 데이터를 반환합니다. 모든 조건이 거짓(False)일 때만 결과가 반환되지 않습니다.

사용법

SELECT * 
FROM employees 
WHERE job_id = 'IT_PROG' 
OR job_id = 'ST_CLERK';

예시

  1. 특정 직군 검색
    • 인사 담당자(HR_REP)나 재무 관리자(FIN_MGR) 직군에 해당하는 직원 조회.
  2. SELECT * FROM employees WHERE job_id = 'HR_REP' OR job_id = 'FIN_MGR';
  3. 고객 상태 조회
    • 신규 고객 또는 보류 중인 고객만 필터링합니다.
  4. SELECT * FROM customers WHERE customer_status = 'NEW' OR customer_status = 'PENDING';

3. NOT 연산자: 조건 반전

NOT는 지정된 조건의 참/거짓을 반전시킵니다. 참(True)인 조건을 거짓(False)으로, 거짓을 참으로 뒤집습니다.

사용법

SELECT * 
FROM employees 
WHERE NOT department_id = 10;

예시

  1. 특정 부서를 제외한 직원 검색
    • 부서 ID가 50이 아닌 직원만 조회합니다.
  2. SELECT * FROM employees WHERE NOT department_id = 50;
  3. 비활성화된 제품 필터링
    • 활성화 상태가 아닌 모든 제품을 조회합니다.
  4. SELECT * FROM products WHERE NOT product_status = 'ACTIVE';

4. 연산자 우선순위와 결합 사용

SQL 쿼리에서 여러 논리 연산자를 결합하면 연산자 우선순위가 적용됩니다. 기본 우선순위는 다음과 같습니다:

  1. NOT
  2. AND
  3. OR

우선순위를 명확히 하기 위해 괄호를 사용하는 것이 좋습니다.

예시

  1. 우선순위에 따른 쿼리 동작
    • AND가 OR보다 우선 적용됩니다. 따라서 department_id = 20 AND salary > 3000이 먼저 평가되고, 그 결과가 department_id = 10 조건과 결합됩니다.
  2. SELECT * FROM employees WHERE department_id = 10 OR department_id = 20 AND salary > 3000;
  3. 명시적 우선순위 지정
    • 괄호를 사용해 department_id 조건을 먼저 평가한 후, salary > 3000 조건을 결합합니다.
  4. SELECT * FROM employees WHERE (department_id = 10 OR department_id = 20) AND salary > 3000;

5. 실무에서의 활용 사례

사례 1: 데이터 정제

여러 조건을 조합하여 불필요한 데이터를 걸러냅니다.

SELECT * 
FROM orders 
WHERE NOT (status = 'CANCELLED' OR delivery_date IS NULL);
  • 취소된 주문이나 배송 날짜가 없는 주문을 제외합니다.

사례 2: 마케팅 캠페인 대상 고객 필터링

SELECT * 
FROM customers 
WHERE (age BETWEEN 20 AND 35) 
AND (membership_status = 'ACTIVE' OR purchase_count > 5);
  • 20~35세의 활성 회원이거나 구매 횟수가 5회 이상인 고객만 타겟팅합니다.

사례 3: 복잡한 재무 보고서

SELECT * 
FROM transactions 
WHERE transaction_date BETWEEN TO_DATE('2023-01-01', 'YYYY-MM-DD') AND TO_DATE('2023-12-31', 'YYYY-MM-DD') 
AND (NOT account_type = 'SAVINGS' OR transaction_amount > 10000);
  • 2023년 거래 중 저축 계좌가 아니거나 거래 금액이 10,000 이상인 항목만 검색합니다.

6. 마무리

오라클 DB에서 AND, OR, NOT 논리 연산자는 데이터 필터링의 기본 도구입니다. 단일 조건으로는 복잡한 데이터를 다루기 어렵기 때문에, 연산자를 조합하여 원하는 결과를 얻는 것이 중요합니다. 특히 연산자 우선순위를 이해하고 괄호를 적절히 사용하는 습관을 들이면 쿼리의 정확성을 크게 향상시킬 수 있습니다.

지금 바로 실습을 통해 이 연산자들의 활용법을 익혀보세요!

반응형