SQL ์ฝ๋ฉํ
์คํธ ๋ฌธ์ ํ์ด,
๋ก์ง ๊ตฌํ + ๋ค์ํ ํจ์๋ฅผ ๊ฐ์ ํ๋๋ก!
SQL ์ฝ๋ฉํ
์คํธ, ์ผ๋ง๋ ์ค๋นํด์ผ ํ๋์?
์ ๋ฌธ์ ํ์ด๋ ์ด๋์, ์ ํ๋ฆฐ ๊ฑด๊ฐ์?
๋ฐ์ดํฐ ์ง์ข
๊ณผ ๋ฐ์ ํ SQL
SQL์ ๋ฐฉ๋ํ ๋ฐ์ดํฐ์ ์จ์ด ์๋ ์ธ์ฌ์ดํธ์ ํธ๋ ๋๋ฅผ ์ฐพ์ ์ ์๋๋ก ๋์์ฃผ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์. ๋ด๊ฐ ์ํ๋ ๋ถ๋ถ๋ง ๋ฐ์ดํฐ์์ ์ ๋ฝ์์ ํ์ธํ ์๋ ์๊ตฌ์. SQL์ ํ์ ์ ์ธ ๋ฌธ๋ฒ์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์, SQL ๋ก์ง์ ๊ตฌํํ๊ณ ์ฌ๋ฐ๋ฅธ ํจ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ ๊ด๊ฑด์
๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ IT ํ์ฌ์ ๋ค์ด์ค๊ธฐ ์ , ํนํ ๋ฐ์ดํฐ์ ๊ด๋ จ๋ ์ง์ข
์ด๋ผ๋ฉด ์ฝ๋ฉํ
์คํธ ์ฒซ ๊ด๋ฌธ๋ถํฐ ๋ง์ฃผ์น๋ ์ธ์ด์
๋๋ค. ์
์ฌ ํ์๋ ํ์์ ์ธ ์ธ์ด์ด๊ณ ์.
ํ์ง๋ง ์ด๋์๋ถํฐ ์ค๋นํด์ผ ํ ์ง ๋ชจ๋ฅด๊ฒ ๋์? ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ฆฌ์ ๊ฐ์ ๊ธฐ๋ณธ์ ์ธ ๊ฒ๋ถํฐ ์์ํด์ผ ๋๋ ๋ถ๋ด๊ฐ์ด ํฌ๊ฒ ๋ค๊ฐ์ค๋์? ์ผ๋จ์ ์ฝ๋ฉํ
์คํธ์ฉ SQL ๋ฌธ์ ํ์ด๋ฅผ ๋ชฉํ๋ก ์์ํด ๋ด
์๋ค!
๋ถ๋ด์ ์ค์ด๊ณ , ํจ์จ์ ๋ ๋์ผ ์ ์๋๋ก.
๐โโ๏ธ ์ฝ๋ฉํ
์คํธ ์ค๋น ์ค์ธ ์ทจ์ค์
๐โโ๏ธ SQL ํ์ด๋ฅผ ์ฐธ๊ณ ํด์ ์ค๋ฌด์ ์ ์ฉํ๊ณ ์ถ์ ๋ถ
๐โโ๏ธ ์ด๋ก ๋ณด๋ค ์์ ๋ฅผ ํตํ ํ์ต์ด ๋ ์๋ฟ๋ ๋ถ
์งง์ ์๊ฐ ์์ ์ ๋ฐ์ ์ธ SQL ๋ฌธ์ ํ์ด๋ฅผ ํ ์ ์๋๋ก, ์ด ๊ฐ์์์๋ Leetcode์ SQL Easy ๋์ด๋ ๋ฌธ์ (ํ๊ธ๋ฒ์ญ ์ ๊ณต)๋ฅผ ๋ฐ๋ผ๊ฐ๋๋ค.
์ง์์ ๊ธฐ๋ฐ์ ๋ฆ์ ํ ์ค๋ ฅ์ ํค์ฐ๊ณ ์ถ์ ๋, ์ ๋ ๋ ์ด๋ ค์ด ์ด๋ก ์ ๋ณด๊ธฐ๋ณด๋ค๋ ๋จผ์ ๊ฐ๋ฒผ์ด ๋ฌธ์ ํ์ด๋ก ์์ํด์. ๊ทธ๋ฌ๋ฉด ์์ฐ์ค๋ฝ๊ฒ ๊ฐ๋
์ ๋ณต์ตํ๊ณ , ๋ฌธ์ ๋ฅผ ์ง์ ํ๋๊น ๋จธ๋ฆฌ ์์๋ ๋ ์ค๋ซ๋์ ๊ธฐ์ต์ ๋จ์์. ์ํ์ ์ด๋ก ๋ง ๊ณต๋ถํ๊ณ ๋ฌธ์ ํ์ด๋ฅผ ์ ํ๋ฉด ์ดํด๋์ง ์๋ ๊ฒ์ฒ๋ผ์.
SQL ๋ฌธ์ ๋ฅผ ํ ๋ฒ์ ๋ชป ํ์๋ค๊ณ ํด์ ๊ฑฑ์ ํ์ง ๋ง์ธ์. ๋ฌธ๋ฒ์ ์๋ ๊ฒ๊ณผ ๋ฌธ์ ๋ฅผ ํ ์ ์๋ ๊ฒ ์ฌ์ด์ ๊ฐ๊ทน์ด ์๊ธฐ ๋๋ฌธ์, ์ ๋ ์ฒ์์๋ ๋ฌธ์ ๋ฅผ ํ ๋ฒ์ ๋ชป ํ์๊ณ , ์๊ฐ๋ ์ค๋ ๊ฑธ๋ ธ์ด์. ์ ํ์ ์ตํ๋ ํ๋ จ์ด ํ์ํ๊ธฐ ๋๋ฌธ์, ์ฐจ๊ทผ์ฐจ๊ทผ ๊ฐ๋ฒผ์ด ๋ง์์ผ๋ก ๋ค๊ฐ๊ฐ ์ ์๋๋ก ์ด ๊ฐ์๋ฅผ ๊ธฐํํ์ต๋๋ค. ์ฌํด SQL ์ฝ๋ฉํ
์คํธ๋ฅผ ํฅํด ์ฒซ๊ฑธ์์ ๋ผ์ด๋ณด์ธ์!
์ด๊ธ์ ๋๋์ด์ ๋ฑ! ๋ง์ถ
SQL ์ฝ๋ฉํ
์คํธ ์ฒซ๊ฑธ์
MySQL Workbench์์ ์ง์ SQL ์กฐํ + Github ์ฐ๋์ ํตํ SQL ๋ฐฑ์
Leetcode ํ๋กฌํํธ์์ ์กฐํํ ์ ์๋ SQL๋ ํ์ ์ ์
๋๋ค. ์๊ธฐ๊ฐ ์์ฑํ SQL์ด ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅํ๋์ง ์ง์ ํ์ธํด ๋ณด๋ ๊ฒ ์ค๋ ฅ ํฅ์์ ํ์์ธ๋ฐ์. ๊ทธ๋์ ๋ฌธ์ ํ์ด์ ์์์, MySQL๋ฅผ ์ค์นํด์ Workbench์์ SQL๋ฅผ ์กฐํํ ์ ์๊ฒ ํ๊ฒฝ ์ธํ
์ ๊ฐ์ด ํด๋ณผ ๊ฑฐ์์.
๊ทธ ์ธ์๋ Github๊ณผ ์ฐ๋ํ๋ ํ๊ฒฝ ์ธํ
๋ ์งํํฉ๋๋ค. Github์ ์์ ์ ์ฝ๋๋ฅผ ์ฌ๋ ค๋์ผ๋ฉด, ์ธ์ ๋ ์ด๋์๋ ์ด๋ค ๋๋ฐ์ด์ค์ด๋ (ํธ๋ํฐ์ด๋ ๋ค๋ฅธ ์ปดํจํฐ์ด๋ ) ํ์ธํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ฐฑ์
์ฉ๋๋ก ํฐ ๋์์ด ๋ฉ๋๋ค. Github ์ฐ๋์ ์ด๋ฒ SQL๋ฟ๋ง ์๋๋ผ, ๋ค๋ฅธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์๋ ํ์ฉํ ์ ์์ผ๋ ๋งค์ฐ ์ ์ฉํ ๊ฑฐ์์!
์ธ๋ถํํ SQL ๋ฌธ์ ์ ํ + ์์ ์ ๊ณต
Leetcode์ Easy ๋์ด๋ ์ค์์๋ ์ฌ์ด ๋์ด๋์ ์ด๋ ค์ด ๋์ด๋๊ฐ ์กด์ฌํฉ๋๋ค. ์ด๋ฐ์๋ ๋ ์ฌ์ด ๋์ด๋๋ฅผ ํตํด์ ๊ฐ๋ณ๊ฒ ์์ํ ๊ฒ๋๋ค. ๋์ด๋ ์ด์ธ์๋, SQL ๋ฌธ์ ๋ค์ ์ ํ๋ณ๋ก ๋๋์์ต๋๋ค. CASE WHEN, GROUP BY์ ๊ฐ์ ๋ก์ง ๊ด๋ จ ์ ํ๋ ์๊ณ , LAG, LEAD, RANK์ ๊ฐ์ ํจ์ ๊ด๋ จ ์ ํ๋ ์์ต๋๋ค. ๋๋์ด์ง ์ ํ์ ํตํด์, ๊ฐ ์ ํ์ด ์ด๋ค ํํ๋ก ์ถ์ ๊ฐ ๋๋์ง ํ๋์ ํ์ธํ ์ ์์ด์.
๊ฐ๋
์ค๋ช
์ด ์ถ๊ฐ์ ์ผ๋ก ํ์ํ ๋ถ๋ถ์, ์๊ฐ์์ ์ํ ์ด๋ก ์์
PPT๋ ์ ๊ณต๋ฉ๋๋ค. ์์ธ๋ฌ ํผ์์ ์ถ๊ฐ ์ฐ์ตํ ์ ์๋๋ก ์ค๊ฐ์ค๊ฐ ์์ ๋ฐ ์๋ฃจ์
์ ์ ๊ณตํฉ๋๋ค. ์ฌ๋ฌ๋ถ์ SQL ์ค๋ ฅ์ ์ง์ ์ ๊ฒํด ๋ณด์ธ์!
์์ธ ์ปค๋ฆฌํ๋ผ
๊ฐ์๋ ํฌ๊ฒ 3๊ฐ์ง Part๋ก ๋๋ฉ๋๋ค.
Part 1.
๋งค์ฐ ์ฌ์ด ๋์ด๋ ๋ฌธ์ ๋ฅผ ํตํ ์
๋ฌธ
Leetcode์ Easy ๋์ด๋ ์ค์์ ๋ ์ฌ์ด ๋์ด๋ ๋ฌธ์ ๋ค์ ๋จผ์ ํ๋ฉด์, SQL ์ฝ๋ฉํ
์คํธ์ ์
๋ฌธํ ์ค๋น๋ฅผ ํฉ๋๋ค.
Part 2.
๋ก์ง ๊ด๋ จ ์ ํ
๋ก์ง ๊ด๋ จ ๋ฌธ์ ๋ฅผ ์ ํ๋ณ(์: join, group by, not in, case when ๋ฑ)๋ก ํ์ด๋ด
๋๋ค.
MySQL Workbench๋ก SQL๋ฅผ ๋จ๊ณ๋ณ๋ก ์กฐํํ ํ์, ์ต์ข
์ฟผ๋ฆฌ๋ฅผ ๋์ถํฉ๋๋ค.
Part 3.
ํจ์ ๊ด๋ จ ์ ํ
ํจ์ ๊ด๋ จ ๋ฌธ์ ๋ฅผ ์ ํ๋ณ(์: rank, dense_rank, row_number, lag, lead ๋ฑ)๋ก ํ์ด๋ด
๋๋ค.
MySQL Workbench๋ก SQL๋ฅผ ๋จ๊ณ๋ณ๋ก ์กฐํํ ํ์, ์ต์ข
์ฟผ๋ฆฌ๋ฅผ ๋์ถํฉ๋๋ค.
Q&A ๐ญ
Q. ์ด ๊ฐ์์ ์ฐจ๋ณ์ ์ด ๋ฌด์์ธ๊ฐ์?
- Leetcode ๋ฌธ์ ๋ค์ ๋์ด๋๋ณ, ์ ํ๋ณ๋ก ์ถ๊ฐ์ ์ผ๋ก ๋๋ ์ ์ ๊ณตํฉ๋๋ค.
- MySQL Workbench ์ค์น๋ฅผ ๊ฐ์ดํ๋ฉด์, ์ค๊ฐ SQL ๊ฒฐ๊ณผ๋ฌผ๋ ์ง์ ํ์ธํด ๋ณผ ์ ์๋ ํ๊ฒฝ ์ธํ
์ ์ ๊ณตํฉ๋๋ค.
- Github ์ค์น๋ฅผ ๊ฐ์ด ํ๋ฉด์, ์ด๋ฒ ๊ฐ์์ SQL๋ฟ๋ง ์๋๋ผ ์ถํ ๋ค๋ฅธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ ๋ฐฑ์
ํ ์ ์๋ ํ๊ฒฝ ์ธํ
์ ์ ๊ณตํฉ๋๋ค.
Q. ๋น์ ๊ณต์๋ ๋ค์ ์ ์๋ ๊ฐ์์ธ๊ฐ์?
์๋์, ์ด ๊ฐ์๋ ๊ธฐ๋ณธ์ ์ธ SQL์ ์๋ ๋ถ๋ค์ ๋์์ผ๋ก ํฉ๋๋ค. SQL ์ฝ๋ฉํ
์คํธ๋ฅผ ์ค๋น ์ค์ธ ์ทจ์ค์์ด๋, ๋ง ๋ฐ์ดํฐ ์ง์ข
์ผ๋ก ์ทจ์
ํ์ ๋ถ๋ค๊ป ํจ์จ์ ์ธ ๊ฐ์์
๋๋ค.
Q. ์ด ๊ฐ์๋ฅผ ๋ค ๋ฃ๊ณ ๋๋ฉด ์๊ฐ์์ธ ์ ๋ ์ด๋ ์์ค๊น์ง ์ฌ๋ผ๊ฐ ์ ์๋์?
์ค์ ์ฝ๋ฉํ
์คํธ๋ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ , SQL ๋ฌธ์ (+๊ฐ๋ Pandas DataFrame ์ฒ๋ฆฌ ๋ฌธ์ )๊ฐ ์์ฌ ์๋๋ฐ, SQL ๋ฌธ์ ๋ค์ ๊ทธ๋ ๊ฒ ์ด๋ ต์ง ์์์! (์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ์์ ๋ณ๋ณ๋ ฅ ์๋ ๋ฌธ์ ๊ฐ ๋์ต๋๋ค.)
๊ฐ์๋ฅผ ์ ๋ฐ๋ผ์ค์๊ณ , ์ฝ๋ฉํ
์คํธ ์์ ์ผ ์ด์ ์ Github์ ์ฌ๋ ค๋์ ์ฝ๋๋ฅผ ๋ณต์ต ํ์ ์ํ์ ๋ณธ๋ค๋ฉด, SQL ๋ถ๋ถ์์๋ ๋ฌด๋ฆฌ ์์ด ๋ฌธ์ ๋ฅผ ํ ์ ์๋ ์์ค์ด ๋ฉ๋๋ค.