집합
우리는 두 개의 테이블을 집합연산 할 수 있다.
1. UNION
- 마리아db에서 full outer join 이 없어서 대체해서 사용하는 것
- 합집합, 중복 제거
- 성능 저하가 있다 (데이터를 합쳐서 가져와 정렬해서 검색작업? 중복 제거 - 순서가 많아서 오래걸려서 다른거 사용 한대)
- 쿼리와 쿼리 사이에 union 넣기
- join과 마찬가지로 최소한 공통되는 컬럼이 하나는 있어야 한다.
- full join 효과를 낼 수 있다.
select deptno from dept
union
select deptno from emp;
2. UNION ALL
- 합집합, 중복 제거 안함
select deptno from dept
union all
select deptno from emp order by deptno;
3. INTERSECT (교집합)
select deptno from dept
intersect
select deptno from emp;
4. NOT IN (차집합)
- minus 는 마리아 db에서 지원안함
- 기준이 되는게 앞으로 나오기
+ union은 속도가 너무 느리다 union을 사용하지않고 합집합/중복제거를 구하는 방법은? +
1. 먼저 unionall을 사용하여 합집합/ 중복제거안된 부서번호를 찾아
select deptno from dept
union all
select deptno from emp order by deptno;
2. 그다음 중복제거를 어떻게 하면 좋을까?
중복제거 하는 방법으로 distinct를 배웠지 (select distinct [컬럼명] from [테이블명])
distint는 테이블이 있어야 사용 가능해. 그렇담 저 unionall을 사용한 쿼리문을 하나의 테이블처럼 사용하자! 특정한 쿼리의 결과문을 테이블로 쓸수있어 (상하관계쿼리)
select distinct u.deptno from (
select deptno from dept
union all
select deptno from emp order by deptno) u;
u : 테이블처럼 사용할 쿼리문의 별칭을 정해줌
10_SET