집합 연산자
- SELECT 문 결과를 하나의 집합으로 간주, 그 집합에 대한 합집합, 교집합, 차집합 연산
- SELECT 문과 SELECT 문 사이에 집합 연산자 정의
- 두집합의 컬럼이 동일하게 구성되어야 함 (각 컬럼의 데이터 타입과 순서 일치 필요
- 전체 집합의 데이터 타입과 컬럼명은 첫번째 집합에 의해 결정됨
합집합
- 두 집합의 총 합 (전체) 출력
- UNION과 UNION ALL
1. UNION
- 중복된 데이터는 한 번만 출력
- 중복된 데이터를 제거하기 위해 내부적으로 정렬 수행
- 중복된 데이터가 없는 경우는 UNION 대신 UNION ALL을 사용하여 성능 개선!
2. UNION ALL
- 중복된 데이터도 전체 출력
예) 10번 부서 소속이 아닌 직원 정보와 20번 소속 직원 정보가 각각 분리되어 있다고 가정, 두 집합의 합집합
UNION 결과)
UNION ALL 결과)
- DEPTNO가 20인 결과가 중복되어 출력
교집합
- 두 집합 사이의 INTERSECT
- 두 집합의 교집합(공통으로 있는 행) 출력
예) 10번 부서 정보와 20번 부서 정보가 각각 분리되어 있다고 가정, 두 집합의 교집합
- 20, 30 / 10, 30 의 교집합 30
차집합
- 두 집합 사이의 MINUS
- 두 집합의 차집합 (한 쪽 집합에만 존재하는 행) 출력
- A-B와 B-A는 다르므로 집합의 순서 주의!
예) 10번이 아닌 부서 정보와 20번 부서 정보가 각각 분리되어 있다고 가정, 두 집합의 차집합
- 20, 30 / 20 의 차집합 30
집합 연산자 사용 시 주의 사항
- 두 집합의 컬럼 수 일치
- 두 집합의 컬럼 순서 일치
- 두 집합의 각 컬럼의 데이터 타입 일치
- 각 컬럼의 사이즈는 달라도 됨
- 개별 SELECT 문에 ORDER BY 전달 불가 (GROUP BY 전달 가능)
- GROUP BY한 결과의 집합 연산 결과는 출력 가능 →역시 컬럼 수, 순서, 데이터 타입 일치 필요
예1) 두 집합의 컬럼 데이터 타입
- EMP의 EMPNO는 숫자, EMP_T1의 EMPNO는 문자인 경우 TO_NUMBER(EMPNO)를 통해 데이터 타입 일치시킴
예2) 집합연산자와 ORDER BY의 사용
- 개별 쿼리에 ORDER BY 절 전달 불가
- 이 경우 첫 번째 ORDER BY에 의해 에러 발생
- 마지막 ORDER BY는 전체 집합 연산의 결과를 정렬하는 것이므로 가능
'sqld' 카테고리의 다른 글
2-12) 윈도우 함수 (0) | 2024.08.22 |
---|---|
2-11) 그룹 함수 (0) | 2024.08.21 |
2-9) 서브쿼리 (0) | 2024.08.21 |
2-8) 표준 조인 (0) | 2024.08.21 |
2-7) 조인 (0) | 2024.08.21 |