bdfgdfg

SQL 오프라인/온라인 판매 데이터 통합하기 본문

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을 사용하느 경우는 극히 드뭅니다.

 

출처 - https://crazykim2.tistory.com/259

반응형
Comments