CS/SQL
SQL 오프라인/온라인 판매 데이터 통합하기
marmelo12
2022. 12. 15. 22:38
반응형
SELECT date_format(sales_date, '%Y-%m-%d') as SALES_DATE, PRODUCT_ID, USER_ID, SALES_AMOUNT
FROM ONLINE_SALE
WHERE SALES_DATE Between N'2022-03-01' and N'2022-03-31'
UNION ALL
SELECT date_format(sales_date, '%Y-%m-%d') as SALES_DATE, PRODUCT_ID, NULL, SALES_AMOUNT
FROM OFFLINE_SALE
WHERE SALES_DATE Between N'2022-03-01' and N'2022-03-31'
ORDER BY SALES_DATE ASC, PRODUCT_ID ASC, USER_ID ASC;
문제를 보자마자 UNION All 이겠거니 했다.
근데 자꾸 오답이 떠서 뭐가 문제인지 알 수가 없었음 ㅠ
확인해보니.. date 출력이 시간까지 출력되고있어서 그랬던것.
또한 하나 알게된건 UNION을 하기 위해서 조회할 칼럼의 수와 데이터 타입이 동일(BigInt, Int같은건 괜찮은듯?)해야한다!
1. UNION/UNION ALL이란?
- 두 개의 SELECT문을 합치는 것을 말합니다.
- 두 개의 SELECT문을 합치는 것이기때문에 제약조건이 많습니다.
2. UNION/UNION ALL의 제약조건
- 상위SQL문과 하위SQL문의 컬럼 개수가 동일해야 합니다.
- 상위SQL문과 하위SQL문의 컬럼 위치가 동일한 컬럼들이 결합이 됩니다.
※ 컬럼 이름만 동일하다고 결합이 되지 않습니다.
- 컬럼명은 최상위 SQL문의 명칭을 따르게 됩니다.
3. UNION과 UNION ALL의 차이점
- UNION은 중복된 행을 제거하지만 UNION ALL은 중복된 행을 허용합니다.
- 중복된 행을 꼭 제거해야하는 경우가 아니라면 보통 UNION ALL을 사용합니다.
- 실제 환경에서는 UNION을 사용하느 경우는 극히 드뭅니다.
반응형