SQL 문제를 복습하던 도중 놓쳤던 부분을 발견했다
이 문제는 UNION으로 풀었던 거다
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,
SALES_AMOUNT
FROM OFFLINE_SALE
WHERE SALES_DATE LIKE '2022-03%'
ORDER BY SALES_DATE ASC, PRODUCT_ID ASC, USER_ID ASC
답은 이거다
여기서 UNION 이란 무엇일까?
UNION 이란
- 여러 쿼리문들을 합쳐서 하나의 쿼리문으로 만들어주는 방법이다.
- 중복된 값을 제거하고 보여준다.
- 중복된 값을 제거하는 연산이 추가로 수행되기 때문에 UNION ALL보다 속도가 느리다.
그렇다면 UNION ALL은 무엇일까?
UNION ALL 이란
- UNION과 동일하게 여러 쿼리문들을 합쳐서 하나의 쿼리문으로 만들어주는 방법이다.
- 중복된 값을 모두 보여준다.
내가 UNION ALL이 아닌 UNION으로 쓴 이유가 무엇일까?
중복이 있으면 안 되기 때문에 UNION으로 썼다
그렇다면
SELECT DATE_FORMAT(SALES_DATE,'%Y-%m-%d') AS SALES_DATE,
PRODUCT_ID,
NULL,
SALES_AMOUNT
NULL을 쓴 이유는 무엇일까?
이유는
SELECT DATE_FORMAT(SALES_DATE,'%Y-%m-%d') AS SALES_DATE,
PRODUCT_ID,
USER_ID,
SALES_AMOUNT
FROM ONLINE_SALE
SELECT DATE_FORMAT(SALES_DATE,'%Y-%m-%d') AS SALES_DATE,
PRODUCT_ID,
NULL,
SALES_AMOUNT
FROM OFFLINE_SALE
OFFLINE_SALE 테이블에서는 USER_ID가 없기 때문에 NULL로 표기해 주었다
그다음은 문제대로 풀어주면 된다
찾아보니 UNION은 실무에서 많이 쓰이지는 않는다고 한다
하지만 알고 있어야 꼭 써야 할 부분에서 쓸 수 있기 때문에
이것 또한 나에게 있어 중요한 자산이 될 것 같다
'나중에도 봐야겠지?' 카테고리의 다른 글
2024.04.09 (화) 코틀린 var과 val (0) | 2024.04.09 |
---|---|
2024.04.08 (월) 코틀린이란? (1) | 2024.04.08 |
2024.04.04 도메인, DNS (0) | 2024.04.04 |
2024.04.03 Kotlin if else (feat.==) (0) | 2024.04.03 |
2024.04.02 (화) 스레드, 멀티스레드 (0) | 2024.04.02 |