๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“Œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ„ฐ๋”” 2์ฃผ์ฐจ

by megan07 2024. 1. 18.

SQL๊ณผ ๋ฒ”์šฉ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ์ฐจ์ด๋Š”?

SQL์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ „์šฉ ์–ธ์–ด์ด๋‹ค.

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ฐ์ดํ„ฐ์™€ ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฌธ๋ฒ•๋งŒ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

SQL์€ ์‚ฌ์šฉ์ž๊ฐ€ ์ฒ˜๋ฆฌ๋ฅผ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฌด์—‡์ธ์ง€๋งŒ ์ œ์‹œํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š”์ง€๋ฅผ ์–ธ๊ธ‰ํ•  ํ•„์š”๊ฐ€ ์—†์–ด

๋น„์ ˆ์ฐจ์  ๋ฐ์ดํ„ฐ ์–ธ์–ด์˜ ํŠน์ง•์„ ๋ค๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

C์–ธ์–ด ๊ฐ™์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋Š” ๋ฒ”์šฉ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ,

์‹œ์Šคํ…œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ, ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ๊ฐœ๋ฐœ, ๊ฒŒ์ž„ ๊ฐœ๋ฐœ ๋“ฑ ๋‹ค์–‘ํ•œ ๋ถ„์•ผ์—์„œ ์‚ฌ์šฉ๋œ๋‹ค.

 

์ด์ฒ˜๋Ÿผ SQL๊ณผ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋Š” ๋ชฉ์ ์—์„œ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.

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

SQL์ด ์‹คํ–‰๋˜๋Š” ๊ณผ์ •์€ ํฌ๊ฒŒ ํŒŒ์‹ฑ, ์ตœ์ ํ™”, ์‹คํ–‰ ์„ธ ๋‹จ๊ณ„๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.

 

1. ํŒŒ์‹ฑ

  • SQL๋ฌธ์žฅ์„ ํ† ํฐ ๋‹จ์œ„๋กœ ๋‚˜๋ˆ ์„œ ๋ฌธ์žฅ์˜ ๊ตฌ์กฐ๋ฅผ ๋ถ„์„ํ•˜๊ณ , ๋ฌธ๋ฒ•์ ์ธ ์˜ค๋ฅ˜๋ฅผ ์ฐพ์•„๋‚ธ๋‹ค.
  • ํ† ํฐ์€ SQL ๋ฌธ๋ฒ•์—์„œ์˜ ๊ธฐ๋ณธ ๋‹จ์œ„๋กœ, ์˜ˆ๋ฅผ ๋“ค๋ฉด ํ‚ค์›Œ๋“œ, ์‹๋ณ„์ž, ์—ฐ์‚ฐ์ž ๋“ฑ์ด ๋  ์ˆ˜ ์žˆ๋‹ค.

2. ์ตœ์ ํ™”:

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

3. ์‹คํ–‰:

  • ์ž‘์—…์„ ์‹คํ–‰ํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

์ตœ์ ํ™” ๋‹จ๊ณ„์—์„œ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—”์ง„์ด ํšจ์œจ์ ์ธ ์‹คํ–‰ ๊ณ„ํš์„ ์„ ํƒํ•˜๊ธฐ ์œ„ํ•ด ์ธ๋ฑ์Šค ์‚ฌ์šฉ, ์กฐ์ธ ์ˆœ์„œ ๋ณ€๊ฒฝ ๋“ฑ์˜ ๋‹ค์–‘ํ•œ ์ตœ์ ํ™” ๊ธฐ๋ฒ•์„ ์ ์šฉํ•œ๋‹ค.

SQL ๊ธฐ๋Šฅ

DML(Data Manipulation Language) - ๋ฐ์ดํ„ฐ ์กฐ์ž‘์–ด

ํ…Œ์ด๋ธ”์— ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰, ์‚ฝ์ž…, ์ˆ˜์ •, ์‚ญ์ œํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•˜๋ฉฐ SELECT, INSERT, DELETE, UPDATE ๋ฌธ ๋“ฑ์ด ์žˆ๋‹ค.

