๋ฌธ์ œ

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

 

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

 

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

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

programmers.co.kr

 

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

USED_GOODS_BOARD์™€ USED_GOODS_FILE ํ…Œ์ด๋ธ”์—์„œ ์กฐํšŒ์ˆ˜๊ฐ€ ๊ฐ€์žฅ ๋†’์€ ์ค‘๊ณ ๊ฑฐ๋ž˜ ๊ฒŒ์‹œ๋ฌผ์— ๋Œ€ํ•œ ์ฒจ๋ถ€ํŒŒ์ผ ๊ฒฝ๋กœ๋ฅผ ์กฐํšŒํ•˜๋Š” SQL๋ฌธ์„ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”. ์ฒจ๋ถ€ํŒŒ์ผ ๊ฒฝ๋กœ๋Š” FILE ID๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌํ•ด์ฃผ์„ธ์š”. ๊ธฐ๋ณธ์ ์ธ ํŒŒ์ผ๊ฒฝ๋กœ๋Š” /home/grep/src/ ์ด๋ฉฐ, ๊ฒŒ์‹œ๊ธ€ ID๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ๊ตฌ๋ถ„๋˜๊ณ , ํŒŒ์ผ์ด๋ฆ„์€ ํŒŒ์ผ ID, ํŒŒ์ผ ์ด๋ฆ„, ํŒŒ์ผ ํ™•์žฅ์ž๋กœ ๊ตฌ์„ฑ๋˜๋„๋ก ์ถœ๋ ฅํ•ด์ฃผ์„ธ์š”. ์กฐํšŒ์ˆ˜๊ฐ€ ๊ฐ€์žฅ ๋†’์€ ๊ฒŒ์‹œ๋ฌผ์€ ํ•˜๋‚˜๋งŒ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

 

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

๋‹ค์Œ์€ ์ค‘๊ณ ๊ฑฐ๋ž˜ ๊ฒŒ์‹œํŒ ์ •๋ณด๋ฅผ ๋‹ด์€ USED_GOODS_BOARD ํ…Œ์ด๋ธ”๊ณผ ์ค‘๊ณ ๊ฑฐ๋ž˜ ๊ฒŒ์‹œํŒ ์ฒจ๋ถ€ํŒŒ์ผ ์ •๋ณด๋ฅผ ๋‹ด์€ USED_GOODS_FILE ํ…Œ์ด๋ธ”์ž…๋‹ˆ๋‹ค. USED_GOODS_BOARD ํ…Œ์ด๋ธ”์€ ๋‹ค์Œ๊ณผ ๊ฐ™์œผ๋ฉฐ BOARD_ID, WRITER_ID, TITLE, CONTENTS, PRICE, CREATED_DATE, STATUS, VIEWS์€ ๊ฒŒ์‹œ๊ธ€ ID, ์ž‘์„ฑ์ž ID, ๊ฒŒ์‹œ๊ธ€ ์ œ๋ชฉ, ๊ฒŒ์‹œ๊ธ€ ๋‚ด์šฉ, ๊ฐ€๊ฒฉ, ์ž‘์„ฑ์ผ, ๊ฑฐ๋ž˜์ƒํƒœ, ์กฐํšŒ์ˆ˜๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

BOARD_ID VARCHAR(5) FALSE
WRITER_ID VARCHAR(50) FALSE
TITLE VARCHAR(100) FALSE
CONTENTS VARCHAR(1000) FALSE
PRICE NUMBER FALSE
CREATED_DATE DATE FALSE
STATUS VARCHAR(10) FALSE
VIEWS NUMBER FALSE

USED_GOODS_FILE ํ…Œ์ด๋ธ”์€ ๋‹ค์Œ๊ณผ ๊ฐ™์œผ๋ฉฐ FILE_ID, FILE_EXT, FILE_NAME, BOARD_ID๋Š” ๊ฐ๊ฐ ํŒŒ์ผ ID, ํŒŒ์ผ ํ™•์žฅ์ž, ํŒŒ์ผ ์ด๋ฆ„, ๊ฒŒ์‹œ๊ธ€ ID๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

FILE_ID VARCHAR(10) FALSE
FILE_EXT VARCHAR(5) FALSE
FILE_NAME VARCHAR(256) FALSE
BOARD_ID VARCHAR(10) FALSE

 


