SQL
Q1. SQL์ด๋ ๋ฌด์์ ๋๊น?
A1. ๊ตฌ์กฐ์ ์ง์ ์ธ์ด์ ์ค์๋ง๋ก ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ๊ณ ๊ด๋ฆฌํ๊ธฐ ์ํด ๊ณ ์๋ ์ธ์ด์ ๋๋ค. SQL์ 3๊ฐ์ง ๋ฒ์ฃผ๋ก ๋๋ ์ ์๋๋ฐ, DB์์ ๋ฐ์ดํฐ์ ๋ฐ์ดํฐ ๊ฐ์ ๊ด๊ณ๋ฅผ ์ค๋ช ํ๊ธฐ ์ํ ๋ฐ์ดํฐ ์ ์ ์ธ์ด(DDL), ๋ฐ์ดํฐ ๊ฒ์, ๋ฑ๋ก, ์ญ์ , ์์ ์ ์ํ ๋ฐ์ดํฐ ์กฐ์ ์ธ์ด(DML), ๋ง์ง๋ง์ผ๋ก ๋ฐ์ดํฐ์ ๋ํ ์ ๊ทผ์ ์ ์ดํ๊ธฐ ์ํ ๋ฐ์ดํฐ ์ ์ด ์ธ์ด(DCL)๊ฐ ์์ต๋๋ค.
Q2. ๋ฐ์ดํฐ ์ญ์ ๋ฅผ ์ํ DELETE, TRUNCATE, DROP ๋ช ๋ น์ ์ฐจ์ด์ ๋ํด ์ค๋ช ํ์ธ์.
A2. DELETE ๋ช
๋ น์ ํ
์ด๋ธ์ ์๋ ๋ฐ์ดํฐ๋ฅผ ํ ์ค์ฉ ์ ํํ์ฌ ์ผ์ผ์ด ์ญ์ ํฉ๋๋ค. TRUNCATE ๋ช
๋ น์ ์ ์ฒด ๋ฐ์ดํฐ๋ฅผ ํ ๋ฒ์ ์ญ์ ํ๋ ๋ฐฉ์์
๋๋ค. DELETE ๋ช
๋ น๊ณผ ๋ค๋ฅด๊ฒ TRUNCATE ๋ช
๋ น์ ์ต์ด ์์ฑ๋์์ ๋น์์ ์ ์ฅ๊ณต๊ฐ๋ง ๋จ๊ฒจ๋๊ณ ๋ฐ์ดํฐ๊ฐ ๋ด๊ฒจ์๋ ๊ณต๊ฐ์ ๋ฐ์ดํฐ์ ํจ๊ป ์ญ์ ๋ฉ๋๋ค. DROP ๋ช
๋ น์ ํ
์ด๋ธ ์์ฒด๋ฅผ ์์ ํ ์ญ์ ํ๋ ๋ช
๋ น์ผ๋ก ๋ฐ์ดํฐ์ ์ ์ฅ๊ณต๊ฐ, ์ธ๋ฑ์ค๊ฐ ๋ชจ๋ ์ญ์ ๋ฉ๋๋ค.
COMMIT๊ณผ ROLLBACK๊ฐ๋ฅ ์ฌ๋ถ๋ก ๋น๊ตํ์๋ฉด DELETE ๋ช
๋ น์ ์ฌ์ฉ์๊ฐ ์ง์ COMMIT์ ํด์ผ ํ๋ฉฐ COMMIT ์ด์ ์ด๋ผ๋ฉด ๋ฐ์ดํฐ ROLLBACK์ด ๊ฐ๋ฅํฉ๋๋ค. ๋ฐ๋๋ก TRUNCATE์ DROP์ ์๋์ผ๋ก COMMIT์ด ์ํ๋๊ธฐ ๋๋ฌธ์ ROLLBACK์ด ๋ถ๊ฐ๋ฅํฉ๋๋ค.
Q3. SQL์ ๋ฌธ๋ฒ ์์์ ๋ฐ๋ผ ๋ค์ ๋ช ๋ น์ด๋ค์ ์ ๋๋ก ๋์ดํด๋ณด์ธ์.
โ FROM GROUP BY SELECT WHERE ORDER BY HAVING
A3. SELECT → FROM → WHERE → GROUP BY → HAVING → ORDER BY ์์
๋๋ค.
Q4. Q3์ ๋ช ๋ น์ด๋ค์ ‘์คํ ์์’์ ๋ง๊ฒ ๋์ดํด๋ณด์ธ์.
A4. FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY ์์ ๋๋ค.
Q5. HAVING์ ๊ณผ WHERE ์ ์ ๋น๊ต·์ค๋ช ํ์ธ์.
A5. ๋ ๋ช ๋ น์ด ๋ค ์กฐ๊ฑด์ ์ง์ ํ๋ ์ฟผ๋ฆฌ์ด์ง๋ง, HAVING ์ ์ SELECT๋ฌธ์์๋ง ์ฌ์ฉ ๊ฐ๋ฅํ๋ฉฐ ์ผ๋ฐ์ ์ผ๋ก GROUP BY์ ๊ณผ ํจ๊ป ์ฌ์ฉ๋ฉ๋๋ค. ์ฆ, ์ผ๋ฐ์ ์ผ๋ก ์ ์ฒด ํ ์ด๋ธ์์ ์ฟผ๋ฆฌ๋ฅผ ์ํํ ๋์๋ WHERE์ ์ฌ์ฉํ๊ณ , GROUP BY๋ฅผ ํตํด ์ ์ฒด ํ ์ด๋ธ์ ๊ทธ๋ฃนํ ํ ๋ค ํด๋น ๊ทธ๋ฃน์์ ์ฟผ๋ฆฌ๋ฅผ ์ํํ ๋์๋ HAVING ์ ์ ์ฌ์ฉํฉ๋๋ค. ๋ง์ฝ GROUP BY์ ์ด ์ฌ์ฉ๋์ง ์์ผ๋ฉด HAVING ์ ์ WHERE์ ๊ณผ ๋์ผํ๊ฒ ๋์ํฉ๋๋ค.
JOIN
Q1. JOIN์ ๋ํด์ ์ค๋ช ํด ์ฃผ์ธ์.
A1. JOIN์ด๋ ๋ ๊ฐ ์ด์์ ํ ์ด๋ธ์ ์ฐ๊ฒฐํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ๋ ๋ฐฉ๋ฒ์ ๋งํฉ๋๋ค. JOIN ์ฐ์ฐ์ ํ๊ธฐ ์ํด์ ํ ์ด๋ธ๋ค์ด ์ ์ด๋ ํ๋์ ์ด(column)์ ๊ณต์ ํ๊ณ ์์ด์ผ ํฉ๋๋ค. ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์๋ ์ค๋ณต ๋ฐ์ดํฐ๋ฅผ ํผํ๊ธฐ ์ํด ๋ฐ์ดํฐ๋ฅผ ์ชผ๊ฐ ์ฌ๋ฌ ํ ์ด๋ธ๋ก ๋ถ๋ฆฌํด ์ ์ฅํ๋๋ฐ, ์ํ๋ ๋ฐ์ดํฐ ๊ฒ์์ ์ํด ์ฌ๋ฌ ํ ์ด๋ธ์ ๋ค์ ์กฐํฉํ ํ์๊ฐ ์์ต๋๋ค. ์ด๋ฅผ ์ํด JOIN ์ฐ์ฐ์ด ํ์ํฉ๋๋ค.
Q2. JOIN์ ์ข ๋ฅ๋ฅผ ์ค๋ช ํด๋ณด์ธ์.
A2. JOIN์ ๋ ผ๋ฆฌ์ ์กฐ์ธ๊ณผ ๋ฌผ๋ฆฌ์ ์กฐ์ธ์ผ๋ก ๊ตฌ๋ถํ ์ ์์ต๋๋ค. ๋ ผ๋ฆฌ์ ์กฐ์ธ์ ์ฌ์ฉ์๊ฐ SQL๋ฌธ์ ํตํด ํ ์ด๋ธ์ ๊ฒฐํฉํ๋ ๋ฐฉ์์ ์๋ฏธํ๊ณ , ๋ฌผ๋ฆฌ์ ์กฐ์ธ์ DBMS ์์ง์ ์ํด ๋ด๋ถ์ ์ผ๋ก ๋ฐ์ํ๋ ํ ์ด๋ธ ๊ฒฐํฉ ๋ฐฉ์์ ๋งํฉ๋๋ค. ํํ ๋งํ๋ ๋ ผ๋ฆฌ์ ์กฐ์ธ์๋ ๋ด๋ถ์กฐ์ธ, ์ธ๋ถ์กฐ์ธ, ๊ต์ฐจ์กฐ์ธ, ์ ํ์กฐ์ธ 4๊ฐ์ง ๋ฐฉ์์ด ์กด์ฌํฉ๋๋ค.
Q3. ๋ด๋ถ ์กฐ์ธ๊ณผ ์ธ๋ถ ์กฐ์ธ์ ์ฐจ์ด๋ ๋ฌด์์ธ๊ฐ์?
A3. ๋ด๋ถ ์กฐ์ธ์ ์กฐ์ธํ๊ณ ์ ํ๋ ํ ์ด๋ธ์์ ๊ณตํต๋ ์์๋ค์ ํตํด ๊ฒฐํฉํ๋ ๋ฐฉ์์ด๊ณ , ์ธ๋ถ ์กฐ์ธ์ ๋ ํ ์ด๋ธ์ ๊ณตํต ์์์ ํจ๊ป ๊ณตํต๋์ง ์์ ๋ค๋ฅธ ๋ฐ์ดํฐ๋ค๋ ํจ๊ป ํฌํจํ์ฌ ๊ฒฐํฉํ๋ ๋ฐฉ์์ ๋๋ค. ๋ด๋ถ ์กฐ์ธ์ ๋ ํ ์ด๋ธ์ ๋์ผํ ์นผ๋ผ์ด ์๋ ํ๋ง ๋ฐํํ๊ณ , ์ธ๋ถ์กฐ์ธ์ ๋์ผํ ์นผ๋ผ์ด ์๋ ํ๋ Null ๊ฐ์ ์ฑ์ ๋ฐํํฉ๋๋ค.
Q4. ์ธ๋ถ ์กฐ์ธ์ ์ข ๋ฅ์ ๋ํด ์ค๋ช ํด๋ณด์ธ์.
A4. ์ธ๋ถ ์กฐ์ธ์๋ ์ผ์ชฝ ์ธ๋ถ ์กฐ์ธ, ์ค๋ฅธ์ชฝ ์ธ๋ถ ์กฐ์ธ, ์์ ์ธ๋ถ ์กฐ์ธ 3๊ฐ์ง ์ข ๋ฅ๊ฐ ์์ต๋๋ค. ์ผ์ชฝ ์ธ๋ถ ์กฐ์ธ์ ์ผ์ชฝ ํ ์ด๋ธ์ ๋ชจ๋ ๋ฐ์ดํฐ์ ์ง์ ๋ ์นผ๋ผ์ ๊ฐ์ด ์ผ์นํ๋ ์ค๋ฅธ์ชฝ ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ๊ฒฐํฉํฉ๋๋ค. ์ฌ๊ธฐ์ ์ผ์ชฝ, ์ค๋ฅธ์ชฝ์ FROM์ ์์ ์ฌ์ฉ๋๋ ๋ ํ ์ด๋ธ์ ๊ธฐ์ค์ผ๋ก ์ผ์ชฝ, ์ค๋ฅธ์ชฝ์ ๋งํฉ๋๋ค. ๋ฐ๋๋ก ์ค๋ฅธ์ชฝ ์ธ๋ถ ์กฐ์ธ์ ์ค๋ฅธ์ชฝ ํ ์ด๋ธ์ ๋ชจ๋ ๋ฐ์ดํฐ์ ์ง์ ๋ ์นผ๋ผ์ ๊ฐ์ด ์ผ์นํ๋ ์ผ์ชฝ ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ๊ฒฐํฉํฉ๋๋ค. ์์ ์ธ๋ถ ์กฐ์ธ์ ์์ชฝ์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ์ฌ ๊ฒฐํฉํฉ๋๋ค. ์ธ๋ถ ์กฐ์ธ ์ฐ์ฐ์ ์คํํ์ฌ ํ ์ด๋ธ์ ๊ฒฐํฉํ ๋ ์ง์ ๋ ์นผ๋ผ์ ๊ฐ์ด ์๋ ๊ฒฝ์ฐ์๋ NULL์ด ์ฑ์์ง๋๋ค.
ํธ๋์ญ์
Q1, ํธ๋์ญ์ ์ด๋ ๋ฌด์์ธ๊ฐ์?
A1. ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํ๋ฅผ ๋ณํ์ํค๊ธฐ ์ํด์ ์ํํ๋ ์์ ์ ์ต์ ๋จ์๋ฅผ ๋ปํฉ๋๋ค. ์์ ์ ๋จ์๋ ์ง์์ด ํ ๋ฌธ์ฅ์ด ์๋๋ผ ์ฌ๋ฌ ๊ฐ์ ์ง์์ด๋ค์ด ๋ฌถ์ธ ๊ฒ์ ๋งํ๊ณ , ๋ ์ด์ ์ชผ๊ฐ์ง ์ ์์ต๋๋ค. ์ด ๋จ์๋งํผ DB์ ๋ช ๋ น์ ํ ๋ฒ์ ๋ฐ์ํฉ๋๋ค.
Q2. ํธ๋์ญ์ ์ ํน์ฑ์ ๋ํด ์ค๋ช ํ์ธ์.
A2. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ
์ ๊ฐ ํธ๋์ญ์
์ ์์ ์ฑ์ ์ํด ์์์ฑ, ์ผ๊ด์ฑ, ๋
๋ฆฝ์ฑ, ์๊ตฌ์ฑ(ACID)์ ๋ณด์ฅํฉ๋๋ค.
์์์ฑ(Atomicity)์ด๋ ํธ๋์ญ์
์ ์ฐ์ฐ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ชจ๋ ๋ฐ์๋๊ฑฐ๋ ์๋๋ฉด ์ ํ ๋ฐ์๋์ง ์์์ผ ํ๋ค๋ ๊ฒ, ์ผ๊ด์ฑ(Consistency)์ด๋ ํธ๋์ญ์
์ ์์
์ฒ๋ฆฌ ๊ฒฐ๊ณผ๊ฐ ํญ์ ์ผ๊ด์ฑ ์์ด์ผ ํ๋ค๋ ๊ฒ์ด๊ณ , ๋
๋ฆฝ์ฑ(Isolation)์ ๋ชจ๋ ํธ๋์ญ์
์ ๋ค๋ฅธ ํธ๋์ญ์
์ผ๋ก๋ถํฐ ๋
๋ฆฝ๋์ด์ผ ํ๋ค๋ ๊ฒ, ์๊ตฌ์ฑ(Durability)์ ํธ๋์ญ์
์ด ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋์์ ๊ฒฝ์ฐ ๊ทธ ๊ฒฐ๊ณผ๋ ์๊ตฌ์ ์ผ๋ก ๋ฐ์๋์ด์ผ ํ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
Q3. ํธ๋์ญ์ ์ฐ์ฐ์๋ ๋ฌด์์ด ์๋์?
A3. ํ๋์ ํธ๋์ญ์ ์ด ์ฑ๊ณต์ ์ผ๋ก ์คํ๋์ด ์ ์์ ์ผ๋ก ์ข ๋ฃ๋์์ ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ผ๊ด๋ ์ํ๋ฅผ ํ์ธํ๊ณ DB ๊ฐฑ์ ์ฐ์ฐ์ด ์๋ฃ๋์์์ ๋ช ์ํ๋ Commit ์ฐ์ฐ๊ณผ, ํ๋์ ํธ๋์ญ์ ์ด ๋น์ ์์ ์ผ๋ก ์ข ๋ฃ๋์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ผ๊ด์ฑ์ด ๊นจ์ง ์ํ์ผ ๋, ํธ๋์ญ์ ์ ์์์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด ํด๋น ํธ๋์ญ์ ์ ๋ชจ๋ ์ฐ์ฐ์ ์ทจ์ํ๊ณ ์คํํ๊ธฐ ์ด์ ์ ์ํ๋ก ๋๋ฆฌ๋ Rollback ์ฐ์ฐ์ด ์์ต๋๋ค.
SQLํ๋
Q1. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ตํฐ๋ง์ด์ ๋ ๋ฌด์์ ๋๊น?
A1. ์ตํฐ๋ง์ด์ ๋ ๊ฐ์ฅ ํจ์จ์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก SQL์ ์ํํ ์ต์ ์ ์ฒ๋ฆฌ ๊ฒฝ๋ก๋ฅผ ์์ฑํด์ฃผ๋ DBMS์ ํต์ฌ ์์ง์ ๋๋ค.
Q2. ์ตํฐ๋ง์ด์ ์ SQL ์ต์ ํ ๊ณผ์ ์ ๊ฐ๋จํ๊ฒ ์ค๋ช ํด๋ณด์ธ์.
A2. ๊ฐ์ฅ ๋จผ์ ์ตํฐ๋ง์ด์ ๋ ์ฌ์ฉ์๊ฐ ์์ฑํ SQL ์ฟผ๋ฆฌ๋ฅผ ์ํํ๊ธฐ ์ํด ์คํ๊ณํ ํ๋ณด๊ตฐ์ ์ฐพ์ต๋๋ค. ๊ทธ๋ค์ ํ๋ณด๊ตฐ์ ๋ค์ด์จ ์คํ๊ณํ๋ค์ ์์ ๋น์ฉ์ ๊ณ์ฐํฉ๋๋ค. ์ต์ข ์ ์ผ๋ก ์ตํฐ๋ง์ด์ ๋ ์์ ๋น์ฉ๋ค์ ๋น๊ตํ์ฌ ์ต์ ๋น์ฉ์ ๊ฐ๋ ํ๋๋ฅผ ์ ํํฉ๋๋ค.
SQL vs NoSQL
Q1. NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํด ์ค๋ช ํด๋ณด์ธ์.
A1. ๋น๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ผ๊ณ ๋ ๋ถ๋ฆฌ๋ NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ SQL๋ง์ ์ฌ์ฉํ์ง ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์๋ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํฉ๋๋ค. ๋ฐ์ดํฐ ๋ชจ๋ธ์ ๋ฐ๋ผ ๋ค์ํ NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ํ์ด ์กด์ฌํ๋๋ฐ, JSON ๊ฐ์ฒด์ ๋น์ทํ ๋ฌธ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ฌธ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์์ฑ์ ํค-๊ฐ์ ์์ผ๋ก ๋ํ๋ด๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ key-value ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฑ์ด ์์ต๋๋ค.
Q2. RDBMS์ ๋น๊ตํ์ ๋ NoSQL์ ์ฅ์ ์ ๋ํด ์ค๋ช ํด๋ณด์ธ์.
A2. DB์ ์ ์ฅ ์ ์คํค๋ง์ ๋ง๊ฒ ์ ๋ ฅํด์ผ ํ๋ RDBMS์ ๋ฌ๋ฆฌ NoSQL์ ๊ฐ๋ณ์ ์ธ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์๊ธฐ ๋๋ฌธ์ ๋์ ์ ์ฐ์ฑ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ๋ํ JOIN๊ณผ ๊ฐ์ ๋ณต์กํ ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ง ์์๋ ๋๊ธฐ ๋๋ฌธ์ ์ฟผ๋ฆฌ ํ๋ก์ธ์ฑ์ด ๋จ์ํ๋์ด ๋์ฉ๋ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ์ฑ๋ฅ์ด ํฅ์๋ฉ๋๋ค.
'๐ CS > ๐ DB' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[DB] Persistence Framework (SQL Mapper vs ORM) (6) | 2022.09.26 |
---|---|
[DB] ํํฐ์ ๋ (6) | 2022.09.05 |
[DB] SQL (0) | 2022.09.01 |
[DB] ํธ๋์ญ์ (๊ฐ๋ /ํน์ฑ/์ฐ์ฐ/์ํ) (6) | 2022.08.22 |
[DB] ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ธฐ์ด / ๊ด๊ณํ๋ฐ์ดํฐ๋ฒ ์ด์ค / key (8) | 2022.08.07 |