1. ๋ฌธ์ ์ค๋ช
2. ์ ๊ทผ ๋ฐฉ๋ฒ
๋ฌธ์ ๋ฅผ ๋ณด๊ณ ๋ ์๊ฐ์ `์ฐ๊ด ์ปฌ๋ผ์ด ์์ ๋๋ ํ ์ด๋ธ์ ์ด๋ป๊ฒ ์กฐ์ธํ๋๊ฐ?` -> ๊ทธ๋์ ์นดํ ์์ ๊ณฑ์ด ๋ ์ฌ๋๋ค.
๋ชจ๋ ์กฐํฉ์ ์์ฑํ๋ ๊ฒฝ์ฐ๋ฅผ ์นดํ ์์ ๊ณฑ(Cartesian Product)์ด๋ผ๊ณ ํ๋๋ฐ CROSS JOIN ํด ์ฃผ๋ ๊ฒ์ด๋ค.
์ผ๋จ ์ฌ๊ธฐ๊น์ง๋ง ์์ฑ ํ๊ณ ์ฟผ๋ฆฌ๋ฅผ ์คํ์์ผ ๋ณด๊ธฐ๋ก ํ๋ค. ํ ์ด๋ธ์ด ์์ผ๋ก ๋ถ์๋ค.
์ฌ๊ธฐ์ ๋ ์ง๋ณ๋ก GROUP BY ํด ๋ณด๊ณ ๋ญ๊ฐ ํด ๋ณด๋ ค๊ณ ํ๋๋ฐ ์ค๊ฐ์ ๊ธฐ๊ฐ ๋งํ ์๊ฐ์ด ๋ฌ๋ค.
ํ ์ด๋ธ์ ์์ด ์๋๋ผ ์๋๋ก ๋ถ์ด๋ฉด ๋๊ฒ ๋ค.
๊ทธ๋ผ UNION ALL์ ์จ ๋ณด๋๊ฒ ์ด๋จ๊น?
๊ทธ๋์ ์๋๋ก ๋ฐ์ดํฐ๋ฅผ ๋ถ์ด๋๊ฒ ์ข๊ฒ ๋ค๊ณ ์๊ฐํ๋ค.
๊ทธ๋ฆฌ๊ณ ์ค๋ณต๊ฐ์ ์์ ๋ฉด ์๋๊ธฐ ๋๋ฌธ์ UNION์ด ์๋๋ผ UNION ALL... ์ค๋ง...!!
SELECT SALES_DATE, PRODUCT_ID, USER_ID, SALES_AMOUNT
FROM ONLINE_SALE
UNION ALL
SELECT SALES_DATE, PRODUCT, ?, SALES_AMOUNT
FROM OFFLINE_SALE
์ฌ๊ธฐ๊น์ง ์ผ๋๋ฐ ๋ฌธ์ ๋ ONLINE_SALE ํ ์ด๋ธ์๋ USER_ID๊ฐ ์๋๋ฐ OFFLINE_SALE ํ ์ด๋ธ์๋ ์๋ค๋ ๊ฒ์ด๋ค. ์ด๋ ๊ฒ ๋งค์นญ ์ ๋๋ ์ปฌ๋ผ์ ์ด๋ป๊ฒ ํด ์ค์ผ ํ๋์ง ๊ถ๊ธํด์ก๋ค. NULL AS USER_ID๋ก ๋๊ฐ ๋ฃ์ด์ฃผ๊ณ ์ปฌ๋ผ ๋ง์ถฐ์ฃผ๋๊น ์ฟผ๋ฆฌ๊ฐ ๋ฌธ์ ์์ด ์คํ๋๋ค. ์๋ก์ด ์ฌ์ค ๋ฐ๊ฒฌ!
SELECT SALES_DATE, PRODUCT_ID, USER_ID, SALES_AMOUNT
FROM ONLINE_SALE
UNION ALL
SELECT SALES_DATE, PRODUCT_ID, NULL AS USER_ID, SALES_AMOUNT
FROM OFFLINE_SALE
์ด์ ์ฌ๊ธฐ์ SALES_DATE๋ง ํฌ๋งคํ ํด์ฃผ๊ณ , SALES_DATE๋ก GROUP BY ํด ์ฃผ๋ฉด ๋๋๊ฑด๊ฐ!
์คํ์ ๋๋๋ฐ ํ๋ ธ๋ค๊ณ ํ๋ค....?
์! ๋ฌธ์ ๋ฅผ ์ฝ์ด๋ณด๋๊น `2022-03์ ๋ฐ์ดํฐ`๋ง ๊ฐ์ง๊ตฌ ์์ผ ํ๋ค.
๊ทธ๋ฆฌ๊ตฌ ๋ ์ง๋ณ๋ก ๊ทธ๋ฃน ๋ฐ์ด ์ ํด๋ ๋๋ค!!
์ถ๋ ฅํ ์ด๋ธ์ ๋์ผํ ๋ ์ง ์ปฌ๋ผ์ด ์ฌ๋ฌ ๊ฐ ์๊ธฐ ๋๋ฌธ์ด๋ค.
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 ALL
SELECT DATE_FORMAT(SALES_DATE, '%Y-%m-%d') AS SALES_DATE,
PRODUCT_ID,
NULL AS USER_ID,
SALES_AMOUNT
FROM OFFLINE_SALE
WHERE SALES_DATE LIKE '2022-03%'
ORDER BY PRODUCT_ID, USER_ID;
์ฝ๋ ์คํ์ ๋๋๋ฐ ๋๋์ฒด ๋ญ๊ฐ ํ๋ ธ์ง?
์๊ณ ๋ณด๋ ORDER BY ์ ์ SALES_DATE๋ก ์ ๋ ฌํด ์ฃผ๋ ๊ฑฐ ๋นผ๋จน์ด์ ๊ทธ๋ฐ๊ฑฐ์์... ใ ใ ใ ใ
3. ์ ๋ต ์ฝ๋
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 ALL
SELECT DATE_FORMAT(SALES_DATE, '%Y-%m-%d') AS SALES_DATE,
PRODUCT_ID,
NULL AS USER_ID,
SALES_AMOUNT
FROM OFFLINE_SALE
WHERE SALES_DATE LIKE '2022-03%'
ORDER BY SALES_DATE, PRODUCT_ID, USER_ID;
`์์ ์ฌํญ1_`
WHERE SALES_DATE LIKE '2022-03%' ๋ฅผ
WHERE DATE_FORMAT(SALES_DATE, '%Y-%m') = '2022-03' ๋ก ๋ณ๊ฒฝ
๋ ์ง๋ LIKE๋ณด๋ค๋ = ๋ก ๋ง์ด ๋น๊ตํ๋ ๊ฒ ๊ฐ๋ค.
`์์ ์ฌํญ2_`
ORDER BY ์ ์ SALES_DATE๋ก ์ค๋ฆ์ฐจ์ ์ถ๊ฐ ํด ์ค!
4๋จ๊ณ ๋ฌธ์ ๋ผ ์ด๋ ค์ธ ์ค ์์๋๋ฐ ์๊ฐ๋ณด๋ค ์์ฒญ ์ฝ๋ค><