DDL(Data Definition Language) - ๋ฐ์ดํ„ฐ ์ •์˜์–ด

ํ…Œ์ด๋ธ”์ด๋‚˜ ๊ด€๊ณ„์˜ ๊ตฌ์กฐ๋ฅผ ์ƒ์„ฑํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•˜๋ฉฐ CREATE, ALTER, DROP ๋ฌธ๋“ฑ์ด ์žˆ๋‹ค.

DCL(Data Control Language) - ๋ฐ์ดํ„ฐ ์ œ์–ด์–ด

๋ฐ์ดํ„ฐ์˜ ์‚ฌ์šฉ ๊ถŒํ•œ์„ ๊ด€๋ฆฌํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•˜๋ฉฐ GRANT, REVOKE ๋ฌธ ๋“ฑ์ด ์žˆ๋‹ค.

 

 

์ฐธ์กฐ ๋ฌด๊ฒฐ์„ฑ

์ฐธ์กฐ ๋ฌด๊ฒฐ์„ฑ์€ ๊ด€๋ จ ์žˆ๋Š” ํ…Œ์ด๋ธ” ๊ฐ„์˜ ์ผ๊ด€์„ฑ์„ ๋งํ•œ๋‹ค.
ํ…Œ์ด๋ธ”๊ฐ„์˜ ๊ด€๊ณ„๋Š” ๊ธฐ๋ณธํ‚ค์™€ ์™ธ๋ž˜ํ‚ค๋กœ ํ‘œํ˜„๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ฐธ์กฐ ๋ฌด๊ฒฐ์„ฑ์„ ์ง€ํ‚ค๊ธฐ ์œ„ํ•ด์„œ๋Š”
์ฐธ์กฐ ๋ฌด๊ฒฐ์„ฑ ์ œ์•ฝ์กฐ๊ฑด(=์™ธ๋ž˜ํ‚ค ์ œ์•ฝ์กฐ๊ฑด)์— ๋”ฐ๋ผ์•ผ ํ•œ๋‹ค.

์™ธ๋ž˜ํ‚ค์˜ ์ œ์•ฝ์กฐ๊ฑด

1. ๋ถ€๋ชจ ๋ฆด๋ ˆ์ด์…˜(์ฐธ์กฐ๋˜๋Š” ๋ฆด๋ ˆ์ด์…˜)์˜ ๊ธฐ๋ณธํ‚ค์™€ ์ž์‹ ๋ฆด๋ ˆ์ด์…˜(์ฐธ์กฐํ•˜๋Š” ๋ฆด๋ ˆ์ด์…˜)์˜ ์™ธ๋ž˜ํ‚ค๋Š” ๋„๋ฉ”์ธ์ด ๋™์ผํ•ด์•ผ ํ•œ๋‹ค.

2. ์™ธ๋ž˜ํ‚ค๋Š” ๋ถ€๋ชจ ๋ฆด๋ ˆ์ด์…˜์˜ ๊ธฐ๋ณธํ‚ค์— ์กด์žฌํ•˜๋Š” ๊ฐ’์ด์–ด์•ผ ํ•œ๋‹ค. (๋‹ค๋งŒ NULL๊ฐ’์€ ์‚ฌ์šฉ์ด ํ—ˆ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค.)

3. ์ž์‹ ๋ฆด๋ ˆ์ด์…˜์—์„œ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š” ๊ฐ’์„ ๋ถ€๋ชจ ๋ฆด๋ ˆ์ด์…˜์—์„œ ์‚ฝ์ž…, ์‚ญ์ œ, ์ˆ˜์ •ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ œ์•ฝ์กฐ๊ฑด ์˜ต์…˜์— ๋”ฐ๋ผ์•ผ ํ•œ๋‹ค.

 

์‚ฝ์ž…

์ž์‹ ๋ฆด๋ ˆ์ด์…˜์— ์ƒˆ๋กœ์šด ํˆฌํ”Œ์„ ์‚ฝ์ž…ํ•  ๋•Œ์—๋Š”

1. ๋„๋ฉ”์ธ ๋ฌด๊ฒฐ์„ฑ ์ œ์•ฝ ์กฐ๊ฑด์„ ํ™•์ธ

