๐Ÿ“ƒ SQL ๊ฐœ๋…

JeongMinยท2023๋…„ 8์›” 4์ผ
0
post-thumbnail

SQL์ด๋ž€??

  • SQL์€ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ์‹œ์Šคํ…œ(RDBMS)์—์„œ ์ž๋ฃŒ๋ฅผ ์ €์žฅ ๋ฐ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์„ค๊ณ„๋œ ์–ธ์–ด์ž…๋‹ˆ๋‹ค.
  • SQL๊ณผ C์–ธ์–ด์™€ ๊ฐ™์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ๋‘˜ ๋‹ค ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ฐจ์ด์ ์€ SQL์€ RDBMS์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒ ๋ฐ ๊ฐ€๊ณตํ•˜๋Š”๋ฐ ์ตœ์ ์˜ ์„ฑ๋Šฅ๊ณผ ํŽธ์˜๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋ฐ˜๋ฉด, C์–ธ์–ด์™€ ๊ฐ™์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋Š” ๋„คํŠธ์›Œํฌ ํ†ต์‹ , ํŒŒ์ผ ์ž…์ถœ๋ ฅ ๋“ฑ๊ณผ ๊ฐ™์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•˜๋Š”๋ฐ ํŽธ์˜๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

SQL ์‹คํ–‰ ๊ณผ์ •

Query cache(์ฟผ๋ฆฌ ์บ์‹œ) - SQL ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์บ์‹ฑํ•˜๋Š” ์—ญํ• ์„ ํ•˜๋ฉฐ ๋™์ผํ•œ SQL ์‹คํ–‰์‹œ ์ด์ „ ๊ฒฐ๊ณผ๋ฅผ ์ฆ‰์‹œ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ์บ์‹ฑ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•ด์•ผ ํ•˜๋Š”๋ฐ ์ด๋Š” ๋™์‹œ ์ฒ˜๋ฆฌ ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ๋ฐœ์ƒ์‹œ์ผœ์„œ MYSQL 8.0๋ถ€ํ„ฐ ์ฟผ๋ฆฌ ์บ์‹œ๋Š” ์™„์ „ํžˆ ์ œ๊ฑฐ๋˜์—ˆ๋‹ค.

Parser(ํŒŒ์„œ) - ํŒŒ์„œ๋Š” ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์œผ๋กœ ๋“ค์–ด์˜จ ์ฟผ๋ฆฌ ๋ฌธ์žฅ์„ ํ† ํฐ์œผ๋กœ ๋ถ„๋ฆฌํ•ด ํŠธ๋ฆฌ ํ˜•ํƒœ์˜ ๊ตฌ์กฐ๋กœ ๋งŒ๋“ค์–ด ๋‚ด๋Š” ์ž‘์—…์„ ํ•œ๋‹ค. ์ฟผ๋ฆฌ์˜ ๊ธฐ๋ณธ ๋ฌธ๋ฒ• ์˜ค๋ฅ˜๋Š” ์ด ๋‹จ๊ณ„์—์„œ ๋ฐœ๊ฒฌ๋˜๋ฉฐ ์‚ฌ์šฉ์ž์—๊ฒŒ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ์ „๋‹ฌํ•œ๋‹ค.

Pre-processor(์ „์ฒ˜๋ฆฌ๊ธฐ) - ํŒŒ์„œ ๊ณผ์ •์—์„œ ๋งŒ๋“ค์–ด์ง„ ํŒŒ์„œ ํŠธ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ฟผ๋ฆฌ ๋ฌธ์žฅ์— ๊ตฌ์กฐ์ ์ธ ๋ฌธ์ œ์ ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. ๊ฐ ํ† ํฐ์„ ํ…Œ์ด๋ธ” ์ด๋ฆ„์ด๋‚˜ ์นผ๋Ÿผ ์ด๋ฆ„ ๋˜๋Š” ๋‚ด์žฅ ํ•จ์ˆ˜์™€ ๊ฐ™์€ ๊ฐœ์ฒด๋ฅผ ๋งคํ•‘ํ•ด ํ•ด๋‹น ๊ฐ์ฒด์˜ ์กด์žฌ ์—ฌ๋ถ€์™€ ๊ฐ์ฒด์˜ ์ ‘๊ทผ ๊ถŒํ•œ ๋“ฑ์„ ํ™•์ธํ•˜๋Š” ๊ณผ์ •์„ ์ด ๋‹จ๊ณ„์—์„œ ์ˆ˜ํ–‰ํ•œ๋‹ค. ์กด์žฌํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ๊ถŒํ•œ ์ƒ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ๊ฐœ์ฒด์˜ ํ† ํฐ์€ ๊ฑธ๋Ÿฌ์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

