[SQL 6-5] INTERSECT 집합연산자(INTERSECT Set Operator)
안녕하세요 ^^
이번 시간에는 INTERSECT(교차) 집합 연산자에 대해 공부해보겠습니다.
이번 시간의 목표는 다음 세 가지입니다.
▶ 먼저 INTERSECT 집합 연산자를 사용할 때 수행되는 SQL 프로세스는 다음과 같습니다.
▷ Business Scenario는 교육 A와 교육 B를 모두 수요한 직원 목록에 대한 보고서를 생성하는 것입니다.
결과1과 결과2에 공통으로 포함되는 자료를 추출하고자 합니다.
INTERSECT 연산자의 프로그램 형식은 다음과 같습니다
사용할 자료는 다음과 같습니다.
교육A는 하루 과정이고 교육B는 일정 기간이 소요되는 과정입니다.
따라서 train_a에는 교육받은 날짜 변수가 하나이고 train_b에는 두 개의 날짜변수(시작&종료)가 있는 것을 확인할 수 있습니다.
INTERSECT 연산자를 사용했을 때 “Default” 처리과정을 살펴보겠습니다.
▷ INTERSECT 연산자의 행(Rows) 처리과정
- 두 중간 결과 셋 각각에서 중복된 행을 제거합니다.
- 두 번째 결과 셋에 존재하는 첫 번째 중간 결과 셋의 행들을 추출합니다.
▷ INTERSECT 연산자의 열(Columns) 처리과정
- 열은 위치에 따라 결합되며 각 위치의 열들은 같은 data 형식(type)이어야 합니다.
- 최종 결과 셋의 변수명은 첫 번째 결과 셋의 변수명을 따릅니다.
그럼 INTERSECT 연산자를 실행해보겠습니다.
결과를 보면, 교육 A와 B를 모두 수강한 직원 2명의 ID와 이름이 추출된 것을 확인할 수 있습니다.
이 결과에 대한 프로세스를 살펴보겠습니다.
먼저 두 개의 중간 결과 셋이 아래와 같이 있습니다
INTERSECT 연산자는 각 두 중간 결과 셋에서 중복된 행을 제거합니다.(여기서는 중복되는 행은 존재하지 않습니다.)
이어서 두 번째 중간 결과셋에는 없는 첫 번째 중간 결과셋의 자료를 삭제합니다.
총 8명의 자료가 삭제되어, 최종결과로는 첫 번째 결과셋의 두 명의 직원 자료가 남게됩니다.
▶ Modifier를 사용했을 때의 INTERSECT 연산자의 처리방식은 어떻게 달라질까요?
▷ ALL Modifier를 사용했을 때 처리방식
- 중복되는 행들이 중간 결과 셋에서 제거되지 않습니다.
- 두 번째 결과 셋에 존재하는 첫 번째 중간 결과 셋의 행들을 추출합니다.
▷ CORR Modifier를 사용했을 때 처리방식
- 변수명에 따라 열들이 매칭됩니다.
- 매칭되지 않은 컬럼들은 중간 결과 셋에서 삭제됩니다.
▶ 추가 시나리오
▷ 팀의 매니저 Bob는 교육 A와 B 중 하나의 교육도 수강하지 않고 있는 팀 맴버가 있는지 보고 싶어 합니다.
팀 맴버는 다음과 같습니다.
교육 A와 교육 B의 수강생을 통합한 후 team에 속해있지 않은 직원을 추출해보겠습니다.
결과를 보면, Bob의 팀 맴버인 Anne은 교육 A와 B를 모두 수강하지 않고 있음을 확인할 수 있습니다.
이상 INTERSECT 집합 연산자에 대해 살펴보았습니다.
감사합니다 ^^
Save $250 on SAS Innovate and get a free advance copy of the new SAS For Dummies book! Use the code "SASforDummies" to register. Don't miss out, May 6-9, in Orlando, Florida.