2. ๊ฐœ์ฒด ๋ฌด๊ฒฐ์„ฑ ์ œ์•ฝ์กฐ๊ฑด์— ์œ„๋ฐฐ๋˜๋Š” ๊ฐ’์ด ์—†๋Š”์ง€ ํ™•์ธ

3. ์™ธ๋ž˜ํ‚ค ๊ฐ’์ด ๋ถ€๋ชจ ๋ฆด๋ ˆ์ด์…˜์˜ ๊ธฐ๋ณธ๊ธฐ์— ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค

4. ๋ชจ๋“  ์ œ์•ฝ์กฐ๊ฑด์— ์œ„๋ฐฐ๋˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์‚ฝ์ž… (NULL๊ฐ’์„ ํ—ˆ์šฉํ–ˆ๋‹ค๋ฉด ์™ธ๋ž˜ํ‚ค๊ฐ’์ด ์—†์–ด๋„ ๊ฐ€๋Šฅ)

 

์‚ญ์ œ

๋ช…๋ น์–ด ์˜๋ฏธ
RESTRICTED ์ž์‹ ๋ฆด๋ ˆ์ด์…˜์—์„œ ์ฐธ์กฐํ•˜๊ณ  ์žˆ์„ ๊ฒฝ์šฐ ๋ถ€๋ชจ ๋ฆด๋ ˆ์ด์…˜์˜ ์‚ญ์ œ ์ž‘์—… ๊ฑฐ๋ถ€
CASCADE ์ž์‹ ๋ฆด๋ ˆ์ด์…˜์˜ ๊ด€๋ จ ํˆฌํ”Œ์„ ๊ฐ™์ด ์‚ญ์ œ
DEFAULT ์ž์‹ ๋ฆด๋ ˆ์ด์…˜์˜ ์™ธ๋ž˜ํ‚ค๋ฅผ ๋””ํดํŠธ ๊ฐ’์œผ๋กœ ๋ณ€๊ฒฝ
NULL ์ž์‹ ๋ฆด๋ ˆ์ด์…˜์˜ ์™ธ๋ž˜ํ‚ค๋ฅผ NULL๊ฐ’์œผ๋กœ ๋ณ€๊ฒฝ

 

 

์ˆ˜์ •

์ˆ˜์ •์€ ์‚ญ์ œ์™€ ์‚ฝ์ž… ๋ช…๋ น์ด ์—ฐ์†ํ•ด์„œ ์ˆ˜ํ–‰๋œ๋‹ค๊ณ  ๋ณด๋ฉด ๋œ๋‹ค

๋ถ€๋ชจ ๋ฆด๋ ˆ์ด์…˜์˜ ์ˆ˜์ •์ด ์ผ์–ด๋‚  ๊ฒฝ์šฐ ์‚ญ์ œ ์˜ต์…˜์— ๋”ฐ๋ผ ์ฒ˜๋ฆฌ๋œ ํ›„ ๋ฌธ์ œ๊ฐ€ ์—†์œผ๋ฉด ๋‹ค์‹œ ์‚ฝ์ž… ์ œ์•ฝ ์กฐ๊ฑด์— ๋”ฐ๋ผ ์ฒ˜๋ฆฌ๋œ๋‹ค.

 

ON DELETE CASCADE

- ๋ถ€๋ชจ ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•  ๊ฒฝ์šฐ ์—ฐ๊ฒฐ๋œ ์ž์‹ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ๋„ ํ•จ๊ป˜ ์‚ญ์ œ๋œ๋‹ค.

ON UPDATE CASCADE

- ๋ถ€๋ชจ ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ˆ˜์ •๋  ๊ฒฝ์šฐ ์—ฐ๊ฒฐ๋œ ์ž์‹ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ๋„ ํ•จ๊ป˜ ์ˆ˜์ •๋œ๋‹ค.

 

VIEW

DB์— ์กด์žฌํ•˜๋Š” ๊ฐ€์ƒ ํ…Œ์ด๋ธ”์ด๋‹ค.

