์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
- ๋ฆฌ๋ ์ค
- DATE_FORMAT
- ์๋ฐ์คํฌ๋ฆฝํธ
- like
- order by
- JavaScript
- JSP
- MySQL
- Ajax
- JS
- ๋์ปค
- ํจ์
- select
- ์ธ๋ผ์ธ๋ทฐ
- ํ๋ก๊ทธ๋๋จธ์ค
- ๋์
- ๋์ ํ ์ด๋ธ
- Update
- ๋ฐฐ์ด
- oracle
- Spring
- ๋ฐฑํฑ
- ๋ณ์
- ํ ์ด๋ธ
- ๋ช ๋ น์ด
- SQL
- ์ปจํธ๋กค๋ฌ
- optionํ๊ทธ
- post๋ฐฉ์
- ์ฝํ
- Today
- Total
bom's happy life
[SQL ์ฝํ ] ์คํ๋ผ์ธ/์จ๋ผ์ธ ํ๋งค ๋ฐ์ดํฐ ํตํฉํ๊ธฐ(UNION/UNION ALL/์ธ๋ผ์ธ๋ทฐ/NULL AS ์ปฌ๋ผ๋ช /LIKE/DATE_FORMAT) ๋ณธ๋ฌธ
[SQL ์ฝํ ] ์คํ๋ผ์ธ/์จ๋ผ์ธ ํ๋งค ๋ฐ์ดํฐ ํตํฉํ๊ธฐ(UNION/UNION ALL/์ธ๋ผ์ธ๋ทฐ/NULL AS ์ปฌ๋ผ๋ช /LIKE/DATE_FORMAT)
bompeach 2023. 8. 13. 17:37A) UNION
(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
A) FROM์ ์ ์ธ๋ผ์ธ๋ทฐ + UNION ALL ์ฌ์ฉ
SELECT
DATE_FORMAT(T.SALES_DATE, '%Y-%m-%d') AS SALES_DATE,
T.PRODUCT_ID,
T.USER_ID,
T.SALES_AMOUNT
FROM
(
SELECT *
FROM ONLINE_SALE
UNION ALL
SELECT
OFFLINE_SALE_ID AS ONLINE_SALE_ID,
NULL AS USER_ID,
PRODUCT_ID,
SALES_AMOUNT,
SALES_DATE
FROM OFFLINE_SALE
) AS T
WHERE SALES_DATE LIKE '2022-03%'
ORDER BY SALES_DATE, PRODUCT_ID, USER_ID;
์ ๋ฆฌ๋ ๋ต MYSQL, ORACLE -->
** NULL AS USER_ID ๋ถ๋ถ : UNION ํ๋ ค๋ฉด ์นผ๋ผ ์๊ฐ ๊ฐ์์ผ ํ๋ค๋ ์กฐ๊ฑด์ ๋ง์กฑ์์ผ์ผ ํ๋๋ฐ OFFLINE_SALE ํ ์ด๋ธ์ USER_ID๊ฐ ์กด์ฌํ์ง ์๊ธฐ ๋๋ฌธ์ NULL AS USER_ID ๋ก ์ฒ๋ฆฌํด์ค๋ค.
A) ๋ ๋๊ฐ ๋ค 2022๋ ์ด๊ธฐ ๋๋ฌธ์ ๋ฌ๋ง 03์์ ์ฐพ๋๋ก ํด์ค
-- MYSQL
(SELECT DATE_FORMAT(SALES_DATE, '%Y-%m-%d') AS SALES_DATE, PRODUCT_ID, NULL AS USER_ID, SALES_AMOUNT
FROM OFFLINE_SALE
WHERE DATE_FORMAT(SALES_DATE, '%m') = '03')
UNION ALL
(SELECT DATE_FORMAT(SALES_DATE, '%Y-%m-%d') AS SALES_DATE, PRODUCT_ID, USER_ID, SALES_AMOUNT
FROM ONLINE_SALE
WHERE DATE_FORMAT(SALES_DATE, '%m') = '03')
ORDER BY SALES_DATE, PRODUCT_ID, USER_ID;
-- ORACLE
(SELECT TO_CHAR(SALES_DATE, 'YYYY-MM-DD') AS SALES_DATE, PRODUCT_ID, NULL AS USER_ID, SALES_AMOUNT
FROM OFFLINE_SALE
WHERE TO_CHAR(SALES_DATE, 'MM') = '03')
UNION ALL
(SELECT TO_CHAR(SALES_DATE, 'YYYY-MM-DD') AS SALES_DATE, PRODUCT_ID, USER_ID, SALES_AMOUNT
FROM ONLINE_SALE
WHERE TO_CHAR(SALES_DATE, 'MM') = '03')
ORDER BY SALES_DATE, PRODUCT_ID, USER_ID;
+ LIKE ์ฌ์ฉํด์ ๋ ๋๊น์ง ์ฐพ๋๋ก ํ๊ธฐ
-- MYSQL
(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 ASC, PRODUCT_ID ASC, USER_ID ASC
# UNION / UNION ALL ?
- ๋ ๊ฐ์ SELECT ๋ฌธ์ ํฉ์น๋ ๊ฒ
- ๋ ๊ฐ์ SELECT ๋ฌธ์ ํฉ์น๋ ๊ฒ์ด๊ธฐ์ ์ ์ฝ์กฐ๊ฑด์ด ๋ง๋ค.
# UNION / UNION ALL ์ ์ฝ์กฐ๊ฑด ?
- ์์ SQL๋ฌธ๊ณผ ํ์ SQL๋ฌธ์ ์ปฌ๋ผ ๊ฐ์๊ฐ ๋์ผํด์ผ ํ๋ค.
- ์์ SQL๋ฌธ๊ณผ ํ์ SQL๋ฌธ์ ์ปฌ๋ผ ์์น๊ฐ ๋์ผํ ์ปฌ๋ผ๋ค์ด ๊ฒฐํฉ๋๋ค.
** ์ปฌ๋ผ ์ด๋ฆ๋ง ๋์ผํ๋ค๊ณ ๊ฒฐํฉ์ด ์๋๋ค.
- ์ปฌ๋ผ๋ช ์ ์ต์์ SQL๋ฌธ์ ๋ช ์นญ์ ๋ฐ๋ฅด๊ฒ ๋๋ค.
# UNION / UNION ALL ์ฐจ์ด์ ?
- UNION์ ์ค๋ณต๋ ํ์ ์ ๊ฑฐํ์ง๋ง UNION ALL์ ์ค๋ณต๋ ํ์ ํ์ฉํ๋ค.
- ์ค๋ณต๋ ํ์ ๊ผญ ์ ๊ฑฐํด์ผํ๋ ๊ฒฝ์ฐ๊ฐ ์๋๋ผ๋ฉด ๋ณดํต UNION ALL์ ์ฌ์ฉํ๋ค.
- ์ค์ ํ๊ฒฝ์์๋ UNION์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ๋๋ฌผ๋ค.