๋ฌธ์ œ

๐Ÿ“Œ MySQL ๋กœ ํ’€์ด

 

๐Ÿ“Œ ๋ฌธ์ œ ๋งํฌ :

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

 

๐Ÿ“Œ ๋ฌธ์ œ ์„ค๋ช… :

CAR_RENTAL_COMPANY_RENTAL_HISTORY ํ…Œ์ด๋ธ”์—์„œ 2022๋…„ 10์›” 16์ผ์— ๋Œ€์—ฌ ์ค‘์ธ ์ž๋™์ฐจ์ธ ๊ฒฝ์šฐ '๋Œ€์—ฌ์ค‘' ์ด๋ผ๊ณ  ํ‘œ์‹œํ•˜๊ณ , ๋Œ€์—ฌ ์ค‘์ด์ง€ ์•Š์€ ์ž๋™์ฐจ์ธ ๊ฒฝ์šฐ '๋Œ€์—ฌ ๊ฐ€๋Šฅ'์„ ํ‘œ์‹œํ•˜๋Š” ์ปฌ๋Ÿผ(์ปฌ๋Ÿผ๋ช…: AVAILABILITY)์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์ž๋™์ฐจ ID์™€ AVAILABILITY ๋ฆฌ์ŠคํŠธ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” SQL๋ฌธ์„ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”. ์ด๋•Œ ๋ฐ˜๋‚ฉ ๋‚ ์งœ๊ฐ€ 2022๋…„ 10์›” 16์ผ์ธ ๊ฒฝ์šฐ์—๋„ '๋Œ€์—ฌ์ค‘'์œผ๋กœ ํ‘œ์‹œํ•ด์ฃผ์‹œ๊ณ  ๊ฒฐ๊ณผ๋Š” ์ž๋™์ฐจ ID๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌํ•ด์ฃผ์„ธ์š”.

 

๐Ÿ“Œ ํ…Œ์ด๋ธ” :

๋‹ค์Œ์€ ์–ด๋Š ์ž๋™์ฐจ ๋Œ€์—ฌ ํšŒ์‚ฌ์˜ ์ž๋™์ฐจ ๋Œ€์—ฌ ๊ธฐ๋ก ์ •๋ณด๋ฅผ ๋‹ด์€ CAR_RENTAL_COMPANY_RENTAL_HISTORY ํ…Œ์ด๋ธ”์ž…๋‹ˆ๋‹ค. CAR_RENTAL_COMPANY_RENTAL_HISTORY ํ…Œ์ด๋ธ”์€ ์•„๋ž˜์™€ ๊ฐ™์€ ๊ตฌ์กฐ๋กœ ๋˜์–ด์žˆ์œผ๋ฉฐ, HISTORY_ID, CAR_ID, START_DATE, END_DATE ๋Š” ๊ฐ๊ฐ ์ž๋™์ฐจ ๋Œ€์—ฌ ๊ธฐ๋ก ID, ์ž๋™์ฐจ ID, ๋Œ€์—ฌ ์‹œ์ž‘์ผ, ๋Œ€์—ฌ ์ข…๋ฃŒ์ผ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

HISTORY_ID INTEGER FALSE
CAR_ID INTEGER FALSE
START_DATE DATE FALSE
END_DATE DATE FALSE

 

 


ํ’€์ด

์ฟผ๋ฆฌ) 

SELECT 
    C.CAR_ID,
    CASE WHEN A.CAR_ID IS NULL THEN '๋Œ€์—ฌ ๊ฐ€๋Šฅ' ELSE '๋Œ€์—ฌ์ค‘' END AS AVAILABILITY
FROM (SELECT DISTINCT CAR_ID 
      FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY) AS C
LEFT OUTER JOIN 
    (SELECT DISTINCT CAR_ID
    FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
    WHERE '2022-10-16' BETWEEN START_DATE AND END_DATE) AS A
ON C.CAR_ID = A.CAR_ID
ORDER BY C.CAR_ID DESC

 

๋ฆฌ๋ทฐ) 

ํŠน์ • ๋‚ ์งœ๊ฐ€ ์–ด๋Š ๋‚ ์งœ ์‚ฌ์ด์— ์žˆ๋Š”์ง€ ์•Œ์•„๋ณด๋ ค๋ฉด BETWEEN์ด๋‚˜ ๋ถ€๋“ฑํ˜ธ๋ฅผ ์จ์•ผํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ๋ณด๋‹ค ๋” ์ค‘์š”ํ–ˆ๋˜ ๊ฑด

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์–ด๋–ค์‹์œผ๋กœ ์Œ“์—ฌ์žˆ๋Š”์ง€ ์ž˜ ํŒŒ์•…ํ•˜์—ฌ์•ผ ํ•œ๋‹ค๋Š” ๊ฑธ ์•Œ๋ ค์ค€ ๋ฌธ์ œ์˜€๋‹ค.

๋ ŒํŠธ ๋‚ด์—ญ์„ ์Œ“์•„๋†“์€ ํ…Œ์ด๋ธ”์ด๋ผ ๊ฐ™์€ car_id๊ฐ€ ๋ ŒํŠธ๋˜์–ด์ง„ ๋‚ด์—ญ์ด ์—ฌ๋Ÿฟ ์กด์žฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์ƒ๊ฐํ–ˆ์–ด์•ผํ–ˆ๋‹ค.

 

๊ทธ๋ž˜์„œ distinct๋กœ ์ค‘๋ณต์„ ์ œ๊ฑฐํ•œ C์™€ 2022-10-16์ผ์— ๋Œ€์—ฌ์ค‘์ธ car_id๋งŒ ์งˆ์˜ํ•˜์—ฌ ๋ฆฌํ„ดํ•œ ํ…Œ์ด๋ธ”์„ joinํ•˜๋Š”๋ฐ

์ด๋•Œ ๋ชจ๋“  car_id์— ๋Œ€ํ•ด ๋Œ€์—ฌ์ค‘์ธ car_id๊ฐ€ 1:1 ๋งค์นญ์ด ์•ˆ๋˜๋ฏ€๋กœ ๋ชจ๋“  car_id๋ฅผ ๊ฐ€์ง„ C๋ฅผ ๊ธฐ์ค€์œผ๋กœ left outer joinํ•˜์˜€๊ณ ,

A์˜ car_id๊ฐ€ null์ด๋ฉด ๋Œ€์—ฌ๊ฐ€๋Šฅ ์•„๋‹ˆ๋ฉด ๋Œ€์—ฌ์ค‘์œผ๋กœ ๋ฐ˜ํ™˜ํ•ด์ค€๋‹ค.

+ Recent posts