프로그래밍/Oracle
[Oracle] 집합 연산자
eunki
2022. 6. 2. 00:37
728x90
- 서로 다른 테이블의 데이터를 양 옆으로 연결해서 출력하는 것은? 조인 (join)
- 서로 다른 테이블의 데이터를 위아래로 연결해서 출력하는 것은? 집합 연산자
집합 연산자
- union all → 합집합
- union → 합집합 (중복된 데이터를 제거)
- intersect → 교집합
- minus → 차집합
집합 연산자 사용시 주의사항
- 집합 연산자 위쪽에 있는 쿼리문의 컬럼의 개수와 아래쪽에 있는 컬럼의 개수가 서로 동일해야 한다.
(컬럼명도 가급적 동일하게 맞춰줍니다.) - 집합 연산자 위아래 쿼리문의 컬럼들의 데이터 유형도 서로 같아야 한다.
- 집합 연산자 사용 시 order by 절은 맨 아래쪽의 쿼리문에만 사용 가능하다.
예제 1. 부서 번호와 부서 번호 별 토탈 월급을 출력한 것과 토탈 월급만 출력한 것을 연결해서 출력
select deptno, sum(sal)
from emp
group by deptno
union all
select null as deptno, sum(sal)
from emp;
예제 2. 부서 번호, 부서 번호 별 토탈 월급을 출력하는데, 아래쪽에 전체 토탈 월급을 출력
select deptno, sum(sal)
from emp
group by deptno
union
select null as deptno, sum(sal)
from emp;
union 은 union all 과는 다르게 중복된 데이터를 제거하고 정렬도 한다.
※ 21c 에서는 union 에서 데이터 정렬 기능을 제거했다.
예제 3. 사원 테이블과 부서 테이블의 공통된 부서 번호가 무엇인가?
select deptno
from emp
intersect
select deptno
from dept;
예제 4. 부서 테이블에는 존재하는데 사원 테이블에는 없는 부서 번호는 무엇인가?
select deptno
from dept
minus
select deptno
from emp;
728x90