SQL์ ํ์ธต ๋ SQL๋ต๊ฒ! โจ
์ค๋ฌด์ ํตํ๋ ๊ณ ๊ธ ์ฟผ๋ฆฌ ๋ฅ๋ ฅ์ ๊ธธ๋ฌ๋๋ ค์.
์ฟผ๋ฆฌ ์ด์,
์ ํด๊ฒฐํ ์ ์๋์?
๋ค์์ ์ค๋ฌด์์ ๊ณตํต์ ์ธ ์ค์ ์ฟผ๋ฆฌ ์ด์๋ค์
๋๋ค.
- ๋งค๊ฐ๋ณ์๋ก ๋ฐฐ์ด(ํ
์ด๋ธ) ๋ฐ์ดํฐ๋ฅผ ๋๊ธฐ๋ ๋ค์ํ ๋ฐฉ๋ฒ๋ค
- TOP ๋๋ฅ ์ฒ๋ฆฌ๊ฐ ์๋์ด ์๋ ๊ฒฝ์ฐ์ ์ด์
- Row-to-Col ์์
์ ์ํ STRING_AGG()
- ์ด ๊ฐ์ผ๋ก ํ์ ๋ง๋๋ VALUES()
- Composable DML๋ก UPDATE+SELECT+INSERT๋ฅผ ํ ๋ฐฉ์
- INNER JOIN์ธ๋ฐ, OUTER JOIN์ ์๋ชป ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
- ๊ต์งํฉ/ํฉ์งํฉ/์ฐจ์งํฉ์ ์ํ์ ํน์ฑ๊ณผ SQL์ ์ฐจ์ด์
- IN๊ณผ NOT IN์ ์ค์ํ ์ฐจ์ด์
- CTE(๊ณตํต ํ
์ด๋ธ ์)์ ํต์ฌ ๊ธฐ๋ฅ
- ์ง๊ณ ๋ฐ ํต๊ณ ํจ์์ OVER() ํ์ฅ ๊ธฐ๋ฅ
- ์์น ํจ์์ ๋ถํฌ ํจ์๋ฅผ ์ด์ฉํ ์๊ณ์ด ๋ฐ ๋ค์ํ ํต๊ณ ์ฒ๋ฆฌ
- Paging ๊ธฐ๋ณธ ์ฟผ๋ฆฌ ๊ธฐ์ค ๋ค์ํ ๊ตฌํ ๋ฐฉ๋ฒ๋ค
- GROUPING SETS๋ฅผ ํ์ฉํ ๋ค์ํ ์๊ณ ๋ฐ ์ด๊ณ ์ฒ๋ฆฌ
- ๊ทธ ์ธ SQL ์ฟผ๋ฆฌ๋ฅผ SQL๋ต๊ฒ ์ฌ์ฉํ๊ธฐ ์ํ ์ค์ ๊ฐ๋
๋ค ์ดํด
DB ์ปจ์คํ
, ๊ธฐ์ ์ง์, ๊ฐ์ ๋ฑ์ผ๋ก ์ฌ๋ฌ ๊ธฐ์
๋ค์์ ๊ฐ๋ฐ๋ ์ฟผ๋ฆฌ๋ค์ ๋ณด๋ฉด SQL ์ธ์ด์ ํน์ฑ์ด๋ ๊ฐ๋
์ ์ถฉ๋ถํ ์ดํดํ์ง ๋ชปํด์ ์ ์ ํ์ง ๋ชปํ๊ฒ ์์ฑ๋ ์ฟผ๋ฆฌ๋ค, ๋จ์ํ๊ณ ํธ๋ฆฌํ ๊ณ ๊ธ ์ฟผ๋ฆฌ๋ฅผ ๋ชฐ๋ผ์ ์ด๋ ต๊ฒ ์์ฑ๋ ์ฟผ๋ฆฌ๋ค ๊ทธ๋ฆฌ๊ณ SQL Server์์ ์ ๊ณตํ๋ ๋ค์ํ ๊ธฐ๋ฅ๋ค์ ์์ง ๋ชปํด์ ์ ํ๋ ๋ฐฉ๋ฒ์ผ๋ก ํ๋ค๊ฒ ๊ตฌํํ ๊ฒฝ์ฐ๋ค์ ๋ง์ด ๋ณด๊ฒ ๋ฉ๋๋ค.
๊ต์ก์ ํตํด ์ด๋ฌํ ์ฟผ๋ฆฌ ๋ฅ๋ ฅ์ ํ ๋จ๊ณ ๋ ๋ ๋ฒจ ์
ํ๋๋ฐ ๋์์ ์ฃผ๊ณ ์ถ์ต๋๋ค.
SQL Server ์ปจ์คํดํธ์
SQL ๊ณ ๊ธ ์ฟผ๋ฆฌ ๋น๊ฒฐ!
- โ
SQL ์ฟผ๋ฆฌ์ ๊ทผ๋ณธ์ ์ธ ํน์ฑ ์ดํด
- โ
์งํฉ ๋ฐ ๊ด๊ณ ์ฐ์ฐ์์ ์ฌ๋ฐ๋ฅธ ์ฌ์ฉ
- โ
๊ณ ๊ธ SQL ์ฟผ๋ฆฌ ๊ธฐ๋ฅ ๋ฐ ์ค๋ฌด ํ์ฉ๋ฒ ํ์ต
- โ
์ต์ ๋ฒ์ ์ SQL ๊ธฐ๋ฅ ํ์ต ๋ฐ ํ์ฉ
๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ์ป๊ธฐ ์ํด ๋ง๊ฒ๋ ์์ญ ๊ฐ์ง์ ๋ค๋ฅธ ๊ตฌํ์ด ๊ฐ๋ฅํ ๊ฒ์ด SQL์ธ์ด์ ํน์ง์
๋๋ค. SQL Server์์ ์ ๊ณตํ๋ SQL์ ๋ณด๋ค ์ ๋ฌธ์ ์ธ ๊ธฐ๋ฅ๋ค์ ํ์ตํ๊ณ ์ด๋ฅผ ํ์ฉํ ์ ์๋ ๋ค์ํ ์์ฉ ๋ฐฉ๋ฒ๋ค๊ณผ ์์ ๋ค์ ์๊ฐํ๊ณ ๊ณผ์ ๋ฅผ ํ์ตํฉ๋๋ค.
ํนํ ๋ณธ ๊ณผ์ ์์๋ ์ค๋ฌด์์ ๊ณตํต์ ์ผ๋ก ๋์ค๋ ์ค์ ์ฟผ๋ฆฌ ์ด์๋ค๊ณผ ์๋ชป ์ฌ์ฉ๋๋ ๋ฐฉ๋ฒ๋ค์ ์ด์ด ์ฌ๋ฌ ๊ฐ์ง ํด๊ฒฐ ๋ฐฉ์๋ค์ ๋ค๋ฃน๋๋ค. ์ด๋ฅผ ํตํด ํ์
์์ ์๊ตฌํ๋ ๋ณต์กํ๊ณ ๋ค์ํ ์
๋ฌด์ฉ ์ฟผ๋ฆฌ๋ฅผ ๊ตฌํํ๋ ๋ฅ๋ ฅ๊ณผ ๋น ๋ฅธ ์๊ฐ ์์ ์
๋ฌด ์๊ตฌ ์ฌํญ๋ค์ ์ฒ๋ฆฌํ๋๋ฐ ํ์ํ ์์ฐ์ฑ ํฅ์์ ๋์์ ์ป์ ์ ์์ต๋๋ค.
๋๋ถ์ด SQL Server ์ต์ ๋ฒ์ ์์ ์ ๊ณตํ๋ ์๋ก์ด ๊ตฌ๋ฌธ, ํจ์, ๋ช
๋ น๋ค์ ํ์ต์ ํตํด ์
๊ทธ๋ ์ด๋๋ ์์คํ
๊ณผ SQL Server๋ฅผ ๋ณด๋ค ์ ํ์ฉํ ์ ์๋๋ก ๋์์ ์ค๋๋ค.
๋๊ฐ ๋ค์ผ๋ฉด ์ข์๊น์?
SQL Server ๊ธฐ๋ฐ ์ค๋ฌด์, ์ฌ์ฉ์๋ผ๋ฉด ๋๊ตฌ๋ ๋ค์ ์ ์์ต๋๋ค.
SQL Server ๊ธฐ๋ฐ
์ด~์ค๊ธ ๊ฐ๋ฐ์
SQL Server ๊ธฐ๋ฐ
์๋ฃจ์
๊ฐ๋ฐ์
SQL Server ๊ธฐ๋ฐ
์ด~์ค๊ธ DB ๊ด๋ฆฌ์
๋ฐ์ดํฐ ์์ง๋์ด,
๋ฐ์ดํฐ ๋ถ์๊ฐ
์ด๋ฐ ๊ณ ๋ฏผ์ด ์์๋ค๋ฉด ์ฃผ๋ชฉ!
โSQL Server ์ฌ์ฉ ์ด๋ณด์ธ๋ฐ ์๊ฐ์ ํด๋ ๋ ๊น์?โ
๐ SQL ๊ธฐ์ด๋ ์๊ณ ์์ด์ผ ๋ด์ฉ์ ์ดํดํ๊ณ ๋ฐ๋ผํ๋๋ฐ ์์ํ์ค ๊ฒ๋๋ค, ํน์ ์ค๊ฐ์ ์ ๋ชจ๋ฅด๋ ๋ด์ฉ์ด ์๋ค๋ฉด ํด๋น ๊ตฌ๋ฌธ/๋ช
๋ น/๋ฌธ๋ฒ์ ๋ํด์ ํ์ต์ ํ์๊ณ ๋ค์ ๋ค์ผ์๋ฉด ์ดํด์ ๋์์ด ๋์ค ๊ฒ๋๋ค. ํน์ Q&A๋ฅผ ์ด์ฉํ์
๋ ๋๊ฒ ์ฃ :D
โ์ด ๊ต์ก์ ํตํด ๋ ์ฑ๋ฅ ์ข์ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๋๋ฐ ๋์์ด ๋ ๊น์?โ
๐ ์ด๋ค ์ฟผ๋ฆฌ๊ฐ ์ฑ๋ฅ์ ๋ ์ข์ ์ง๋ฅผ ๋ค๋ฃจ์ง ์์ต๋๋ค๋ง, ์ค์ โ์ฟผ๋ฆฌ ํ๋โ ๊ณผ์ ์ ์ ์ ๊ณผ์ ์ผ๋ก ํ์ํ ๊ฒ์ด ์ด ๊ณ ๊ธ SQL ๊ณผ์ ์
๋๋ค. ์๋ํ๋ฉด ์ฟผ๋ฆฌ ์ฑ๋ฅ ํ๋์ ์ํด์ ๋ค์ํ ๊ณ ๊ธ ์ฟผ๋ฆฌ ๊ตฌ์ฌ ๋ฅ๋ ฅ์ด ์๊ตฌ๋๊ธฐ ๋๋ฌธ์
๋๋ค.
โSQL Server๋ ์ต์ ๋ฒ์ ์ ์ฌ์ฉํ๋๋ฐ ์ค๋ฌด ์ฟผ๋ฆฌ๋ ์ฌ์ ํ ์๋ ๊ธฐ๋ฅ์ ์ฐ๊ณ ์์ด์.โ
๐ ๋ค, ์ด ๊ณผ์ ์์ ๊ฐ ์ฃผ์ ๋ณ๋ก ์ต์ ๊ธฐ๋ฅ์ ํ์ฉํ๋ ๋ด์ฉ๋ค๋ ์๊ฐํ๋ฏ๋ก ๊ต์ก์ ํตํด ๋ ์ต์ ๊ธฐ๋ฅ์ผ๋ก ์ค๋ฌด ์ฟผ๋ฆฌ๋ฅผ ๊ฐ์ ํ๋๋ฐ ๋์์ด ๋์ค ๊ฒ๋๋ค.
ํ ๋จ๊ณ ๋์
SQL ์ฟผ๋ฆฌ ์์ฑ์ ์ํด.
์ค์ ์ฟผ๋ฆฌ ์์ฑ ๋ด์ฉ ๋ฐ
๋ค์ํ ๊ตฌํ๋ฒ ํ์ต
SQL์ ์ ํฉํ
์ฟผ๋ฆฌ ์์ฑ์ ์ํ ์ดํด
์ฟผ๋ฆฌ ํ๋์ ์ํ
๊ณ ๊ธ ์ฟผ๋ฆฌ ๊ธฐ๋ฒ๊น์ง
- ์ค๋ฌด์์ ๊ณตํต์ ์ผ๋ก ์๊ตฌ๋๋ ์ค์ ์ฟผ๋ฆฌ ์์ฑ ๋ด์ฉ๊ณผ ๋ค์ํ ๊ตฌํ๋ฒ์ ๋ฐฐ์ธ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ๊ฐ๋ณ ํ๊ฒฝ๊ณผ ๋ชฉ์ ์ ๋ฐ๋ผ ๋ ๋์ ๋ฐฉ๋ฒ์ ์ทจ์ฌ ์ ํํ๋๋ฐ ๋์์ด ๋ฉ๋๋ค.
- SQL์ ํน์ฑ๊ณผ ์งํฉ๋ฐ ๊ด๊ณ ์ฐ์ฐ์ ๊ทผ๋ณธ ๊ฐ๋
์ ์ดํดํจ์ผ๋ก์ SQL์ ์ ํฉํ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
- SQL ์ฟผ๋ฆฌ ํ๋์ ์ ์ ์กฐ๊ฑด์ผ๋ก ํ์ํ ๊ณ ๊ธ ์ฟผ๋ฆฌ ๊ธฐ๋ฒ๋ค์ ์ตํ ์ ์์ต๋๋ค.
๋ค์ ๋ด์ฉ์
ํ์ตํฉ๋๋ค.
1. SELECT ๊ณ ๊ธ ๊ธฐ๋ฅ
select-list ์ ์์ ์ค์ํ๊ฒ ์ฌ์ฉ๋๋ ์์ฑ, Row-to-Col, Format, NULL, TOP, CASE ๋ฌธ ๊ทธ๋ฆฌ๊ณ ๋์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ ๋ฑ์ ๋ค๋ฃน๋๋ค.
2. DML(Data Manipulation Language) ๊ณ ๊ธ ๊ธฐ๋ฅ ํ์ฉ
ํ
์ด๋ธ-๊ฐ ์์ฑ์, UPDATE SET์ ๊ณ ๊ธ ํ์ฉ, OUTPUT ์ , Composable DML ํ์ฉ, MERGE๋ฌธ, ์ฑ๋ฒ ์ฝ๋ ์์ , SEQUENCE ๊ฐ์ฒด ์ดํด, ์์ ํ
์ด๋ธ๊ณผ ํ
์ด๋ธ ๋ณ์ ํน์ฑ ์ดํด, ๋์ SQL๊ณผ sp_executesql ํ์ฉ ํ, ํ๋ก์์ ์ ๋ฐฐ์ด(๋๋ ํ
์ด๋ธ ๊ตฌ์กฐ) ๊ฐ์ ๋๊ธฐ๋ ๋ค์ํ ๋ฐฉ๋ฒ๋ค์ ๋ค๋ฃน๋๋ค.
3. ์งํฉ ๋ฐ ๊ด๊ณ ์ฐ์ฐ (์กฐ์ธ๊ณผ ์๋ธ์ฟผ๋ฆฌ) ๊ณ ๊ธ ํ์ฉ
์กฐ์ธ์ ๋ฐฐ๊ฒฝ๊ณผ ๋ชฉ์ , CROSS JOIN์ ์ด์ฉํ ํ ๋ณต์ ๊ธฐ์ ํ์ฉ, ๊ต์งํฉ/ํฉ์งํฉ/์ฐจ์งํฉ๊ณผ SQL, ์ค์ฒฉ ๋ฐ ์๋ธ์ฟผ๋ฆฌ์ ํน์ฑ ์ดํด์ ํ์ฉ, ํ์ ํ
์ด๋ธ ํ์ฉ, CTE ๋ฐ ์ฌ๊ท ํธ์ถ ์ฟผ๋ฆฌ ํ์ฉ ๋ฐฉ๋ฒ๋ค์ ๋ค๋ฃน๋๋ค.
4. ์ง๊ณ, ํต๊ณ, ๋ถ์ํจ์, ํ์ด ์นํ, ์๊ณ ๋ฐ ์ด๊ณ ๊ณ ๊ธ ํ์ฉ
์ง๊ณ ํจ์์ ํน์ฑ ์ดํด, OVER()๋ฅผ ์ด์ฉํ ์ง๊ณ ํจ์์ ํ์ฅ ๊ธฐ๋ฅ ์ดํด, Window์ Frame์ ์ดํด๋ฅผ ํตํ ๊ณ ๊ธ ์ง๊ณ ์์
์ ํ์ฉ, ๋ถ์ ํจ์์ธ ์์น ํจ์์ ๋ถํฌ/๋ถ์ ํจ์๋ฅผ ์ด์ฉํ ๋ค์ํ ํต๊ณ ์์
ํ์ฉ, PIVOT/UNPIVOT์ ์ด์ฉํ ํ์ด ์นํ, ์๊ณ์ ์ด๊ณ ๋ค์ํ ํ์ฉ ๊ธฐ๋ฅ๋ค์ ๋ค๋ฃน๋๋ค.
์ง์๊ณต์ ์ ์๊ฐ
๊น์ ์

