🗃️
MySQL 준비하기 - UNION
February 14, 2024
🎯 UNION과 UNION ALL
UNION
과 UNION 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