์กฐ๊ฑด์ ๋ง๋ ํ์์ ๊ตฌํ๊ธฐ
๋ฌธ์
USER_INFO ํ ์ด๋ธ ๊ตฌ์กฐ
USER_INFO ํ ์ด๋ธ์์ 2021๋ ์ ๊ฐ์ ํ ํ์ ์ค ๋์ด๊ฐ 20์ธ ์ด์ 29์ธ ์ดํ์ธ ํ์์ด ๋ช ๋ช ์ธ์ง ์ถ๋ ฅํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์.
ํ์ด
1. ORACLE
1) TO_CHAR ์ฌ์ฉ
SELECT COUNT(*) AS USERS
FROM USER_INFO
WHERE TO_CHAR(JOINED, 'YYYY') = '2021'
AND AGE BETWEEN 20 AND 29;
2) EXTRACT ์ฌ์ฉ
SELECT COUNT(*) AS USERS
FROM USER_INFO
WHERE EXTRACT(YEAR FROM JOINED) = 2021
AND AGE BETWEEN 20 AND 29;
3) ๋ ์ง ๋ฒ์ ๋น๊ต
SELECT COUNT(*) AS USERS
FROM USER_INFO
WHERE JOINED BETWEEN DATE '2021-01-01' AND DATE '2021-12-31'
AND AGE BETWEEN 20 AND 29;
: ๋๋์ ๋ฐ์ดํฐ์์๋ JOINED์ ์ธ๋ฑ์ค๋ฅผ ์ถ๊ฐํ๊ณ ๋ ์ง ๋ฒ์๋ฅผ ์ง์ ๋น๊ตํ๋ ๊ฒ์ด ์ฑ๋ฅ์ ๊ฐ์ฅ ์ข๋ค๊ณ ํ๋ค
2. MYSQL
1) YEAR ํจ์ ์ฌ์ฉ
SELECT COUNT(*) AS USERS
FROM USER_INFO
WHERE YEAR(JOINED) = '2021'
AND AGE BETWEEN 20 AND 29;
๊ฒฝ๊ธฐ๋์ ์์นํ ์ํ์ฐฝ๊ณ ๋ชฉ๋ก ์ถ๋ ฅํ๊ธฐ
๋ฌธ์
FOOD_WAREHOUSE ํ ์ด๋ธ ๊ตฌ์กฐ
FOOD_WAREHOUSE ํ ์ด๋ธ์์ ๊ฒฝ๊ธฐ๋์ ์์นํ ์ฐฝ๊ณ ์ ID, ์ด๋ฆ, ์ฃผ์, ๋๋์์ค ์ฌ๋ถ๋ฅผ ์กฐํํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ์ด๋ ๋๋์์ค ์ฌ๋ถ๊ฐ NULL์ธ ๊ฒฝ์ฐ, 'N'์ผ๋ก ์ถ๋ ฅ์์ผ ์ฃผ์๊ณ ๊ฒฐ๊ณผ๋ ์ฐฝ๊ณ ID๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌํด์ฃผ์ธ์.
ํ์ด
1. ORACLE
1) NVL ์ฌ์ฉ
SELECT WAREHOUSE_ID, WAREHOUSE_NAME, ADDRESS, NVL(FREEZER_YN, 'N') AS FREEZERE_YN
FROM FOOD_WAREHOUSE
WHERE ADDRESS LIKE '๊ฒฝ๊ธฐ๋%'
ORDER BY WAREHOUSE_ID;
2. MYSQL
1) IFNULL ์ฌ์ฉ
SELECT WAREHOUSE_ID, WAREHOUSE_NAME, ADDRESS, IFNULL(FREEZER_YN, 'N') AS FREEZERE_YN
FROM FOOD_WAREHOUSE
WHERE ADDRESS LIKE '๊ฒฝ๊ธฐ๋%'
ORDER BY WAREHOUSE_ID;
3. ORACLE, MYSQL
1) COALESCE ์ฌ์ฉ
SELECT WAREHOUSE_ID, WAREHOUSE_NAME, ADDRESS, COALESCE(FREEZER_YN, 'N') AS FREEZERE_YN
FROM FOOD_WAREHOUSE
WHERE ADDRESS LIKE '๊ฒฝ๊ธฐ๋%'
ORDER BY WAREHOUSE_ID;
์กฐ๊ฑด์ ๋ถํฉํ๋ ์ค๊ณ ๊ฑฐ๋ ๋๊ธ ์กฐํํ๊ธฐ
๋ฌธ์
USED_GOODS_BOARD ํ ์ด๋ธ ๊ตฌ์กฐ USED_GOODS_REPLY ํ ์ด๋ธ ๊ตฌ์กฐ
USED_GOODS_BOARD์ USED_GOODS_REPLY ํ ์ด๋ธ์์ 2022๋ 10์์ ์์ฑ๋ ๊ฒ์๊ธ ์ ๋ชฉ, ๊ฒ์๊ธ ID, ๋๊ธ ID, ๋๊ธ ์์ฑ์ ID, ๋๊ธ ๋ด์ฉ, ๋๊ธ ์์ฑ์ผ์ ์กฐํํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ๊ฒฐ๊ณผ๋ ๋๊ธ ์์ฑ์ผ์ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌํด์ฃผ์๊ณ , ๋๊ธ ์์ฑ์ผ์ด ๊ฐ๋ค๋ฉด ๊ฒ์๊ธ ์ ๋ชฉ์ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌํด์ฃผ์ธ์.
์ฃผ์์ฌํญ
CREATE_DATE์ ํฌ๋งท์ด ์์์ ํฌ๋งท๊ณผ ์ผ์นํด์ผ ์ ๋ต์ฒ๋ฆฌ ๋ฉ๋๋ค.
ํ์ด
1. ORACLE
SELECT B.TITLE, B.BOARD_ID, R.REPLY_ID, R.WRITER_ID, R.CONTENTS,
TO_CHAR(R.CREATED_DATE,'YYYY-MM-DD') AS CREATED_DATE
FROM USED_GOODS_BOARD B
INNER JOIN USED_GOODS_REPLY R
ON B.BOARD_ID = R.BOARD_ID
WHERE TO_CHAR(B.CREATED_DATE, 'YYYY-MM') = '2022-10'
ORDER BY R.CREATED_DATE, B.TITLE;
2. MYSQL
SELECT B.TITLE, B.BOARD_ID, R.REPLY_ID, R.WRITER_ID, R.CONTENTS,
DATE_FORMAT(R.CREATED_DATE, '%Y-%m-%d') AS CREATED_DATE
FROM USED_GOODS_BOARD B
INNER JOIN USED_GOODS_REPLY R
ON B.BOARD_ID = R.BOARD_ID
WHERE DATE_FORMAT(B.CREATED_DATE, '%Y-%m') = '2022-10'
ORDER BY R.CREATED_DATE, B.TITLE;
์๋์ฐจ ๋์ฌ ๊ธฐ๋ก์์ ์ฅ๊ธฐ/๋จ๊ธฐ ๋์ฌ ๊ตฌ๋ถํ๊ธฐ
๋ฌธ์
CAR_RENTAL_COMPANY_RENTAL_HISTORY ํ ์ด๋ธ ๊ตฌ์กฐ CAR_RENTAL_COMPANY_RENTAL_HISTORY ํ ์ด๋ธ์์ ๋์ฌ ์์์ผ์ด 2022๋ 9์์ ์ํ๋ ๋์ฌ ๊ธฐ๋ก์ ๋ํด์ ๋์ฌ ๊ธฐ๊ฐ์ด 30์ผ ์ด์์ด๋ฉด '์ฅ๊ธฐ ๋์ฌ' ๊ทธ๋ ์ง ์์ผ๋ฉด '๋จ๊ธฐ ๋์ฌ' ๋ก ํ์ํ๋ ์ปฌ๋ผ(์ปฌ๋ผ๋ช : RENT_TYPE)์ ์ถ๊ฐํ์ฌ ๋์ฌ๊ธฐ๋ก์ ์ถ๋ ฅํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ๊ฒฐ๊ณผ๋ ๋์ฌ ๊ธฐ๋ก ID๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌํด์ฃผ์ธ์.
ํ์ด
1. ORACLE
SELECT HISTORY_ID, CAR_ID, TO_CHAR(START_DATE, 'YYYY-MM-DD') AS START_DATE,
TO_CHAR(END_DATE, 'YYYY-MM-DD') AS END_DATE,
CASE WHEN (END_DATE - START_DATE) + 1 >= 30 THEN '์ฅ๊ธฐ ๋์ฌ'
ELSE '๋จ๊ธฐ ๋์ฌ'
END AS RENT_TYPE
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE TO_CHAR(START_DATE, 'YYYY-MM') = '2022-09'
ORDER BY HISTORY_ID DESC;
2. MYSQL
SELECT HISTORY_ID, CAR_ID, DATE_FORMAT(START_DATE, '%Y-%m-%d') AS START_DATE,
DATE_FORMAT(END_DATE, '%Y-%m-%d') AS END_DATE,
IF(DATEDIFF(END_DATE, START_DATE) + 1 >= 30, '์ฅ๊ธฐ ๋์ฌ', '๋จ๊ธฐ ๋์ฌ') AS RENT_TYPE
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE YEAR(START_DATE) = 2022 AND MONTH(START_DATE) = 9
ORDER BY HISTORY_ID DESC;
'DataBase > Programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค ์ฝ๋ฉํ ์คํธ] SQL Lv.2 ๋ฌธ์ ํ์ด ๋ชจ์ (0) | 2024.08.14 |
---|