[Mysql] UNION

ifyouseeksoomi·2020년 12월 13일
0

Mysql

목록 보기
6/13
post-thumbnail

(해당 포스트는 Inflearn - [백문이불여일타] 데이터 분석을 위한 중급 SQL 강의록입니다.)

UNION, UNION ALL

Join이 좌우로 데이터를 붙인다면 Union은 상하로 데이터를 붙이는 작업. 합집합.
Union의 가장 큰 특징은 distinct가 default라는 것. 따라서 중복값이 있을 경우 Union은 내가 별다른 지시(ex. distinct)를 내리지 않아도 알아서 중복값을 제거하여 result set으로 반환한다.

[참고] select문

Select Country 
From Customers

위 쿼리에는 Customers 테이블에서 Country 컬럼에 해당하는 정보를 중복과 관계 없이 모두 뽑아준다. 참고로 이 쿼리의 셀렉트절은 Select ALL Country가 줄여진 표현으로, 만일 중복을 모두 제거하고 싶다면 Select distinct Country를 사용한다. 애초에 distinct가 default인 Union과는 반대되는 특징을 가지는 것이다.

만일 중복값도 함께 보고 싶을 경우에는 UNION ALL을 사용하면 된다.

(mysql에서 지원하지 않는) MINUS(EXCEPT), INTERSECT

이 부분 정말 불만인데 ...
두 result set의
차집합을 보고 싶을 경우 사용하는 MINUS (or EXCEPT),
교집합을 보고 싶을 때 사용하는 INTERSECT가 mysql 에서는 지원이 되지 않는다.

JOIN + UNION

full outer join 같은 경우
아래처럼 left join과 right join을 union할 경우 조회 가능하다.

select * 
from Customers
left join Orders on Customers.CustomerID=Orders.CustomerId

UNION

select * 
from Customers
right join Orders on Customers.CustomerID=Orders.CustomerId
profile
묻고 더블로 가는 중인 백엔드 개발자입니다.

0개의 댓글