[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์„œ์šธ์— ์œ„์น˜ํ•œ ์‹๋‹น ๋ชฉ๋ก ์ถœ๋ ฅํ•˜๊ธฐ (MySQL)

    ๋ฐ˜์‘ํ˜•

    ๐ŸŒฑ ๋ฌธ์ œ

     

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

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

    programmers.co.kr

    REST_INFO์™€ REST_REVIEW ํ…Œ์ด๋ธ”์—์„œ ์„œ์šธ์— ์œ„์น˜ํ•œ ์‹๋‹น๋“ค์˜ ์‹๋‹น ID, ์‹๋‹น ์ด๋ฆ„, ์Œ์‹ ์ข…๋ฅ˜, ์ฆ๊ฒจ์ฐพ๊ธฐ์ˆ˜, ์ฃผ์†Œ, ๋ฆฌ๋ทฐ ํ‰๊ท  ์ ์ˆ˜๋ฅผ ์กฐํšŒํ•˜๋Š” SQL๋ฌธ์„ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”. ์ด๋•Œ ๋ฆฌ๋ทฐ ํ‰๊ท ์ ์ˆ˜๋Š” ์†Œ์ˆ˜์  ์„ธ ๋ฒˆ์งธ ์ž๋ฆฌ์—์„œ ๋ฐ˜์˜ฌ๋ฆผ ํ•ด์ฃผ์‹œ๊ณ  ๊ฒฐ๊ณผ๋Š” ํ‰๊ท ์ ์ˆ˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌํ•ด์ฃผ์‹œ๊ณ , ํ‰๊ท ์ ์ˆ˜๊ฐ€ ๊ฐ™๋‹ค๋ฉด ์ฆ๊ฒจ์ฐพ๊ธฐ์ˆ˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌํ•ด์ฃผ์„ธ์š”. 

     

    ๐ŸŒฑ ํ’€์ด

    • FROM REST_INFO NATURAL JOIN REST_REVIEW
      natural join์€ ๋‘๊ฐœ์˜ ํ…Œ์ด๋ธ”์˜ ๊ณตํ†ต๋œ ์ปฌ๋Ÿผ์„ ๊ธฐ์ค€์œผ๋กœ joinํ•ด์ฃผ๊ณ , ๊ณตํ†ต๋œ ์ปฌ๋Ÿผ ์ค‘ ํ•˜๋‚˜๋งŒ ๋‚จ๊ฒจ๋‘ก๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐ™์€ ์ปฌ๋Ÿผ๋ช…์„ ๊ธฐ์ค€์œผ๋กœ joinํ•  ๋•Œ๋Š” natural join์ด ๊ฐ€์žฅ ๊ฐ„๊ฒฐํ•œ join์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. (on์ ˆ์„ ์“ฐ์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค)
      (๋งŒ์•ฝ left join์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด, ์•„๋ž˜์™€ ๊ฐ™์ด ์จ์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
      FROM REST_INFO LEFT JOIN REST_REVIEW ON REST_INFO.REST_ID = REST_REVIEW.REST_ID)
    • WHERE ADDRESS LIKE '์„œ์šธ%'
      ์„œ์šธ์— ์œ„์ฐจํ•œ ์‹๋‹น๋“ค์˜ ์ •๋ณด๋งŒ ์ถœ๋ ฅํ•ด์•ผ ํ•˜๋ฏ€๋กœ ADDRESS๊ฐ€ ์„œ์šธ๋กœ ์‹œ์ž‘ํ•˜๋Š” ์กฐ๊ฑด์„ ๊ฑธ์–ด์ค๋‹ˆ๋‹ค.
      ('์„œ์šธ%'๋ณด๋‹ค '%์„œ์šธ%'์ด ๋” ์ •ํ™•ํ•œ ์กฐ๊ฑด์ด ์•„๋‹๊นŒ ์ƒ๊ฐํ–ˆ๋Š”๋ฐ, ์ฃผ์†Œ๊ฐ€ '์ธ์ฒญ๊ด‘์—ญ์‹œ ์„œ์šธ๋นŒ๋”ฉ'์ธ ๊ฒฝ์šฐ๋ฅผ ์ƒ๊ฐํ•ด๋ณด๋ฉด '์„œ์šธ'๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ฃผ์†Œ๋งŒ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์ด ์ •ํ™•ํ•ฉ๋‹ˆ๋‹ค.)
    • GROUP BY REST_ID
      REST_ID๋กœ ๊ทธ๋ฃน๋ฐ”์ด๋ฅผ ํ•˜์—ฌ REVIEW_SCORE์˜ ํ‰๊ท ์„ ๊ตฌํ•ฉ๋‹ˆ๋‹ค.
    • ORDER_BY SCORE DESC, FAVORITES DESC
      ์ฒซ๋ฒˆ์งธ๋กœ ๋ฆฌ๋ทฐ ํ‰์ ์„ ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆฝ์ฐจ์ˆœ ์ •๋ ฌํ•˜๊ณ , ๋‘๋ฒˆ์งธ๋Š” ๋ถ๋งˆํฌํšŸ์ˆ˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค.

     

    ๐ŸŒฑ ์ฝ”๋“œ

    SELECT REST_ID, REST_NAME, FOOD_TYPE, FAVORITES, ADDRESS, ROUND(AVG(REVIEW_SCORE), 2) AS SCORE
    FROM REST_INFO
    NATURAL JOIN REST_REVIEW
    WHERE ADDRESS LIKE '์„œ์šธ%'
    GROUP BY REST_ID
    ORDER BY SCORE DESC, FAVORITES DESC
    ๋ฐ˜์‘ํ˜•

    ๋Œ“๊ธ€