MINUS SQL 연산자를 활용한 데이터 비교

1. 핵심 원리
MINUS 연산자는 두 개의 쿼리에서 반환된 결과 세트 간의 차집합을 구하는 데 사용됩니다. MINUS는 첫 번째 쿼리 결과에서 두 번째 쿼리 결과에 포함되지 않는 데이터를 반환합니다.

2. 실무에서 쓰이는 이유
MINUS 연산자는 두 데이터 세트 간의 차이점을 빠르게 파악하고자 할 때 유용합니다. 예를 들어, 두 개의 테이블에서 특정 기준에 따라 공통되지 않는 레코드를 추출할 때 사용됩니다.

3. 실무에서 구체적으로 사용되는 상황 예측

  • 두 개의 재고 관리 시스템에서 특정 상품의 재고 차이를 확인할 때.
  • 인사 관리 시스템에서 한 달 동안 새롭게 등록된 직원과 기존 직원 간의 차이를 파악할 때.
  • 두 개의 고객 목록에서 중복되지 않는 신규 고객을 확인할 때.

4. 자주 사용되는 윈도우 표시 및 설명

  • ROW_NUMBER(): 결과 집합 내에서 각 행에 대해 고유 번호를 생성합니다.
  SELECT ename, sal, job, deptno,
         ROW_NUMBER() OVER (ORDER BY sal DESC) as row_num
  FROM emp;
  • RANK(): 특정 열의 값에 따라 결과 집합 내에서 행에 순위를 매깁니다. 동일한 값이 있을 경우 같은 순위를 부여하며 다음 순위는 건너뜁니다.
  SELECT ename, sal, job, deptno,
         RANK() OVER (ORDER BY sal DESC) as rank_num
  FROM emp;
  • DENSE_RANK(): RANK와 유사하지만, 동일한 순위가 있을 경우에도 다음 순위를 건너뛰지 않습니다.
  SELECT ename, sal, job, deptno,
         DENSE_RANK() OVER (ORDER BY sal DESC) as dense_rank_num
  FROM emp;
  • NTILE(): 결과 집합을 지정된 수의 그룹으로 나눕니다.
  SELECT ename, sal, job, deptno,
         NTILE(4) OVER (ORDER BY sal DESC) as ntile_group
  FROM emp;

5. 연습 문제
부서 번호가 10번과 20번인 사원들을 선택하고, 20번 부서에 속하지 않는 10번 부서의 사원들을 MINUS 연산자를 사용하여 추출하세요.

6. 연습 문제 해답 및 테이블 표시

SELECT ename, sal, job, deptno
FROM emp
WHERE deptno IN (10, 20)
MINUS
SELECT ename, sal, job, deptno
FROM emp
WHERE deptno = 20;

결과 테이블:

ENAMESALJOBDEPTNO
CLARK2450MANAGER10
KING5000PRESIDENT10
MILLER1300CLERK10

7. 응용 문제
부서 번호가 10번과 20번인 사원 중 30번 부서에 속하지 않는 20번 부서의 사원들을 MINUS 연산자를 사용하여 추출하세요.

8. 응용 문제 해답 및 테이블 표시

SELECT ename, sal, job, deptno
FROM emp
WHERE deptno IN (10, 20)
MINUS
SELECT ename, sal, job, deptno
FROM emp
WHERE deptno = 30;

결과 테이블:

ENAMESALJOBDEPTNO
CLARK2450MANAGER10
KING5000PRESIDENT10
MILLER1300CLERK10

9. 전자상거래 업계에서 쓰일 수 있는 경우 예측

  • 판매 중단된 상품과 현재 판매 중인 상품을 비교하여 판매 중단된 상품의 목록을 추출할 때.
  • 특정 기간 동안 신규로 가입한 회원과 기존 회원 목록을 비교하여 신규 회원의 명단을 추출할 때.

10. 전자상거래 업계에서 사용할 수 있는 경우 예상 상황 문제 2가지 및 그 경우에 대한 SQL 코드 작성

  1. 최근 1개월간 신규 주문된 상품과 기존 인기 상품을 비교하여, 인기 상품 중 최근 주문되지 않은 상품 목록을 추출하세요.
   SELECT product_name
   FROM popular_products
   MINUS
   SELECT product_name
   FROM recent_orders
   WHERE order_date >= ADD_MONTHS(SYSDATE, -1);
  1. 신규 회원과 기존 회원을 비교하여 기존 회원 중 최근 로그인하지 않은 회원 목록을 추출하세요.
   SELECT member_id, member_name
   FROM members
   WHERE last_login_date < ADD_MONTHS(SYSDATE, -6)
   MINUS
   SELECT member_id, member_name
   FROM recent_members;

11. 10번에 대한 SQL 코드를 시각적으로 이해하기 쉽도록 테이블 예시 작성

  1. 인기 상품과 최근 주문된 상품 비교 테이블 예시: Product Name Order Date Product A 2023-07-15 Product B 2023-08-01 Product C 2023-07-20 Product D NULL
  2. 회원 로그인 내역과 비교한 결과 테이블 예시:
    Member ID Member Name Last Login Date
    101 Alice 2023-01-10
    102 Bob 2023-02-05
    103 Charlie 2023-08-10
    104 David NULL
Posts created 411

Related Posts

Begin typing your search term above and press enter to search. Press ESC to cancel.

Back To Top