๋ฌธ์
๐ 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
'Coding Test > SQL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Programmers] ์ํ์ ๊ตฌ๋งคํ ํ์ ๋น์จ ๊ตฌํ๊ธฐ (0) | 2023.04.25 |
---|---|
Programmers] ์ ์ ์๊ฐ ๊ตฌํ๊ธฐ(2) (0) | 2023.04.19 |
Programmers] ๋์ฌ ํ์๊ฐ ๋ง์ ์๋์ฐจ๋ค์ ์๋ณ ๋์ฌ ํ์ ๊ตฌํ๊ธฐ (0) | 2023.04.16 |
Programmers] ์ ์ ๋ณ ์นดํ ๊ณ ๋ฆฌ ๋ณ ๋งค์ถ์ก ์ง๊ณํ๊ธฐ (0) | 2023.04.15 |
Programmers] ์ฃผ๋ฌธ๋์ด ๋ง์ ์์ด์คํฌ๋ฆผ๋ค ์กฐํํ๊ธฐ (0) | 2023.04.14 |