์‹ค์ œ ํ…Œ์ด๋ธ”์ฒ˜๋Ÿผ ํ–‰๊ณผ ์—ด์„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€๋งŒ ์‹ค์ œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ์žˆ์ง€๋Š” ์•Š๊ณ , ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ์—ญํ• ๋งŒ ์ˆ˜ํ–‰ํ•œ๋‹ค.

SQL๋กœ ์ƒ์„ฑํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ทฐ๋ฅผ ํ†ตํ•ด ๊ฐ€์ƒ ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค์–ด ํŽธ๋ฆฌํ•˜๊ณ  ๋น ๋ฅด๊ฒŒ ๋ฐ์ดํ„ฐ ์กฐํšŒ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

VIEW ์žฅ์ 

- ๋ฏธ๋ฆฌ ์ •์˜ ๋œ ๋ทฐ๋ฅผ ์ผ๋ฐ˜ ํ…Œ์ด๋ธ”์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ  ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ด์„œ ํŽธ๋ฆฌํ•˜๋‹ค.

- ํŠน์ • ์ •๋ณด๋งŒ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์–ด ๋ณด์•ˆ์„ฑ์ด ๋†’๋‹ค.

 

VIEW ๋‹จ์ 

- ํ•œ๋ฒˆ ์ •์˜๋œ ๋ทฐ๋Š” ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค.

- ๋…๋ฆฝ์ ์ธ ์ธ๋ฑ์Šค๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์—†๋‹ค.

- ๋ทฐ๋กœ ๊ตฌ์„ฑ๋œ ๋‚ด์šฉ์— ๋Œ€ํ•œ ์‚ฝ์ž…, ์‚ญ์ œ, ์ˆ˜์ •์— ์ œ์•ฝ์ด ๋”ฐ๋ฅธ๋‹ค.

SQL ์งˆ์˜ ์ฒ˜๋ฆฌ ์ˆœ์„œ

FROM and JOIN -> WHERE -> GROUP BY -> HAVING -> SELECT -> DISTINCT -> ORDER BY -> LIMIT

SELECT FOR UPDATE

ํŠน์ • ํ–‰์„ ์„ ํƒํ•œ ํ›„, ํ•ด๋‹น ํ–‰์— ๋Œ€ํ•œ ์ž ๊ธˆ(lock)์„ ์„ค์ •ํ•˜๋Š” SQL ๊ตฌ๋ฌธ

๋™์‹œ์„ฑ ์ œ์–ด๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.

์—ฌ๋Ÿฌ ํŠธ๋žœ์žญ์…˜ ๊ฐ„์— ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๊ณ , ๋™์‹œ์— ์—ฌ๋Ÿฌ ํŠธ๋žœ์žญ์…˜์ด ๋™์ผํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๋ ค๊ณ  ํ•  ๋•Œ ์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.

GROUP BY

์ง€์ •๋œ ์—ด์—์„œ ๋™์ผํ•œ ๊ฐ’์„ ๊ฐ€์ง„ ํ–‰์„ ํ•˜๋‚˜์˜ ๊ทธ๋ฃน์œผ๋กœ ๋ฌถ์–ด์ฃผ๋Š”๋ฐ ์‚ฌ์šฉํ•˜๋Š” SQL ๋ช…๋ น์–ด

COUNT(), MAX(), MIN(), SUM(), AVG() ๋“ฑ ์ง‘๊ณ„ ํ•จ์ˆ˜์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋œ๋‹ค.

GROUP BY์—์„œ SELECT ํ• ์ˆ˜ ์žˆ๋Š” ์นผ๋Ÿผ์€ GROUP BY์— ๋‚˜์—ด๋œ ์นผ๋Ÿผ ํ˜น์€ ์ง‘๊ณ„ํ•จ์ˆ˜์ด๋‹ค.

 

ORDER BY

ORDER BY ์ ˆ์€ SQL ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ์ •๋ ฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.

์ •๋ ฌ์€ ์ฃผ๋กœ ํŠน์ • ์—ด์„ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ(ASC)์ด๋‚˜ ๋‚ด๋ฆผ์ฐจ์ˆœ(DESC)์œผ๋กœ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.