Optimizer(์˜ตํ‹ฐ๋งˆ์ด์ €) - ์„ฑ๋Šฅ ์ตœ์ ํ™”์™€ ๊ด€๊ณ„๊ฐ€ ์žˆ๋‹ค. ๊ทœ์น™ ๊ธฐ๋ฐ˜ ์ตœ์ ํ™”๋Š” ์˜ตํ‹ฐ๋งˆ์ด์ €์— ๋‚ด์žฅ๋œ ์šฐ์„  ์ˆœ์œ„์— ๋”ฐ๋ผ ์‹คํ–‰ ๊ณ„ํš์„ ์ˆ˜๋ฆฝํ•˜๋Š” ๋ฐฉ์‹์ด๊ณ  ๋น„์šฉ ๊ธฐ๋ฐ˜ ์ตœ์ ํ™”๋Š” ์ž‘์—…์˜ ๋น„์šฉ๊ณผ ๋Œ€์ƒ ํ…Œ์ด๋ธ”์˜ ํ†ต๊ณ„ ์ •๋ณด๋ฅผ ํ™œ์šฉํ•ด์„œ ์‹คํ–‰ ๊ณ„ํš ์ˆ˜๋ฆฝํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

Execution engine(์‹คํ–‰ ์—”์ง„) - ์˜ตํ‹ฐ๋งˆ์ด์ €๊ฐ€ ๋งŒ๋“  ๊ณ„ํš๋Œ€๋กœ ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์„ ํ˜ธ์ถœํ•ด ์ฟผ๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ์—ญํ• ์ด๋‹ค.

Handler API(ํ•ธ๋“ค๋Ÿฌ API) - ์ฟผ๋ฆฌ ์‹คํ–‰๊ธฐ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์“ฐ๊ฑฐ๋‚˜ ์ฝ๊ธฐ ์œ„ํ•ด ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„๊ณผ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ์—ญํ• ์„ ํ•˜๋Š” API์ด๋‹ค. ์ €์žฅ ์—”์ง„๊ณผ์˜ ์ƒํ˜ธ ์ž‘์šฉ์„ ๋„์™€์„œ ์„œ๋ฒ„๊ฐ€ ๋‹ค์–‘ํ•œ ์ €์žฅ ์—”์ง„์„ ์ง€์›ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

Storage Engine(์ €์žฅ ์—”์ง„) - ์‹คํ–‰ ์—”์ง„์˜ ์š”์ฒญ์— ๋”ฐ๋ผ ๋ฐ์ดํ„ฐ๋ฅผ ๋””์Šคํฌ๋กœ ์ €์žฅํ•˜๊ณ  ๋””์Šคํฌ๋กœ๋ถ€ํ„ฐ ์ฝ์–ด์˜ค๋Š” ์—ญํ• ์„ ๋‹ด๋‹นํ•œ๋‹ค. ๋Œ€ํ‘œ์ ์œผ๋กœ InnoDB, MYISAM ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์ด ์žˆ๋‹ค. ํ”Œ๋Ÿฌ๊ทธ์ธ ํ˜•ํƒœ๋กœ ์ œ๊ณต๋˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ์ž๋Š” ์›ํ•˜๋Š” ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์„ ๊ณจ๋ผ์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•ธ๋“ค๋Ÿฌ API์— ์˜ํ•ด ๋™์ž‘ํ•˜๋ฉฐ ํ•ธ๋“ค๋Ÿฌ๋ผ๊ณ  ๋ถˆ๋ฆฐ๋‹ค.


DML/DDL/DCL

DML(Data Manipulation Language)

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋‚ด๋ถ€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์–ธ์–ด์ด๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒ, ์ถ”๊ฐ€, ๋ณ€๊ฒฝ, ์‚ญ์ œ ๋“ฑ์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค.