ํ’€์ด

์ถ”์ธก) 

๊ฐ€์žฅ ์กฐํšŒ์ˆ˜๊ฐ€ ๋งŽ์ด ๋‚˜์˜ค๋Š” ๊ธ€ ID๋ฅผ ๋จผ์ € ๊ณจ๋ผ์˜ค๋Š” ๊ฒŒ ๊ณต์ˆ˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์„ ๋“ฏ ํ•˜๋‹ค.

๊ธ€์ด๋ž‘ ์ฒจ๋ถ€ํŒŒ์ผ ๋จผ์ € ๋งค์นญ ์‹œํ‚ค๋ฉด ์ผ์ด ์ปค์ง€๋‹ˆ๊นŒ.

๊ทธ๋ž˜์„œ ์กฐํšŒ์ˆ˜ ์ตœ๋Œ€๊ฐ’์„ ์กฐํšŒํ•˜๊ณ  ์ด์— ํ•ด๋‹นํ•˜๋Š” ๊ธ€ ID๋ฅผ ์ฐพ์•„ ๊ทธ์— ํ•ด๋‹นํ•˜๋Š” ํŒŒ์ผ๋“ค์„ ์ฐพ๋Š”๋‹ค.

๊ทธ๋ฆฌ๊ณ  FILE_PATH๊ฐ€ ํŒŒ์ผ์ฒจ๋ถ€ ํ…Œ์ด๋ธ”์˜ ์ปฌ๋Ÿผ๋“ค์„ ์กฐํ•ฉํ•ด์„œ ํŒŒ์ผ๊ฒฝ๋กœ๋กœ ๋งŒ๋“ค์–ด ์ถœ๋ ฅํ•˜๋ฉด ๋ ๋“ฏํ•˜๋‹ค. 

 

์ฟผ๋ฆฌ) 

* 1์ฐจ) ์„œ๋ธŒ์ฟผ๋ฆฌ ์ด์šฉ

SELECT CONCAT('/home/grep/src/', BOARD_ID, '/', FILE_ID, FILE_NAME, FILE_EXT) AS FILE_PATH
FROM USED_GOODS_FILE 
WHERE BOARD_ID IN (SELECT BOARD_ID
                    FROM USED_GOODS_BOARD
                    WHERE VIEWS IN (SELECT MAX(VIEWS)
                                    FROM USED_GOODS_BOARD))
ORDER BY FILE_ID DESC

* 2์ฐจ) JOIN ์ด์šฉ

SELECT CONCAT('/home/grep/src/', BOARD.BOARD_ID, '/', FILE.FILE_ID, FILE.FILE_NAME, FILE.FILE_EXT) AS FILE_PATH
FROM USED_GOODS_FILE AS FILE
LEFT JOIN USED_GOODS_BOARD AS BOARD
ON FILE.BOARD_ID = BOARD.BOARD_ID
WHERE BOARD.VIEWS IN (SELECT MAX(VIEWS) 
               		  FROM USED_GOODS_BOARD)
ORDER BY FILE.FILE_ID DESC

 

 

๋ฆฌ๋ทฐ) 

์กฐ๊ธˆ ๊ถ๊ธˆํ•œ๊ฒŒ ์„œ๋ธŒ์ฟผ๋ฆฌ 2๋ฒˆ์œผ๋กœ ํ•„ํ„ฐ๋งํ•˜๋Š”๊ฑฐ๋ž‘..

BOARD๋ž‘ FILE์ด๋ž‘ ๋งค์นญํ•˜๊ณ  WHERE๋กœ ์ตœ๋Œ€๊ฐ’ ๊ฑธ๋Ÿฌ๋‚ด๋ฉด ๋ญ๊ฐ€ ๋” ์„ฑ๋Šฅ์ ์œผ๋กœ ์ข‹์€๊ฑธ๊นŒ?

 

์ฟผ๋ฆฌ๋ฌธ ์‹คํ–‰ ์ˆœ์„œ๊ฐ€ ์•„๋ž˜์™€ ๊ฐ™์€ ๊ฑธ๋กœ ์•„๋Š”๋ฐ 

from [ > on > join ] > where > group by [ > having ] > select > order by > limit

 