ASC๊ฐ€ ๊ธฐ๋ณธ์œผ๋กœ ์ ์šฉ๋œ๋‹ค.

SELECT column1, column2, ... 
FROM table_name 
ORDER BY column1 [ASC|DESC], column2 [ASC|DESC],...;

 

 

HAVING

HAVING์ ˆ์€ GROUP BY ์ ˆ์˜ ๊ฒฐ๊ณผ ๋‚˜ํƒ€๋‚˜๋Š” ๊ทธ๋ฃน์„ ์ œํ•œํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

 

์—ฌ๋Ÿฌ ๊ฐ€์ง€ JOIN

INNER JOIN: ๋‘ ํ…Œ์ด๋ธ” ๊ฐ„์— ์ผ์น˜ํ•˜๋Š” ํ–‰๋งŒ์„ ๋ฐ˜ํ™˜

SELECT * 
FROM table1 
INNER JOIN table2 ON table1.column = table2.column;

 

OUTER JOIN: ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ํ–‰๋„ ๊ฒฐ๊ณผ์— ํฌํ•จ

 

LEFT OUTER JOIN: ์™ผ์ชฝ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ํ–‰์„ ํฌํ•จํ•˜๊ณ , ์˜ค๋ฅธ์ชฝ ํ…Œ์ด๋ธ”๊ณผ ์ผ์น˜ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ํ•ด๋‹น ํ–‰์„ ํฌํ•จ

 

RIGHT OUTER JOIN: ์˜ค๋ฅธ์ชฝ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ํ–‰์„ ํฌํ•จํ•˜๊ณ , ์™ผ์ชฝ ํ…Œ์ด๋ธ”๊ณผ ์ผ์น˜ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ํ•ด๋‹น ํ–‰์„ ํฌํ•จ

 

CROSS JOIN์€ ๋‘ ํ…Œ์ด๋ธ” ๊ฐ„์˜ ๋ชจ๋“  ๊ฐ€๋Šฅํ•œ ์กฐํ•ฉ์„ ๋ฐ˜ํ™˜

๊ฒฐ๊ณผ๋Š” ์ฒซ ๋ฒˆ์งธ ํ…Œ์ด๋ธ”์˜ ๊ฐ ํ–‰๊ณผ ๋‘ ๋ฒˆ์งธ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ํ–‰์˜ ๊ฒฐํ•ฉ

 

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

์„œ๋ธŒ์ฟผ๋ฆฌ๋Š” ๋‹ค๋ฅธ ์ฟผ๋ฆฌ ์•ˆ์— ํฌํ•จ๋œ ์ฟผ๋ฆฌ๋กœ, ์™ธ๋ถ€ ์ฟผ๋ฆฌ์˜ ์กฐ๊ฑด์— ๋”ฐ๋ผ ๊ฒฐ๊ณผ๊ฐ€ ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝ๋œ๋‹ค.

์„œ๋ธŒ์ฟผ๋ฆฌ๋Š” SELECT, FROM, WHERE, HAVING, ๋“ฑ ์—ฌ๋Ÿฌ ๋ถ€๋ถ„์—์„œ ์‚ฌ์šฉ๋œ๋‹ค.

SELECT column1 
FROM table1 
WHERE column2 = (SELECT column3 FROM table2 WHERE condition);



DROP

ํ…Œ์ด๋ธ” ์ž์ฒด๋ฅผ ์‚ญ์ œํ•œ๋‹ค.

ํ…Œ์ด๋ธ” ๊ตฌ์กฐ์™€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ ์‚ญ์ œํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฃผ์˜ํ•ด์•ผ ํ•œ๋‹ค.

DROP TABLE table_name; TRUNCATE: 

TRUNCATE

ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ํ–‰์„ ์‚ญ์ œํ•˜์ง€๋งŒ ํ…Œ์ด๋ธ” ๊ตฌ์กฐ๋Š” ์œ ์ง€ํ•œ๋‹ค.

๋กค๋ฐฑ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฉฐ ๋น ๋ฅด๊ฒŒ ์ˆ˜ํ–‰๋œ๋‹ค.

TRUNCATE TABLE table_name; 

DELETE