๋˜ํ•œ DML์€ ์กฐ์ž‘ํ•˜๋ ค๋Š” ํ…Œ์ด๋ธ”(Target)์„ ๋ฉ”๋ชจ๋ฆฌ ๋ฒ„ํผ ์œ„์— ์˜ฌ๋ ค๋‘๊ณ  ๋ณ€๊ฒฝ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฐ˜์˜์ด ๋˜์ง€ ์•Š๋Š”๋‹ค. Commit ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด Transaction์„ ์ข…๋ฃŒํ•ด์•ผ ํ•ด๋‹น ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ํ…Œ์ด๋ธ”์— ๋ฐ˜์˜๋œ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ SQL Server์˜ ๊ฒฝ์šฐ๋Š” DML ๊ฒฝ์šฐ๋„ Auto Commit์œผ๋กœ ์ฒ˜๋ฆฌ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์‹ค์ œ ํ…Œ์ด๋ธ”์— ๋ฐ˜์˜ํ•˜๊ธฐ ์œ„ํ•ด Commit ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.

  • SELECT: ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•œ๋‹ค. ์˜ต์…˜ ์ค‘์— DISTINCT๋Š” ์ค‘๋ณต๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ 1๊ฑด๋งŒ ์ถœ๋ ฅํ•˜๊ณ  ์˜ต์…˜ All์€ ๊ธฐ๋ณธ ์˜ต์…˜์ด๋ฉฐ ์ค‘๋ณต๋˜๋Š” ๋ฐ์ดํ„ฐ๋„ ๋ชจ๋‘ ์ถœ๋ ฅํ•œ๋‹ค.
  • INSERT: ํ…Œ์ด๋ธ”์— ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ์—ญํ• 
  • UPDATE: ํ…Œ์ด๋ธ” ๋‚ด์— ์กด์žฌํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ์—ญํ• 
  • DELETE: ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•˜๋Š” ์—ญํ• 

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

DDL(Data Definition Language)

ํ…Œ์ด๋ธ”๊ณผ ์ปฌ๋Ÿผ์„ ์ •์˜ํ•˜๋Š” ๋ช…๋ น์–ด๋กœ ์ƒ์„ฑ, ์ˆ˜์ •, ์‚ญ์ œ ๋“ฑ์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌ์กฐ ๋˜๋Š” ์Šคํ‚ค๋งˆ๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ์—ญํ• ์„ ๋‹ด๋‹นํ•œ๋‹ค.

DDL์€ ์ง์ ‘ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํ…Œ์ด๋ธ”์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๊ธฐ ๋•Œ๋ฌธ์— ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜๋Š” ์ˆœ๊ฐ„ ์ž‘์—…์ด ์ฆ‰์‹œ ๋ฐ˜์˜(Auto Commit)๋˜๋ฏ€๋กœ ์‚ฌ์šฉํ•  ๋•Œ ์ฃผ์˜๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

  • CREATE: ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•˜๋Š” ์—ญํ• 
  • ALTER: ํ…Œ์ด๋ธ”์˜ ๊ตฌ์กฐ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ์—ญํ• 
  • DROP: ํ…Œ์ด๋ธ”์„ ์‚ญ์ œํ•˜๋Š” ์—ญํ• (ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ์™€ ๊ตฌ์กฐ ์‚ญ์ œ)
  • RENAME: ํ…Œ์ด๋ธ”์˜ ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•˜๋Š” ์—ญํ• 
  • TRUNCATE: ํ…Œ์ด๋ธ”์„ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ์—ญํ• 

DCL(Data Control Language)

DCL์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘๊ทผํ•˜์—ฌ ์ฝ๊ฑฐ๋‚˜ ์“ฐ๋Š” ๊ฒƒ์„ ์ œํ•œํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๊ฑฐ๋‚˜ ๋ฐ•ํƒˆํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ถˆ๋ฒ•์ ์ธ ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•œ ๋ฐ์ดํ„ฐ ๋ณด์•ˆ์˜ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

์ง์ ‘ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํ…Œ์ด๋ธ”์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๊ธฐ ๋•Œ๋ฌธ์— ์ฆ‰์‹œ ์™„๋ฃŒ(AUTO COMMIT)๋˜๋Š” ๊ฒƒ์„ ์œ ์˜ํ•ด์•ผ ํ•œ๋‹ค.

  • GRANT: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋Œ€ํ•œ ์‚ฌ์šฉ์ž์˜ ์•ก์„ธ์Šค ๊ถŒํ•œ ์ œ๊ณต
  • REVOKE: GRANT ๋ช…๋ น์œผ๋กœ ์ฃผ์–ด์ง„ ์—‘์„ธ์Šค ๊ถŒํ•œ ์ฒ ํšŒ

