home
๐Ÿ“™

SQL ๊ฐ•์˜

๊ธฐ์—…์˜ ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” SQL Server์˜ ๊ฒฝ์šฐ ์ƒ๋‹นํžˆ ๋ณต์žกํ•œ ์ฟผ๋ฆฌ๋ฌธ์„ ์ž‘์„ฑํ•ด์•ผ ํ•˜๋ฉฐ, ์ด๋Š” ์ ˆ๋Œ€ ์‰ฝ์ง€ ์•Š์€ ์ผ์ž…๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ, ๊ธฐ๋ณธ์ ์ธ ์ฟผ๋ฆฌ๋ฌธ๋ถ€ํ„ฐ ๋ณต์žกํ•œ ์ฟผ๋ฆฌ๋ฌธ๊นŒ์ง€ ์ฒด๊ณ„์ ์ธ ํ•™์Šต์ด ์š”๊ตฌ๋  ์ˆ˜๋ฐ–์— ์—†์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํ˜„์‹ค ์ƒํ™ฉ์—์„œ ๋ณธ ๊ณผ์ •์ด ํƒ„ํƒ„ํ•œ ๋””๋”ค๋Œ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ˆ˜๋…„ ๊ฐ„์˜ ๊ฐ•์˜์™€ ํŠœ๋‹ ์ปจ์„คํŒ… ๊ฒฝํ—˜์„ ๋ฐ”ํƒ•์œผ๋กœ ์ฒด๊ณ„์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ จ ๊ฐœ๋ฐœ ๋Šฅ๋ ฅ์„ ํ‚ค์šธ ์ˆ˜ ์žˆ๋Š” ์ปค๋ฆฌํ˜๋Ÿผ์„ ์ค€๋น„ํ–ˆ์œผ๋ฉฐ, ํ˜„์žฅ ๊ฒฝํ—˜์„ ๊ณต์œ ํ•˜์—ฌ ์‹ค์งˆ์ ์ธ ๋„์›€์ด ๋˜๋Š” ๊ฐ•์˜๋ฅผ ์ง„ํ–‰ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

ํ•™์Šต ๋ชฉํ‘œ

โ€ข
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋‹ค์ด์–ด๊ทธ๋žจ์„ ์‚ฌ์šฉํ•ด ํ…Œ์ด๋ธ”์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
โ€ข
๊ธฐ๋ณธ ์ฟผ๋ฆฌ๋ฌธ๊ณผ ์ง‘๊ณ„ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด ๊ธฐ๋ณธ์ ์ธ ๋ฐ์ดํ„ฐ ๊ฒ€์ƒ‰์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
โ€ข
์กฐ์ธ๋ฌธ๊ณผ ํ•˜์œ„ ์ฟผ๋ฆฌ๋ฌธ์„ ์‚ฌ์šฉํ•ด ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ” ์—์„œ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
โ€ข
์ตœ์‹  ๋ฒ„์ „์˜ ๋‹ค์–‘ํ•œ ํ•จ์ˆ˜์™€ ์ฟผ๋ฆฌ๋ฌธ์„ ์‚ฌ์šฉํ•ด ์‹ฌ๋„ ์žˆ๋Š” ์ •๋ณด ๊ฒ€์ƒ‰์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
โ€ข
๋ทฐ, ์ €์žฅ ํ”„๋กœ์‹œ์ €, ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด ์ฟผ๋ฆฌ๋ฌธ์„ ๋ชจ๋“ˆํ™”ํ•˜๊ณ  ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค๋ฃจ๋Š” ๋‚ด์šฉ