ํ…Œ์ด๋ธ”์˜ ํ–‰์„ ์‚ญ์ œํ•œ๋‹ค.

๋กค๋ฐฑ์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ ์กฐ๊ฑด์— ๋”ฐ๋ผ ํŠน์ • ํ–‰์„ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋‹ค.

DELETE column1
FROM table_name 
WHERE condition;  

DISTINCT

DISTINCT๋Š” ์ค‘๋ณต๋œ ๊ฐ’์„ ์ œ๊ฑฐํ•˜์—ฌ ๊ฒฐ๊ณผ ์ง‘ํ•ฉ์—์„œ ๊ณ ์œ ํ•œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

SELECT DISTINCT column1, column2, ... 
FROM table_name; 

 

SQL Injection

 

SQL Injection์€ ์•…์˜์ ์ธ ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅ ํ•„๋“œ์— SQL ์ฝ”๋“œ๋ฅผ ์‚ฝ์ž…ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๊ณต๊ฒฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

์˜ˆ๋ฐฉํ•˜๊ธฐ ์œ„ํ•ด ์ž…๋ ฅ ๊ฐ’์„ ๊ฒ€์ฆํ•˜๊ณ , ํŒŒ๋ผ๋ฏธํ„ฐํ™”๋œ ์ฟผ๋ฆฌ ๋˜๋Š” ํ”„๋ฆฌํŽ˜์–ด๋“œ ์Šคํ…Œ์ดํŠธ๋จผํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.

 

SQL ์•ˆํ‹ฐํŒจํ„ด

 

SELECT * : ๋ชจ๋“  ์—ด์„ ์„ ํƒํ•˜๋Š” ๊ฒƒ์€ ๋ถˆํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ ์ „์†ก์„ ์œ ๋ฐœํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—

ํ•„์š”ํ•œ ์—ด๋งŒ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

 

Non-SARGable WHERE์ ˆ:

SARGable(Search ARGument Able)์ด ์•„๋‹Œ WHERE ์ ˆ์€ ์ธ๋ฑ์Šค๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

ํŽ˜์ด์ง€๋„ค์ด์…˜์„ ๊ตฌํ˜„ํ•  ๋•Œ์˜ ์ฟผ๋ฆฌ

ํŽ˜์ด์ง€๋„ค์ด์…˜์„ ๊ตฌํ˜„ํ•  ๋•Œ๋Š” LIMIT ๋ฐ OFFSET์„ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ๋ฒ”์œ„์˜ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, 10๊ฐœ์”ฉ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒฝ์šฐ:

SELECT column1, column2, ... 
FROM table_name LIMIT 10 OFFSET 0; -- ์ฒซ ๋ฒˆ์งธ ํŽ˜์ด์ง€ 
SELECT column1, column2, ... 
FROM table_name LIMIT 10 OFFSET 10; -- ๋‘ ๋ฒˆ์งธ ํŽ˜์ด์ง€

 

 

MySQL์—์„œ ํŽ˜์ด์ง€๋„ค์ด์…˜์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ๋ฒ•์€ LIMIT ๋ฐ OFFSET์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด์ง€๋งŒ,

๋Œ€๊ทœ๋ชจ ํ…Œ์ด๋ธ”์—์„œ๋Š” OFFSET์„ ์‚ฌ์šฉํ•  ๋•Œ ์„ฑ๋Šฅ ์ด์Šˆ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋” ํšจ์œจ์ ์ธ ํŽ˜์ด์ง€๋„ค์ด์…˜์„ ์œ„ํ•ด OFFSET์„ ํ”ผํ•˜๊ณ , LIMIT๊ณผ OFFSET ๋Œ€์‹ ์— WHERE ์กฐ๊ฑด์„ ์‚ฌ์šฉํ•˜์—ฌ ํŽ˜์ด์ง€ ๋ฒ”์œ„๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

SELECT *
FROM users
WHERE user_id > 0  -- ์ ์ ˆํ•œ ๊ธฐ์ค€ ๊ฐ’์œผ๋กœ ๋ณ€๊ฒฝ
ORDER BY user_id
LIMIT @PageSize;