CASCADE

CASCADE๋Š” ์™ธ๋ž˜ ํ‚ค ์ œ์•ฝ์กฐ๊ฑด๊ณผ ๊ด€๋ จํ•ด ์‚ฌ์šฉ๋˜๋Š” ์˜ต์…˜์ด๋‹ค. CASECADE ์˜ต์…˜์€ ์™ธ๋ž˜ ํ‚ค ์ œ์•ฝ ์กฐ๊ฑด๊ณผ ๊ด€๋ จ๋œ ํ…Œ์ด๋ธ” ๊ฐ„ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ๋ฐ ์‚ญ์ œ ๋™์ž‘์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฐธ์กฐ ๋ฌด๊ฒฐ์„ฑ ์ œ์•ฝ์„ ๊ด€๋ฆฌํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.

CASCADE UPDATE
ํ…Œ์ด๋ธ”์—์„œ ์™ธ๋ž˜ ํ‚ค ๊ฐ’์ด ๋ณ€๊ฒฝ๋œ๋‹ค๋ฉด ์ฐธ์กฐํ•˜๋Š” ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์˜ ํ•ด๋‹น ์™ธ๋ž˜ ํ‚ค ๊ฐ’๋“ค๋„ ํ•จ๊ป˜ ๋ณ€๊ฒฝ๋œ๋‹ค.

CASCADE DELETE
ํ…Œ์ด๋ธ”์˜ ๋ ˆ์ฝ”๋“œ๊ฐ€ ์‚ญ์ œ๋˜๋ฉด ํ•ด๋‹น ๋ ˆ์ฝ”๋“œ๋ฅผ ์™ธ๋ž˜ํ‚ค๋กœ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š” ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์˜ ๋ ˆ์ฝ”๋“œ๋„ ํ•จ๊ป˜ ์‚ญ์ œ๋œ๋‹ค. ์™ธ๋ž˜ ํ‚ค๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ ˆ์ฝ”๋“œ๊ฐ€ ์‚ญ์ œ๋˜๋ฉด ํ•ด๋‹น ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๋ชจ๋“  ๋ ˆ์ฝ”๋“œ๊ฐ€ ์ž๋™ ์‚ญ์ œ๋œ๋‹ค.


VIEW

๋ทฐ๋Š” ํ•˜๋‚˜ ๋˜๋Š” ๊ทธ ์ด์ƒ์˜ ํ…Œ์ด๋ธ”์„ ์กฐ์ธํ•ด ๋งŒ๋“  ์ƒˆ๋กœ์šด ๊ฐ€์ƒ ํ…Œ์ด๋ธ”์ด๋‹ค. ์‹ค์ œ๋กœ ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•œ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ์„œ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค. ํŠน์ • ์ •๋ณด๋งŒ ์ œ๊ณตํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ(์ ‘๊ทผ ์ œ์–ด)๋‚˜ ๋ณต์žกํ•œ ์ฟผ๋ฆฌ๋ฅผ ๊ฐ€์ƒ ํ…Œ์ด๋ธ”๋กœ ๋งŒ๋“ค์–ด ๊ฐ„ํŽธํ•˜๊ฒŒ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค(๊ด€๋ฆฌ ์šฉ์ด).


SELECT ์ ˆ์˜ ์ฒ˜๋ฆฌ ์ˆœ์„œ

FROM ์ ˆ
์ฟผ๋ฆฌ์˜ ์ฒซ๋ฒˆ์งธ ์‹คํ–‰ ์ˆœ์„œ๋Š” FROM์ ˆ์ด๋‹ค. FROM ์ ˆ์—์„œ ์กฐํšŒํ•  ํ…Œ์ด๋ธ”์„ ์ง€์ •ํ•˜๊ณ  Join์„ ์‹คํ–‰ํ•˜์—ฌ ํ•˜๋‚˜์˜ ๊ฐ€์ƒ ํ…Œ์ด๋ธ”๋กœ ๊ฒฐํ•ฉํ•œ๋‹ค.

WHERE ์ ˆ
ํ…Œ์ด๋ธ”์—์„œ ์กฐ๊ฑด์— ๋งž๋Š” ๋ ˆ์ฝ”๋“œ(ํ–‰)๋ฅผ ํ•„ํ„ฐ๋งํ•œ๋‹ค.