๊ธฐ๋ณธ ์ฟผ๋ฆฌ ์ž‘์„ฑํ•˜๊ธฐ SQL์˜ ๊ธฐ์ดˆ๋ฅผ ๋‹ค์ง‘๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋‹ค์ด์–ด๊ทธ๋žจ์„ ์ดํ•ดํ•˜๊ณ , SELECT ๋ฌธ์„ ์‹œ์ž‘์œผ๋กœ ๋‹ค์–‘ํ•œ ์—ฐ์‚ฐ์ž, ๋ฒ”์œ„ ์กฐ๊ฑด, ๋ฆฌ์ŠคํŠธ ์กฐ๊ฑด, NULL ๊ฐ’ ๋น„๊ต ๋“ฑ์„ ํ•™์Šตํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์—ด ๋ณ„์นญ, ์—ด ๊ณ„์‚ฐ, ์กฐํšŒ ๊ฒฐ๊ณผ ์ •๋ ฌ ๋ฐฉ๋ฒ•์„ ๋ฐฐ์šฐ๊ณ , ๊ธฐ๋ณธ์ ์ธ INSERT, UPDATE, DELETE ๋ฌธ์„ ์ตํž™๋‹ˆ๋‹ค.
ํ–ฅ์ƒ๋œ ์ฟผ๋ฆฌ ์ž‘์„ฑํ•˜๊ธฐ ๊ธฐ๋ณธ ์ฟผ๋ฆฌ์—์„œ ๋” ๋‚˜์•„๊ฐ€ ์ง‘๊ณ„ ํ•จ์ˆ˜, GROUP BY, HAVING ๋ฌธ ๋“ฑ์„ ์‚ฌ์šฉํ•œ ๊ทธ๋ฃนํ™”์™€ ์ง‘๊ณ„ ์ž‘์—…์„ ํ•™์Šตํ•ฉ๋‹ˆ๋‹ค. IF โ€ฆ ELSE, BEGIN โ€ฆ END, WHILE ๋ฌธ์„ ํ†ตํ•ด ์กฐ๊ฑด๋ฌธ๊ณผ ๋ฐ˜๋ณต๋ฌธ์„ ์ตํžˆ๋ฉฐ, RANK, DENSE_RANK, ROW_NUMBER, NTILE ํ•จ์ˆ˜๋กœ ๋ฐ์ดํ„ฐ ์ˆœ์œ„๋ฅผ ๋งค๊น๋‹ˆ๋‹ค. ๋‹ค์–‘ํ•œ JOIN ๋ฌธ๊ณผ ํ•˜์œ„ ์ฟผ๋ฆฌ, UNION, INTERSECT, EXCEPT ๋ฌธ์„ ํ•™์Šตํ•˜์—ฌ ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ ์กฐ์ž‘์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
์ค‘์š” ํ•จ์ˆ˜ ์‚ฌ์šฉ SQL์—์„œ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๋‚ ์งœ ํ•จ์ˆ˜์™€ ๋ฌธ์ž ๊ด€๋ จ ํ•จ์ˆ˜๋ฅผ ํ•™์Šตํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋‚ ์งœ์™€ ๋ฌธ์ž์—ด์„ ํšจ๊ณผ์ ์œผ๋กœ ๋‹ค๋ฃจ๊ณ , ๋ฐ์ดํ„ฐ์˜ ๋‹ค์–‘ํ•œ ํ˜•์‹์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋Šฅ๋ ฅ์„ ํ‚ค์›๋‹ˆ๋‹ค.
๊ณ ๊ธ‰ ์ฟผ๋ฆฌ ์ž‘์„ฑํ•˜๊ธฐ ๊ณ ๊ธ‰ ์ฟผ๋ฆฌ ์ž‘์„ฑ ๊ธฐ์ˆ ์„ ์Šต๋“ํ•ฉ๋‹ˆ๋‹ค. TOP (n) ๋ฌธ, CASE ๋ฌธ, CTE ๋ฌธ, MERGE ๋ฌธ, OUTPUT ๋ฌธ, APPLY ๋ฌธ, OVER ๋ฌธ, OFFSET FETCH ๋ฌธ, WITH RESULT SET ๋ฌธ์„ ํ•™์Šตํ•˜์—ฌ ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ ์กฐ์ž‘ ๋ฐ ์กฐํšŒ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
๊ณ ๊ธ‰ ํ•จ์ˆ˜ ์‚ฌ์šฉ SQL์˜ ๊ณ ๊ธ‰ ํ•จ์ˆ˜๋ฅผ ์ตํž™๋‹ˆ๋‹ค. EOMONTH, CHOOSE, IIF, CONCAT, FORMAT ํ•จ์ˆ˜์™€ LAST_VALUE, FIRST_VALUE, LEAD, LAG ํ•จ์ˆ˜ ๋“ฑ์„ ํ†ตํ•ด ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ๋ถ„์„ ๋ฐ ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฐœ์ฒด ๋งŒ๋“ค์–ด ํ™œ์šฉํ•˜๊ธฐ SQL์—์„œ์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฐœ์ฒด ํ™œ์šฉ๋ฒ•์„ ํ•™์Šตํ•ฉ๋‹ˆ๋‹ค. ๋ทฐ(View)์˜ ์ดํ•ด ๋ฐ ๊ด€๋ฆฌ, ์ €์žฅ ํ”„๋กœ์‹œ์ €(Stored Procedure)์˜ ์ž‘์„ฑ๊ณผ ์‚ฌ์šฉ, ์ž…๋ ฅ ๋ฐ ์ถœ๋ ฅ ๋งค๊ฐœ ๋ณ€์ˆ˜, ๋™์  ์ฟผ๋ฆฌ๋ฌธ(Dynamic Queries), ์‚ฌ์šฉ์ž ์ •์˜ ํ•จ์ˆ˜(User Defined Function)๋ฅผ ๋งŒ๋“ค์–ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํšจ์œจ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•ฉ๋‹ˆ๋‹ค.

์ž์ฒด ์ œ์ž‘ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

์‹ค์ œ ์—…๋ฌด์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์œ ์‚ฌํ•œ ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•™์Šต ํšจ์œจ์„ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค. ์•„๋ž˜ ๋‹ค์ด์–ด๊ทธ๋žจ์€ ์ธ์‚ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์‡ผํ•‘๋ชฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋ณด์—ฌ์ฃผ๋ฉฐ, ์ด๋“ค์€ ๊ฐ๊ฐ SQL ๊ธฐ๋ณธ ๊ตฌ๋ฌธ๊ณผ ๊ณ ๊ธ‰ ๊ตฌ๋ฌธ ํ•™์Šต์„ ์œ„ํ•ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, ๋‹ค์–‘ํ•œ ์—…๋ฌด์— ๋Œ€ํ•œ ์˜ˆ์ œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.