๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
DataBase/Programmers

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์ฝ”๋”ฉํ…Œ์ŠคํŠธ] SQL Lv.1 ๋ฌธ์ œ ํ’€์ด ๋ชจ์Œ

by YeonBu 2024. 8. 12.
728x90

 

 

Level 1. SELECT

์กฐ๊ฑด์— ๋งž๋Š” ํšŒ์›์ˆ˜ ๊ตฌํ•˜๊ธฐ

 

 

๋ฌธ์ œ

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;

 

 

 

 

Level 1. IS NULL

๊ฒฝ๊ธฐ๋„์— ์œ„์น˜ํ•œ ์‹ํ’ˆ์ฐฝ๊ณ  ๋ชฉ๋ก ์ถœ๋ ฅํ•˜๊ธฐ

 

 

๋ฌธ์ œ

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;

 

 

 

 

Level 1. SELECT

์กฐ๊ฑด์— ๋ถ€ํ•ฉํ•˜๋Š” ์ค‘๊ณ ๊ฑฐ๋ž˜ ๋Œ“๊ธ€ ์กฐํšŒํ•˜๊ธฐ

 

 

๋ฌธ์ œ

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;



 

Level 1. STRING, DATE

์ž๋™์ฐจ ๋Œ€์—ฌ ๊ธฐ๋ก์—์„œ ์žฅ๊ธฐ/๋‹จ๊ธฐ ๋Œ€์—ฌ ๊ตฌ๋ถ„ํ•˜๊ธฐ

 

 

๋ฌธ์ œ

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;

 

๋ฐ˜์‘ํ˜•