GROUP BY ์ ˆ
์„ ํƒํ•œ ์นผ๋Ÿผ์„ ๊ธฐ์ค€์œผ๋กœ ๊ทธ๋ฃนํ•‘ํ•œ๋‹ค.

HAVING ์ ˆ
๊ทธ๋ฃนํ•‘ ํ›„์— ๊ฐ ๊ทธ๋ฃน์— ์‚ฌ์šฉ๋˜๋Š” ์กฐ๊ฑด์ ˆ์ด๋‹ค.
HAVING ์ ˆ์˜ ์กฐ๊ฑด์„ WHERE์ ˆ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด WHERE์ ˆ์— ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. HAVING ์ ˆ์€ ๊ฐ ๊ทธ๋ฃน์— ์กฐ๊ฑด์„ ๊ฑธ๊ธฐ ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ์ด ๋–จ์–ด์ง„๋‹ค.

SELECT ์ ˆ
์—ฌ๋Ÿฌ ์กฐ๊ฑด์„ ์ฒ˜๋ฆฌํ•œ ํ›„ ์–ด๋–ค ์ปฌ๋Ÿผ์„ ์ถœ๋ ฅํ• ์ง€ ์„ ํƒํ•œ๋‹ค.

ORDER BY ์ ˆ
select ๋ฌธ์˜ ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ์ •๋ ฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

LIMIT ์ ˆ
์กฐํšŒ๋œ ๊ฒฐ๊ณผ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ œํ•œํ•˜๋Š” ๊ฒƒ์ด๋‹ค.


SELECT ~FOR UPDATE

SELECT ~ FOR UPDATE ๊ตฌ๋ฌธ์€ ๋™์‹œ์„ฑ ์ œ์–ด๋ฅผ ์œ„ํ•ด ํŠน์ • ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด LOCK์„ ๊ฑฐ๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด์„œ ์„ ํƒํ•œ ํ–‰์ด ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์—์„œ ๋™์‹œ์— ์ˆ˜์ •๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ•ด๋‹น ํ–‰์— ๋ฝ์„ ๊ฑธ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜๋“ค์ด ํ•ด๋‹น ํ–‰์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค. ๊ทธ๋ž˜์„œ ๋ฝ์ด ์˜ค๋ž˜ ์ง€์†๋˜์ง€ ์•Š๋„๋ก ์ฃผ์˜ํ•ด์•ผ ํ•œ๋‹ค.

ํ•ด๋‹น ํŠธ๋žœ์žญ์…˜ ๋‚ด์—์„œ๋งŒ ์ ์šฉ๋˜๋ฉฐ ํ•ด๋‹น ํŠธ๋žœ์žญ์…˜์ด ์ปค๋ฐ‹๋˜๊ฑฐ๋‚˜ ๋กค๋ฐฑ๋˜๋ฉด ๋ฝ์ด ํ•ด์ œ๋œ๋‹ค.


GROUP BY / ORDER BY

GROUP BY
๋ฐ์ดํ„ฐ๋ฅผ ๊ทธ๋ฃนํ™” ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ํŠน์ • ์—ด์˜ ๊ฐ’์— ๋”ฐ๋ผ ๊ฒฐ๊ณผ๋ฅผ ๊ทธ๋ฃนํ™”ํ•˜์—ฌ ์ง‘๊ณ„ ๋˜๋Š” ํ†ต๊ณ„ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š”๋ฐ ์“ฐ์ธ๋‹ค.

ORDER BY
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๊ฒ€์ƒ‰๋œ ๊ฒฐ๊ณผ(selelct)๋ฅผ ํŠน์ • ์—ด์„ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.


JOIN

INNER JOIN
๊ณตํ†ต์ ์ธ ๋ถ€๋ถ„๋งŒ SELECTํ•˜๊ณ  2๊ฐœ์˜ ํ…Œ์ด๋ธ”์˜ ์ปฌ๋Ÿผ๊ฐ’์„ ๊ฒฐํ•ฉํ•ด ์ƒˆ๋กœ์šด ๊ฒฐ๊ณผ ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑ

OUTER JOIN
๋‘ ํ…Œ์ด๋ธ”์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ „์ฒด ๋ถ€๋ถ„์„ SELECT ํ•œ ๊ฒƒ. ์กฐ์ธ ๋Œ€์ƒ ํ…Œ์ด๋ธ”์—์„œ ํŠน์ • ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ชจ๋‘ ํ•„์š”ํ•œ ์ƒํ™ฉ์—์„œ ์‚ฌ์šฉํ•œ๋‹ค.

