INTERSECT 연산자를 이용한 SQL 교집합 추출 방법


  1. 핵심 원리
  • INTERSECT 연산자는 두 개 이상의 SELECT 쿼리의 결과 집합에서 공통된 부분만을 추출하여 출력합니다. 이는 교집합의 개념과 동일하게, 각 쿼리의 결과에서 중복되는 데이터만을 반환합니다.
  1. 실무에서 쓰이는 이유
  • 실무에서는 여러 데이터 소스에서 공통된 항목을 찾고자 할 때 INTERSECT를 사용합니다. 예를 들어, 두 개의 고객 데이터베이스에서 동일한 고객을 추출하거나, 여러 프로젝트에서 공통적으로 참여한 팀원을 확인하는 경우에 유용합니다.
  1. 실무에서 구체적으로 사용되는 상황 예측
  2. 두 개의 마케팅 캠페인에 공통적으로 참여한 고객 명단을 추출할 때.
  3. 여러 부서에서 동일하게 제출한 서류를 확인할 때.
  4. 여러 재고 관리 시스템에서 동일한 상품이 등록된 목록을 추출할 때.
  5. 병원에서 여러 진료과목에서 중복된 진료를 받은 환자 목록을 확인할 때.
  6. 자주 사용되는 윈도우 표시 및 설명
  • ROW_NUMBER(): 결과 집합 내에서 각 행에 고유한 번호를 부여합니다.
    sql SELECT ename, sal, ROW_NUMBER() OVER (ORDER BY sal DESC) AS RowNum FROM emp;
  • RANK(): 동일한 값을 가진 행에 동일한 순위를 부여하며, 순위의 간격이 발생할 수 있습니다.
    sql SELECT ename, sal, RANK() OVER (ORDER BY sal DESC) AS Rank FROM emp;
  • DENSE_RANK(): 동일한 값을 가진 행에 동일한 순위를 부여하되, 순위 간의 간격이 발생하지 않습니다.
    sql SELECT ename, sal, DENSE_RANK() OVER (ORDER BY sal DESC) AS DenseRank FROM emp;
  • NTILE(): 결과 집합을 지정한 수의 그룹으로 나누고, 각 행에 그룹 번호를 할당합니다.
    sql SELECT ename, sal, NTILE(4) OVER (ORDER BY sal DESC) AS Quartile FROM emp;
  1. 연습 문제
  • EMP 테이블에서 부서 번호가 10번과 20번에 속한 사원들, 그리고 부서 번호가 20번과 30번에 속한 사원들의 교집합을 추출하는 쿼리를 작성하세요.
  1. 연습 문제 해답 및 테이블 표시
   SELECT ename, sal, job, deptno
   FROM emp
   WHERE deptno IN (10, 20)
   INTERSECT
   SELECT ename, sal, job, deptno
   FROM emp
   WHERE deptno IN (20, 30);
ENAMESALJOBDEPTNO
ADAMS1100CLERK20
FORD3000ANALYST20
JONES2975MANAGER20
SCOTT3000ANALYST20
SMITH800CLERK20
  1. 응용 문제
  • 두 개의 테이블에서 중복된 데이터만을 추출하여 교집합을 만드는 쿼리를 작성하세요. 예를 들어, 특정 프로젝트에 참여한 직원들을 두 테이블에서 추출하고, 교집합만을 추출하는 쿼리를 작성하세요.
  1. 응용 문제 해답 및 테이블 표시
   SELECT empno, ename, deptno
   FROM project_team1
   INTERSECT
   SELECT empno, ename, deptno
   FROM project_team2;
EMPNOENAMEDEPTNO
7566JONES20
7839KING10
7902FORD20
  1. 전자상거래 업계에서 쓰일 수 있는 경우 예측
  2. A 쇼핑몰과 B 쇼핑몰의 회원 데이터베이스에서 동일한 회원을 추출하여 중복되는 고객을 파악할 때.
  3. 마케팅 캠페인에서 중복된 고객을 제거하여 실제 캠페인 효과를 분석할 때.
  4. 전자상거래 업계에서 사용할 수 있는 경우 예상 상황 문제 2가지 및 그 경우에 대한 SQL 코드 작성
  5. A 쇼핑몰과 B 쇼핑몰의 회원 데이터베이스에서 중복된 회원을 추출하기 위한 SQL 코드:
   SELECT customer_id, customer_name
   FROM shop_a_customers
   INTERSECT
   SELECT customer_id, customer_name
   FROM shop_b_customers;
  1. 중복된 고객을 제외한 나머지 고객을 확인하기 위한 SQL 코드:
   SELECT customer_id, customer_name
   FROM shop_a_customers
   MINUS
   SELECT customer_id, customer_name
   FROM shop_b_customers;
  1. SQL 코드를 시각적으로 이해하기 쉽도록 테이블 예시 작성
  • 예상 결과:
    CUSTOMER_ID CUSTOMER_NAME
    101 John Doe
    102 Jane Smith
    Posts created 411

    Related Posts

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

    Back To Top