DB

집합

꾸주니12 2022. 5. 1. 20:05

우리는 두 개의 테이블을 집합연산 할 수 있다.

 

 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에서 지원안함
  • 기준이 되는게 앞으로 나오기

첫번째 예시 : emp테이블에서 deptno를 가져올건데 deptno가 dept테이블의 deptno를 뺀 deptno중에서 가져오세요

 

 

 

+ 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