WHERE๋กœ ํ•„ํ„ฐ๋ง ํ•˜๊ธฐ ์ „์— ONํ•˜๊ณ  JOINํ•ด์„œ ๋‘ ํ…Œ์ด๋ธ”์„ ๋งค์นญํ•˜๋ฉด

์„œ๋ธŒ์ฟผ๋ฆฌ๋กœ ์กฐํšŒ๊ธ€ ์•„์ด๋”” ํ•˜๋‚˜ ์ฐพ์•„์˜ค๋Š” ๊ฑฐ ๋ณด๋‹ค ๋” ๊ณต์ˆ˜๊ฐ€ ๋“ค๊ฑฐ ๊ฐ™์€๋ฐ.. 

 

๋‘˜๋‹ค ์‹คํ–‰๊ณ„ํš์ด ์™œ ๊ฐ™์Œ?!?!

 

๋ผ๋Š” ๋‚ด์ƒ๊ฐ๊ณผ ๋‹ค๋ฅด๊ฒŒ ์ฐพ์•„๋ณด๋‹ˆ ์ถฉ๊ฒฉ์ ์ธ ๊ฒฐ๊ณผ๊ฐ€!

 

์„œ๋ธŒ์ฟผ๋ฆฌ์˜ ์„ฑ๋Šฅ์  ๋ฌธ์ œ๋Š” ์„œ๋ธŒ์ฟผ๋ฆฌ์™€ ์ปฌ๋Ÿผ์„ ๋น„๊ตํ• ๋•Œ๋งˆ๋‹ค ๋‚ด๋ถ€ ์ฟผ๋ฆฌ๊ฐ€ ์‹คํ–‰๋œ๋‹ค๋Š” ์ ์ด๋‹ค. (๐Ÿ˜งโ€ผ๏ธ)

์ฟผ๋ฆฌ๋ฅผ ๋ฐ˜๋ณตํ•ด์„œ ๋‚ ๋ฆฌ๋‹ˆ ์„ฑ๋Šฅ์ด ๋‚ฎ์•„์งˆ ์ˆ˜ ๋ฐ–์— ์—†๊ณ ,

๊ทธ๋Ÿฐ ๋ฌธ์ œ๋•Œ๋ฌธ์— ์ตœ๊ทผ MySQL์€ ์‚ฌ์šฉ์ž๊ฐ€ ์„œ๋ธŒ์ฟผ๋ฆฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ž์ฒด์ ์œผ๋กœ ์กฐ์ธ๋ฌธ์œผ๋กœ ๋ณ€ํ™˜์‹œ์ผœ ์‹คํ–‰ํ•˜๋„๋ก ์—…๋ฐ์ดํŠธ๋˜์–ด ๊ฒฐ๊ตญ ๋‘˜๋‹ค ์‹คํ–‰๊ณ„ํš์ด ๊ฐ™์•˜๋˜ ๊ฒƒ. ๋‚ด๋ถ€์ ์œผ๋กœ ๋ณ€ํ™˜ํ•ด์ค˜๋„ ๊ผญ ํ•„์š”ํ•œ ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ์„œ๋ธŒ์ฟผ๋ฆฌ๋Š” ๋‚จ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹๋‹ค๊ณ  ํ•œ๋‹ค. ์ฃผ์˜ํ•˜๋„๋ก!!!

 


์ฐธ๊ณ ์ž๋ฃŒ

 

[MYSQL] ๐Ÿ“š JOIN๊ณผ ์„œ๋ธŒ์ฟผ๋ฆฌ ์ฐจ์ด ๋ฐ ๋ณ€ํ™˜ ๐Ÿ’ฏ ์ •๋ฆฌ

์กฐ์ธ(JOIN) vs ์„œ๋ธŒ์ฟผ๋ฆฌ(Sub Query) ์กฐ์ธ๊ณผ ์„œ๋ธŒ์ฟผ๋ฆฌ๋Š” ๋•Œ๋กœ ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค. ์ƒํ™ฉ์— ๋”ฐ๋ผ ์กฐ์ธ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ์ข‹์„ ๋•Œ๋„ ์žˆ๊ณ , ๋ฐ˜๋ฉด์— ์„œ๋ธŒ ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์„ ๋•Œ๋„ ์žˆ๋‹ค.

inpa.tistory.com

 

+ Recent posts