※ EMP, DEPT, SALGRADE 테이블 구조
※ 집합연산자
union | union all | minus | intersect |
1. union VS union all
# 비교 / 결과는 동일한 쿼리 | |
union은 데이터 중복을 제거하면서 데이터가 정렬
select deptno, sum(sal) from emp group by deptno union select null as deptno, sum(sal) from emp; |
union all은 중복이 있고 데이터가 무작위 정렬 정렬작업이 없어서 성능은 더 좋다. 따라서 정렬작업이 필요 없다면 union all을 쓰는 것이 바람직 하다.
select deptno, sum(sal) from emp group by deptno union select null as deptno, sum(sal) from emp; |
# 문제 122. 다음 쿼리를 튜닝 전인 union all로 구현하시오.
# 튜닝 후 select job, sum(sal) from emp group by rollup(job);
# union all select job, sum(sal) from emp group by job union all select to_char(null) as job, sum(sal) from emp; |
- 집합연산자 사용 시 주의 1. 위아래의 컬럼의 갯수와 데이터 타입이 같아야 한다. 2. order by 절은 맨 아래의 쿼리에만 사용 가능하다. |
2. minus
# 문제 123. dept에는 존재하지만, emp에는 존재하지 않는 부서번호를 출력하시오.
select deptno from dept minus select deptno from emp; |
3. intersect
# 문제 124. dept와 emp 테이블의 공통으로 있는 부서번호를 출력하시오.
select deptno from emp intersect select deptno from dept; |
★ 보너스 ~ full outer join을 union으로 표현하는 방법
# 다음의 쿼리를 union을 사용하여 표현하시오.
select e.ename, d.loc from emp e full outer join dept d on (e.deptno = d.deptno);
select ename, d.loc from emp e, dept d where e.deptno (+) = d.deptno union select ename, d.loc from emp e, dept d where e.deptno = d.deptno(+); |
'Itwill 학습내용 정리 > 1. SQL' 카테고리의 다른 글
7.2 SubQuery를 이용한 튜닝 (0) | 2019.04.25 |
---|---|
7.1 SubQuery (0) | 2019.04.25 |
6.2 JOIN ~ 1999 ANSI (0) | 2019.04.25 |
6.1 JOIN ~ Oracle 버전 (0) | 2019.04.25 |
5. 데이터 분석 함수 (0) | 2019.04.25 |