[SQL 6-4] EXCEPT 집합연산자 (EXCEPT Set Operator)
안녕하세요 ^^
이번 시간에는 EXCEPT(제외) 집합 연산자에 대해 공부해보겠습니다.
이번 시간의 목표는 다음 세 가지입니다.
▶ 먼저 EXCEPT 집합 연산자를 사용할 때 수행되는 SQL 프로세스는 다음과 같습니다.
▷ Business Scenario는 교육 A는 수료하였지만 교육 B는 수료하지 않은 직원들은 누구인지에 대한 보고서를 생성하는 것입니다.
결과1과 결과2에서 결과1에만 해당하는 자료를 선택하고자 합니다.
EXCEPT 연산자의 프로그램 형식은 다음과 같습니다.
사용할 자료는 다음과 같습니다.
교육A는 하루 과정이고 교육B는 일정 기간이 소요되는 과정입니다.
따라서 train_a에는 교육받은 날짜 변수가 하나이고 train_b에는 두 개의 날짜변수(시작&종료)가 있는 것을 확인할 수 있습니다.
EXCEPT 연산자를 사용했을 때 “Default” 처리과정을 살펴보겠습니다.
▷ EXCEPT 연산자의 행(Rows) 처리과정
- 두 중간 결과 셋의 행을 위아래로 결합한 후, 중복되는 행은 최종 결과 셋에서 제거합니다.
- 두 번째 결과 셋에는 없는 첫 번째 중간 결과 셋의 행들만이 추출됩니다.
▷ EXCEPT 연산자의 열(Columns) 처리과정
- 열은 위치에 따라 결합되며 각 위치의 열들은 같은 data 형식(type)이어야 합니다.
- 최종 결과 셋의 변수명은 첫 번째 결과 셋의 변수명을 따릅니다.
그럼 EXCEPT 연산자를 실행해보겠습니다.
결과를 보면 ID와 NAME에 대해 총 8개의 행이 추출된 것을 확인할 수 있는데요, 어떻게 나온 결과인지 살펴보겠습니다.
먼저 두 개의 중간 결과 셋이 있습니다.
EXCEPT 연산자는 첫 번째 중간 결과 셋에서 중복되는 행을 제거합니다.(여기서는 중복된 행은 없습니다.)
이어서 두 번째 결과 셋에 있는 첫 번째 결과 셋의 행들을 제거합니다.
두 행이 삭제되는 것을 볼 수 있습니다. 따라서 최종적으로 첫 번째 중간 결과 셋의 총 8개의 행이 선택된 것을 알 수 있습니다.
▶ Modifier를 사용했을 때의 EXCEPT 연산자의 처리방식은 어떻게 달라질까요?
▷ ALL Modifier를 사용했을 때 처리방식
- 중복되는 행들이 중간 결과 셋에서 제거되지 않습니다.
- 두 번째 결과 셋에는 없는 첫 번째 중간 결과 셋의 행들만이 추출됩니다.
▷ CORR Modifier를 사용했을 때 처리방식
- 변수명에 따라 열들이 매칭됩니다.
- 매칭되지 않은 컬럼들은 중간 결과 셋에서 삭제됩니다.
▶ 인라인뷰(In-Line View: 서브쿼리)에서 집합연산자를 사용해보자.
앞선 business Scenario에 따라 교육 B는 수강하지 않고 교육 A만 수강한 직원들의 수를 계산해보겠습니다.
FROM 절에서 서브쿼리를 활용하였고 결과를 보면 교육 A만을 수강한 직원은 총 8명인 것을 확인할 수 있습니다.
▶ 여기서 문제! Default로 EXCEPT 연산자를 사용하였을 때, 최종 결과는 두 번째 결과셋에는 없는 첫 번째 결과셋의 모든 행을 포함하고 있을까?
정답은 ‘아니오’입니다.
앞서 공부하였듯이 EXCEPT 연산자는 첫 번째 결과셋에서 중복되는 행을 제외한 결과를 상환합니다.
이상 EXCEPT 집합 연산자에 대해 살펴보았습니다.
감사합니다 ^^
Registration is now open for SAS Innovate 2025 , our biggest and most exciting global event of the year! Join us in Orlando, FL, May 6-9.
Sign up by Dec. 31 to get the 2024 rate of just $495.
Register now!