LEFT OUTER JOIN
LEFT OUTER JOIN์€ ๊ณตํ†ต์ ์ธ ๋ถ€๋ถ„๊ณผ LEFT ํ…Œ์ด๋ธ”์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ SELECTํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

RIGHT OUTER JOIN
๋งˆ์ฐฌ๊ฐ€์ง€๋กœ RIGHT OUTER JOIN์€ ๊ณตํ†ต์ ์ธ ๋ถ€๋ถ„๊ณผ RIGHT ํ…Œ์ด๋ธ”์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋งŒ SELECT ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

CROSS JOIN
๋‘ ๊ฐœ ์ด์ƒ์˜ ํ…Œ์ด๋ธ” ๊ฐ„์˜ ๋ชจ๋“  ๊ฐ€๋Šฅํ•œ ์กฐํ•ฉ์„ ์ƒ์„ฑํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. ๊ทธ๋ž˜์„œ ์ง‘ํ•ฉ์ด ๋งค์šฐ ์ปค์งˆ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ์— ์ฃผ์˜ํ•ด์•ผ ํ•œ๋‹ค.


์„œ๋ธŒ์ฟผ๋ฆฌ

SQL์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ฟผ๋ฆฌ ์•ˆ์— ํฌํ•จ๋œ ๋˜ ๋‹ค๋ฅธ ์ฟผ๋ฆฌ๋ฅผ ๋œปํ•œ๋‹ค. ์„œ๋ธŒ ์ฟผ๋ฆฌ๋Š” ๋‹ค๋ฅธ ์ฟผ๋ฆฌ์˜ ์กฐ๊ฑด์ด๋‚˜ ์—ฐ์‚ฐ์— ์‚ฌ์šฉ๋˜๋ฉฐ ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ ์š”๊ตฌ์‚ฌํ•ญ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ๋œ๋‹ค.
์„œ๋ธŒ์ฟผ๋ฆฌ๋Š” ์œ„์น˜์— ๋”ฐ๋ผ SELECT์ ˆ, WHERE์ ˆ, FROM์ ˆ 3๊ฐ€์ง€๋กœ ๋‚˜๋‰œ๋‹ค.

SELECT์ ˆ
select ์ ˆ์— ์‚ฌ์šฉ๋˜๋Š” ์„œ๋ธŒ ์ฟผ๋ฆฌ๋Š” ํ•˜๋‚˜์˜ ์—ด์ฒ˜๋Ÿผ ์‚ฌ์šฉ๋œ๋‹ค. ํ•˜์ง€๋งŒ ๋ฐ์ดํ„ฐ์˜ ์–‘์ด ๋งŽ์•„์งˆ์ˆ˜๋ก ์‹คํ–‰์†๋„๊ฐ€ ๋Š๋ ค์ง€๊ธฐ ๋•Œ๋ฌธ์— ์ž˜ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค.

WHERE์ ˆ
์„œ๋ธŒ ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด ์กฐ๊ฑด์— ๋งŒ์กฑํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํ•„ํ„ฐ๋งํ•  ์ˆ˜ ์žˆ๋‹ค.

FROM์ ˆ
์„œ๋ธŒ ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ”์ฒ˜๋Ÿผ ์‚ฌ์šฉ๋œ๋‹ค.


DROP, TRUNCATE, DELETE์˜ ์ฐจ์ด

DROP์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ์ฒด๋ฅผ ์™„์ „ํžˆ ์‚ญ์ œํ•ด ๋ฐ์ดํ„ฐ์™€ ์ •์˜๊ฐ€ ๋ชจ๋‘ ์‚ฌ๋ผ์ง„๋‹ค. ์‚ญ์ œ๋œ ๋ฐ์ดํ„ฐ๋Š” ๋˜๋Œ๋ฆด ์ˆ˜ ์—†๋‹ค.

TRUNCATE๋Š” ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•ด ํ…Œ์ด๋ธ”์˜ ๊ตฌ์กฐ๋Š” ์œ ์ง€๋œ๋‹ค. ์‚ญ์ œ๋œ ๋ฐ์ดํ„ฐ๋Š” ๋˜๋Œ๋ฆด ์ˆ˜ ์—†์œผ๋ฉฐ ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•  ๋•Œ ์œ ์šฉํ•˜๋‹ค.

