01. 집합 연산자
- SELECT 문 결과를 하나의 집합으로 간주
- 집합에 대한 합집합(UNION, UNION ALL), 교집합(INTERSECT), 차집합(MINUS) 연산
- SELECT문과 SELECT문 사이에 집합 연산자 정의
- 두 집합의 컬럼이 동일하게 구성되어야 함
- 각 컬럼의 데이터 타입과 순서 일치 필요
- 전체 집합의 데이터 타입과 컬럼명은 첫 번째 집합에 의해 결정됨
02. 합집합
- 두 집합의 총 합(전체) 출력
- UNION과 UNION ALL 사용 가능
- UNION
- 중복된 데이터는 한 번만 출력
- 중복된 데이터를 제거하기 위해 내부적으로 정렬 수행
- 중복된 데이터가 없을 경우: UNION 사용 대신 UNION ALL 사용 권고
- 불필요한 UNION 정렬을 막을 수 있음
- UNION ALL
- 중복된 데이터도 전체 출력 (정렬 X)
SELECT empno, ename, deptno
FROM emp
WHERE deptno != 10
UNION
SELECT empno, ename, deptno
FROM emp
WHERE deptno = 20; --UNION 합집합, 중복 데이터는 출력하지 않음
SELECT empno, ename, deptno
FROM emp
WHERE deptno != 10
UNION ALL
SELECT empno, ename, deptno
FROM emp
WHERE deptno = 20; --UNION ALL 합집합, 중복 데이터도 출력함
03. 교집합
- 두 집합 사이에 INTERSECT
- 두 집합의 교집합(공통으로 있는 행)을 출력
SELECT empno, ename, sal, deptno
FROM emp
WHERE depno != 10
INTERSECT
SELECT empno, ename, sal, deptno
FROM emp
WHERE deptno != 20; --교집합, INTERSECT 사용, 공통된 행만 반환
04. 차집합
- 두 집합 사이에 MINUS 전달
- 두 집합의 차집합(한 쪽 집합에만 존재하는 행) 출력
- A-B vs B-A는 결과가 다름, 순서 주의
SELECT empno, ename, sal, deptno
FROM emp
WHERE deptno != 10
MINUS
SELECT empno, ename, sal, deptno
FROM emp
WHERE deptno = 20; --차집합, MINUS, 공통된 부분은 제외함
05. 집합 연산자 사용시 주의사항
- 두 집합의 컬럼 수 일치
- 두 집합의 컬럼 순서 일치
- 두 집합의 각 컬럼의 데이터 타입 일치
- 각 컬럼의 사이즈는 달라도 됨
- 개별 SELECT문에 ORDER BY 전달 불가 (GROUP BY 전달 가능)
- 전체 결과에 전달 가능
'SQL' 카테고리의 다른 글
[SQL] 윈도우 함수 (Window Function) (0) | 2025.02.26 |
---|---|
[SQL] 그룹 함수 (0) | 2025.02.17 |
[SQL] 서브쿼리 (0) | 2025.02.17 |
[SQL] JOIN (2) (0) | 2025.02.17 |
[SQL] JOIN (1) (0) | 2025.02.14 |