로운's 기술노트

[프로그래머스] 오프라인/온라인 판매 데이터 통합하기 (UNION) 본문

내배캠_데이터분석가_'24.04~08/SQL

[프로그래머스] 오프라인/온라인 판매 데이터 통합하기 (UNION)

로운's 2024. 4. 23. 13:51

 

 

2개의 테이블을 묶는 방법을 join만 알고 있었는데, 찾아보니 union이라는 것도 가능하네?

오히려 이 경우에는 union all을 사용하는 것이 더 적합한 듯

 

ㅇ UNION이란?

 - UNION : 여러 SELECT문과 결합하여 중복을 제거한 단일 결과 집합을 생성.
 - UNION ALL : 여러 SELECT 문의 결과를 단순히 결합하여 중복을 제거하지 않은 단일 결과 집합을 생성.

 

ㅇ JOIN과의 차이

결합 방식과 처리 순서에 결정적인 차이가 있다.

JOIN수평 결합이며, 먼저 테이블을 결합하고 그 결과를 반환하지만,

UNION수직 결합이며, 각 SELECT 문을 먼저 실행하여 각각의 결과를 결합한 후에 최종 결과를 반환.

 

ㅇ 사용 전, 알아두기!

구분 UNION UNION ALL
중복 행 처리 중복된 행을 제거하여 단일 결과 집합을 생성하므로 데이터 중복을 방지할 수 있음 중복을 제거하지 않고 모든 결과를 포함하므로 중복된 데이터가 결과에 반복해서 나타날 수 있음
성능 중복을 제거하기 위해 결과 집합을 정렬하고 비교하는 작업이 추가되므로 처리 시간이 더 오래 걸릴 수 있음 중복된 행이 많을 경우 결과 집합의 크기가 더 커질 수 있으며, 이 경우 성능에 영향을 줄 수 있음
열 순서 및 데이터 유형 각 SELECT 문의 결과는 동일한 열 순서와 데이터 유형을 가져야 한다
서로 다른 열 순서나 데이터 유형을 가진 SELECT 문을 결합하면 오류 발생

 

 

<풀이>

select date_format(SALES_DATE,'%Y-%m-%d') as SALES_DATE
    , PRODUCT_ID
    , USER_ID
    , SALES_AMOUNT
from ONLINE_SALE 
where SALES_DATE like '2022-03%'
union all
select date_format(SALES_DATE,'%Y-%m-%d') as SALES_DATE
    , PRODUCT_ID
    , Null
    , SALES_AMOUNT
from OFFLINE_SALE
where SALES_DATE like '2022-03%'
order by SALES_DATE, PRODUCT_ID, USER_ID

 

 

 

 

Comments