DELETE๋Š” ํ…Œ์ด๋ธ”์—์„œ ์กฐ๊ฑด์— ๋งž๋Š” ํ–‰๋งŒ ์‚ญ์ œํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์‚ญ์ œ๋œ ๋ฐ์ดํ„ฐ๋Š” ํŠธ๋žœ์žญ์…˜์—์„œ ๋˜๋Œ๋ฆด ์ˆ˜ ์žˆ๋‹ค.


DISTINCT

DISTINCT๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ์—์„œ ์ค‘๋ณต๋œ ๊ฐ’์„ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ค‘๋ณต๋œ ๊ฐ’์„ ๊ฐ€์ง„ ํ–‰์ด ํ•˜๋‚˜๋งŒ ๊ฒฐ๊ณผ์— ๋‚˜ํƒ€๋‚  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ค‘๋ณต์„ ์ œ๊ฑฐํ•˜๋Š” ๊ณผ์ •์—์„œ ์ฟผ๋ฆฌ์˜ ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ๊ฐ€ ํฌ๋‹ค๋ฉด ์„ฑ๋Šฅ์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


SQL Injection

์•…์˜์ ์ธ ์‚ฌ์šฉ์ž๊ฐ€ ์ž„์˜์˜ SQL๋ฌธ์„ ์ฃผ์ž…ํ•˜๊ณ  ์‹คํ–‰๋˜๊ฒŒ ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ๋น„์ •์ƒ์ ์ธ ๋™์ž‘์„ ํ•˜๋„๋ก ์กฐ์ž‘ํ•˜๋Š” ํ–‰์œ„์ด๋‹ค.

์˜ˆ๋ฐฉ ๋ฐฉ๋ฒ•

์ค€๋น„๋œ ๋ฌธ์žฅ(Prepared Statements)์‚ฌ์šฉ: ์ค€๋น„๋œ ๋ฌธ์žฅ์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ ๊ฐ’์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋“ค์–ด๊ฐ€๊ธฐ ์ „์— DBMS๊ฐ€ ๋ฏธ๋ฆฌ ์ปดํŒŒ์ผํ•˜์—ฌ ์‹คํ–‰ํ•˜์ง€ ์•Š๊ณ  ๋Œ€๊ธฐํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด์„œ ๋‹จ์ˆœ ๋ฌธ์ž์—ด์„ ์ธ์‹ํ•ด ๊ณต๊ฒฉ์ž์˜ ์˜๋„๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค.

์ž…๋ ฅ๊ฐ’์˜ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ: ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ์ž…๋ ฅ๊ฐ’์„ ๊ฒ€์‚ฌํ•˜์—ฌ ์˜ˆ์ƒํ•˜์ง€ ๋ชปํ•œ ๋ฌธ์ž๋‚˜ SQL ๊ตฌ๋ฌธ์„ ์ œ๊ฑฐํ•˜๊ฑฐ๋‚˜ ์ฒ˜๋ฆฌํ•œ๋‹ค.

์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ๋…ธ์ถœ ๊ธˆ์ง€: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—๋Ÿฌ ๋ฐœ์ƒ ์‹œ ๋”ฐ๋กœ ์ฒ˜๋ฆฌํ•ด ์ฃผ์ง€ ์•Š์•˜๋‹ค๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ ์ฟผ๋ฆฌ๋ฌธ๊ณผ ํ•จ๊ป˜ ์—๋Ÿฌ์— ๊ด€ํ•œ ๋‚ด์šฉ์„ ๋ฐ˜ํ™˜ํ•ด์ค€๋‹ค. ์—ฌ๊ธฐ์„œ ํ…Œ์ด๋ธ”๋ช… ๋ฐ ์ปฌ๋Ÿผ๋ช… ๊ทธ๋ฆฌ๊ณ  ์ฟผ๋ฆฌ๋ฌธ์ด ๋…ธ์ถœ๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์˜ค๋ฅ˜ ๋ฐœ์ƒ ์‹œ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ฃผ๋Š” ํŽ˜์ด์ง€๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค.

1๊ฐœ์˜ ๋Œ“๊ธ€

comment-user-thumbnail
2023๋…„ 8์›” 4์ผ

๊ธ€ ์žฌ๋ฏธ์žˆ๊ฒŒ ๋ดค์Šต๋‹ˆ๋‹ค.

๋‹ต๊ธ€ ๋‹ฌ๊ธฐ