[프로그래머스] LEVEL4 오프라인/온라인 판매 데이터 통합하기
문제가 어려운 것은 아니나, 포스팅을 하기로 결정한 이유는 지난 시간에 풀었던 SQL 문제에서는 JOIN을 사용했고, 이번에는 UNION을 사용하기 때문에 둘의 차이점을 명확히 하고자 합니다.
- 온라인 판매 데이터, 오프라인 판매 데이터를 조건에 따라 각각 SELECT
- 두 개의 SELECT 쿼리를 UNION
- UNION 한 쿼리 결과를 ORDER BY
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
SELECT DATE_FORMAT(SALES_DATE, '%Y-%m-%d') AS SALES_DATE, PRODUCT_ID, NULL AS USER_ID, SALES_AMOUNT
FROM OFFLINE_SALE
WHERE SALES_DATE LIKE '2022-03-%'
ORDER BY SALES_DATE, PRODUCT_ID, USER_ID
SELECT 컬럼1
FROM 테이블1
UNION
SELECT 컬럼2
FROM 테이블2
UNION은 두 개의 쿼리 결과를 결합하는 SQL의 집합 연산입니다. UNION의 결과는 각 쿼리의 결과 튜플을 포함하기 때문에 두 릴레이션은 같은 수의 속성을 가져야 합니다. UNION은 두 쿼리 결과의 중복을 제거하고 보여주지만, UNION ALL은 중복을 제거하지 않고 보여주기 때문에 쿼리 조회 속도는 UNION ALL이 더 빠릅니다.
JOIN은 두 릴레이션 사이에 서로 공통된 속성이 있어 이를 바탕으로 두 릴레이션의 튜플을 결합한다는 특징이 있습니다. 다시 말해, JOIN은 두 릴레이션 사이에 공통된 속성(ATTRIBUTES)이 반드시 한 가지 이상 존재해야 합니다.
JOIN은 컬럼이 옆으로 추가되는 방식이어서 병렬적이지만, UNION은 데이터가 아래로 추가되는 방식이라 직렬적입니다.