본문 바로가기
Back-End/DB

[Oracle] 집합 연산자 (UNION)

by LeeGangEun 2022. 2. 25.

UNION - 합집합 (중복제거)

두 개이상의 select문을 서로 합치고 싶은데 그 중에서도
중복되는 데이터를 제거 후 출력하고 싶다면 UNION을 사용하면 된다.

각각 데이터를 갖고 있는 sale_asia, sale_america 테이블이 있다.
만약 두개의 테이블을 합쳐서 중복제거 후 조회하고 싶으면 
UNIONO을 사용하면 된다.
주의점 : 각 select문이 출력하려는 열 개수와 각 열의 자료형이 순서별로 일치해야 한다.
(칼럼명칭, 칼럼위치, 칼럼수가 모두 동일해야 한다.)
(컬럼명이 같지 않다면 as를 사용해서 같게 만들어줘야 한다.)

select name, ea
from sale_asia
union 
select name, ea    
from sale_america       -- union시 주의점 : 컬럼의 갯수가 같아야 한다.
order by ea;            -- 합치는 컬럼의 데이터 타입이 호환이 되어야 한다.
                        -- order by는 마지막에 작성, 합쳐진 후 적용된다.

중복된 데이터인 그렌져를 제외하고 출력된 걸 볼 수 있다!

 

UNION ALL 합집합 ( 중복제거 X)

두 개이상의 select문을 서로 중복된 데이터를 제거하지 않고
합치고 싶다면 UNION ALL을 사용하면 된다. 

select name, ea
from sale_asia
union all
select name, ea    
from sale_america     
order by ea;

중복 데이터인 그렌져가 제거되지않고 두번 출력된다!



MINUS 차집합 ( 중복된 데이터 제거 후 출력)

첫번째 select문에서 두번째 select문을 빼고 싶다면 minus를 사용하면 된다!
minus는 첫번째 select문을 기준으로 두번째 select문과의 공통데이터를 제거 한 후 데이터를 반환한다!

select name, ea
from sale_asia
minus
select name, ea    
from sale_america

중복데이터인 그렌져를 제거 후 출력!

 

INTERSECT 교집합 ( 중복되는 데이터만 출력)

두개의 select문에서 중복된 데이터만 출력하고 싶은 경우에 사용한다!

select name, ea
from sale_asia
INTERSECT
select name, ea    
from sale_america

중복된 데이터는 그렌져만 출력된다 !