SQL 서브 쿼리 사용법 (NOT IN)

1. 핵심 원리
NOT IN 서브 쿼리는 메인 쿼리에서 특정 조건에 해당하지 않는 데이터를 필터링하기 위해 사용됩니다. 즉, 특정 조건을 만족하지 않는 데이터를 검색하여 그 결과를 반환합니다. 이 예제에서는 관리자가 아닌 사원들의 이름과 월급, 직업을 출력하기 위해 사용됩니다.

2. 실무에서 쓰이는 이유
NOT IN 연산자는 특정 집합에 포함되지 않는 데이터를 검색하는 데 유용하며, 특히 서브 쿼리를 사용하여 복잡한 조건을 처리할 때 자주 사용됩니다. 이 방법은 특히 데이터베이스 내에서 누락된 데이터를 식별하거나 제외해야 할 데이터를 필터링할 때 유용합니다.

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

  • 사원 관리 시스템에서 특정 관리자에게 할당되지 않은 사원 목록을 출력할 때.
  • 특정 제품군에 속하지 않는 제품을 필터링하여 분석할 때.
  • 프로젝트에서 제외된 팀원들을 식별하기 위해 사용될 수 있습니다.

4. 자주 사용되는 윈도우 표시 및 설명
이번 NOT IN 서브 쿼리와 관련하여 자주 사용되는 SQL 함수는 다음과 같습니다:

  1. RANK()
  • RANK() 함수는 결과 집합 내에서 순위를 매길 때 사용됩니다. 동일한 값에는 동일한 순위를 부여합니다.
  • SQL 코드 예시:
    sql SELECT ename, sal, RANK() OVER (ORDER BY sal DESC) AS rank FROM emp;
  1. ROW_NUMBER()
  • ROW_NUMBER() 함수는 결과 집합에 고유한 순번을 부여합니다.
  • SQL 코드 예시:
    sql SELECT ename, sal, ROW_NUMBER() OVER (ORDER BY sal DESC) AS row_num FROM emp;
  1. DENSE_RANK()
  • DENSE_RANK() 함수는 동일한 값에는 동일한 순위를 부여하지만, 순위에서 간격이 발생하지 않습니다.
  • SQL 코드 예시:
    sql SELECT ename, sal, DENSE_RANK() OVER (ORDER BY sal DESC) AS dense_rank FROM emp;

5. 연습 문제
관리자가 아닌 사원들의 이름, 월급, 직업을 출력하는 쿼리를 작성하시오.

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

SELECT ename, sal, job
FROM emp
WHERE empno NOT IN (SELECT mgr
                    FROM emp
                    WHERE mgr IS NOT NULL);

결과 테이블:

ENAMESALJOB
ADAMS1100CLERK
WARD1250SALESMAN
ALLEN1600SALESMAN
JAMES950CLERK
SMITH800CLERK
MILLER1300CLERK
MARTIN1250SALESMAN
TURNER1500SALESMAN

7. 응용 문제
관리자가 아닌 사원 중에서 월급이 1200 이상인 사원들의 이름, 월급, 직업을 출력하는 쿼리를 작성하시오.

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

SELECT ename, sal, job
FROM emp
WHERE empno NOT IN (SELECT mgr
                    FROM emp
                    WHERE mgr IS NOT NULL)
  AND sal >= 1200;

결과 테이블:

ENAMESALJOB
WARD1250SALESMAN
ALLEN1600SALESMAN
MILLER1300CLERK
MARTIN1250SALESMAN
TURNER1500SALESMAN

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

  • 특정 관리자에게 할당되지 않은 상품이나 주문을 검색할 때.
  • 특정 카테고리에 속하지 않은 제품 목록을 필터링할 때.

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

  1. 특정 관리자에게 할당되지 않은 주문 목록을 검색하시오.
   SELECT order_id, order_date
   FROM orders
   WHERE manager_id NOT IN (SELECT manager_id
                            FROM managers
                            WHERE manager_id IS NOT NULL);
  1. 특정 카테고리에 속하지 않은 제품을 검색하시오.
   SELECT product_id, product_name
   FROM products
   WHERE category_id NOT IN (SELECT category_id
                             FROM categories
                             WHERE category_id IS NOT NULL);

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

  1. 주문 테이블 예시: ORDER_ID ORDER_DATE MANAGER_ID 1001 2023-01-15 NULL 1002 2023-01-16 102 1003 2023-01-17 103 SQL 결과 예시:
   SELECT order_id, order_date
   FROM orders
   WHERE manager_id NOT IN (SELECT manager_id
                            FROM managers
                            WHERE manager_id IS NOT NULL);
  • 결과: 1001 | 2023-01-15 | NULL
  1. 제품 테이블 예시: PRODUCT_ID PRODUCT_NAME CATEGORY_ID 2001 Laptop NULL 2002 Phone 201 2003 Tablet 202 SQL 결과 예시:
   SELECT product_id, product_name
   FROM products
   WHERE category_id NOT IN (SELECT category_id
                             FROM categories
                             WHERE category_id IS NOT NULL);
  • 결과: 2001 | Laptop | NULL

요약: 이 예제에서는 NOT IN 연산자를 사용하여 데이터베이스에서 특정 조건을 만족하지 않는 데이터를 효과적으로 필터링할 수 있음을 보여줍니다.

Posts created 411

Related Posts

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

Back To Top