🎯 UNION과 UNION ALL

UNIONUNION ALL은 두 개의 결과를 결합하는 연산자이다. 결과를 합치는 방식과 중복 처리 방식에서 차이를 보인다.

먼저 UNION은 중복된 행을 제거하여 결과에는 유니크한 행들만 포함한다. 결과는 정렬되어 반환되며, 중복된 행이 제거된 상태이다.

다음으로 UNION ALL은 중복된 행을 제거하지 않고 모든 행을 포함한다. 결과는 정렬되지 않으며, 그대로 반환되는 것이 특징이다.

여기서 중복을 제거한다는 것에 이해를 잘할 필요가 있다. 중복 제거는 SELECT 구문의 모든 항목이 동일할 때에만 이루어진다. 즉 하나라도 값이 다르면 중복으로 처리되지 않는다.

🎯 GROUP BY 사용하여 중복된 name 제거하기

SELECT name, MAX(grade) AS grade
FROM (
	SELECT name, grade FROM students1
    UNION
    SELECT name, grade FROM students2
) AS a
GROUP BY name
ORDER BY grade desc;

🎯 예제 확인하기 (프로그래머스)

👉 문제 확인하기 : 오프라인/온라인 판매 데이터 통합하기

SELECT DATE_FORMAT(SALES_DATE, "%Y-%m-%d") AS SALES_DATE, PRODUCT_ID, USER_ID, SALES_AMOUNT
FROM ONLINE_SALE AS N
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 AS F
WHERE SALES_DATE LIKE '2022-03%'
ORDER BY SALES_DATE, PRODUCT_ID, USER_ID