์ด๋ ฅ ์ฌํญ
- ใ์จํ๋ก(www.sqlroad.com ) ๋ํ์ปจ์คํดํธ/์ด์ฌ (2005๋
๋ถํฐ)
- SQL Server ์ปจ์คํ
, ๊ธฐ์ ์ง์, ๊ฐ์, ์๋ฃจ์
๊ฐ๋ฐ
- SQLBigEyes (SQL Server ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง ์๋ฃจ์
, www.sqlbigeyes.com ) ๊ฐ๋ฐ
- SQLBigEyes (SQL Server ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง ์๋ฃจ์
, www.sqlbigeyes.com ) ๊ฐ๋ฐ
- Microsoft Data Platform MVP
- 2002๋
๋ถํฐ (ํ์ฌ 2023๋
๊ธฐ์ค) 21๋
๊ฐ ์์, 2008๋
MVP ๊ณต๋ก์ ์์
์๊ฒฉ ๋ฐ ์ธ์ฆ
- MCT, Azure DBA, MCITP ์ธ ๋ค์
๊ฐ์ ํ๋ (1999๋
๋ถํฐ)
- ๋ถ์ฐ์ ๋ณด์ฐ์
์งํฅ์, ์คํฌ์ํฌํธ๊ต์ก์ผํฐ, ๋ฌ๋์จ์ด์ฝ๋ฆฌ์๊ต์ก์ผํฐ, ์ผ์ฑ๋ฉํฐ์บ ํผ์ค ์ธ ๋ค์
- SQL Server ์์ฒด ๊ฐ๋ฐ ๊ณผ์ ์งํ(์ฟผ๋ฆฌ ํ๋, DB ํ๋, ๋์ฉ๋ ๋ฐ์ดํฐ ํต์ฌ ๊ธฐ์ ์ดํด ๋ฑ)
์ธ๋ถ ํ๋
- SQL Server MVP Deep Dives Vol 2(Manning Pubs) ๊ณต๋ ์ ์ ์ฐธ์ฌ
- ๊น์ ์ ์ SQL Server ์ปจ์คํ
์ด์ผ๊ธฐ ์์ฆ 13๋
๊ฐ ์งํ ์ค
- SQL Unplugged ์ธ๋ฏธ๋ 5๋
๊ฐ ์งํ
- SQL PASS Korea Chapter Leader
- Microsoft Ignite, BITEC, Tech Camp, MVP Camp, TechEd, MSDN ๋ฑ Speaker ์ฐธ์ฌ
์์ ์ง๋ฌธ Q&A
Q. ๋น์ ๊ณต์๋ ๋ค์ ์ ์๋ ๊ฐ์์ธ๊ฐ์?
SQL์ ๊ธฐ์ด๋ ์ฌ์ฉ ๊ฒฝํ ์๋ค๋ฉด ๋ค์ ์ ์์ต๋๋ค, ์กฐ๊ธ ๋ถ์กฑํ๋๋ผ๋ ์๊ฐ ์ค์ ํ์ํ ๊ธฐ์ด๋ฅผ ๋ณํ ํ์ตํ์๋ฉด ๊ฐ๋ฅํ์ค ๊ฒ๋๋ค.
Q. ๊ณ ๊ธ(Advanced)์ ๊ธฐ์ค์ ์ด๋ป๊ฒ ๋๋์?
์ฌ๋ฌ ์์ , ์ถํ๋ฌผ, ์ธ๋ฏธ๋ ๋ฑ์์ ๊ณ ๊ธ ์์ค์ด๋ผ๊ณ ํํํ ๋์ ์์ค์ ๊ธฐ์ค์ผ๋ก ํ์ต๋๋ค๋ง, ์ค์ ๋ก ๊ฐ์ธ๋ง๋ค ํธ์ฐจ๊ฐ ์์ต๋๋ค. SQL ์ด๊ธ์๊ฐ ํ ๋จ๊ณ ๋ ๋ ๋ฒจ ์
ํ ์ ์๋ ๊ณผ์ ์ผ๋ก ์๊ฐํ์๋ฉด ๋๊ฒ ์ต๋๋ค.
Q. ๊ฐ์๋ฅผ ๋ฃ๊ธฐ ์ ์ค๋นํด์ผ ํ ๊ฒ์ด ์๋์?
SQL Server์์ ์ ๊ณตํ๋ SSMS ํ๋ก๊ทธ๋จ์ด๋ ํน์ ์ฟผ๋ฆฌ ์ฌ์ฉ์ด ๊ฐ๋ฅํ ํ๋ก๊ทธ๋จ์ ์ค์นํด ๋์๊ณ "๊ณผ์ ์๊ฐ"์์ ์ ๊ณต๋๋ ๋ฐ๋ชจ์ฉ DB์ SQL ์คํฌ๋ฆฝํธ๋ฅผ ๋ฏธ๋ฆฌ ๋ค์ด๋ก๋ํด ๋์๋ฉด ๋ฉ๋๋ค. ๋ฐ๋ชจ DB ๊ตฌ์ฑ์ ๊ต์ก์์ ์ค๋ช
๋๋ฆฝ๋๋ค.
Q. ์๊ฐ ๊ด๋ จ ์ฐธ๊ณ ์ฌํญ(๊ฐ์ถฐ์ผ ํ ํ๊ฒฝ, ๊ธฐํ ์ ์์ฌํญ)์ด ์๋์?
๋ฐ๋ชจ ๋ฐ ๊ณผ์ ์ํ์ ์ํด SQL Server๊ฐ ํ์ํฉ๋๋ค. ๊ฐ๋ฅํ๋ฉด ์ต์ ๋ฒ์ (2021๋
ํ์ฌ ๊ธฐ์ค 2019)์ด ์ข๊ณ ์ด์ ๋ฒ์ ๋ ๊ด์ฐฎ์ต๋๋ค.