๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Database/Do it! SQL ์ž…๋ฌธ

[Do it! SQL ์ž…๋ฌธ] ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ SQL์˜ ๊ธฐ์ดˆ

01-1. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๊ธฐ๋ณธ ๊ฐœ๋…

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ž€

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

 

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ํ•„์š”ํ•œ ์ด์œ 

  • ๋ฐ์ดํ„ฐ ์ค‘๋ณต์„ ์ตœ์†Œํ™”ํ•ด์„œ ์กฐ์ง์˜ ๋ชฉ์ ์— ๋งž๊ฒŒ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•จ

 

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ISOS์™€ R1C3์œผ๋กœ ์ •๋ฆฌํ•œ๋‹ค.

 

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” DBMS๋กœ ๊ด€๋ฆฌํ•œ๋‹ค

DBMS: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ ์‹œ์Šคํ…œ → ๋ฐ์ดํ„ฐ์˜ ์ž…๋ ฅ, ์ˆ˜์ •, ์‚ญ์ œ ๋“ฑ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ๋ณ„๋„์˜ ์†Œํ”„ํŠธ์›จ์–ด

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(DB): ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๋Š” ํ†ต
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ ์‹œ์Šคํ…œ(DBMS): ์ด ํ†ต์„ ๊ด€๋ฆฌํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด

 

01-2. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ข…๋ฅ˜

๊ณ„์ธตํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

๊ณ„์ธตํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋ถ€๋ชจ์™€ ์ž์‹ ๊ด€๊ณ„๋ฅผ ์ด๋ฃจ๋Š” ํŠธ๋ฆฌ ๊ตฌ์กฐ์ด๋‹ค. ๋‹ค์Œ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ๋ถ€๋ชจ ๋ ˆ์ฝ”๋“œ๊ฐ€ ์—ฌ๋Ÿฌ ์ž์‹ ๋ ˆ์ฝ”๋“œ๋ฅผ ๊ฐ€์ง„๋‹ค.

https://velog.io/@yeomyaloo/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EA%B0%9C%EB%85%90-%EC%9E%A1%EA%B8%B0-1.-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4

 

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

 

๋„คํŠธ์›Œํฌํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

๋„คํŠธ์›Œํฌํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋…ธ๋“œ๋กœ ํ‘œํ˜„ํ•œ ๋ชจ๋ธ์ด๋‹ค. ๋…ธ๋“œ๋Š” ๋„คํŠธ์›Œํฌ์ƒ์— ์žˆ์œผ๋ฉฐ ์„œ๋กœ ๋Œ€๋“ฑํ•œ ๊ด€๊ณ„๋‹ค. ๋„คํŠธ์›Œํฌํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๊ณ„์ธตํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋‹จ์ ์ธ ๋ฐ์ดํ„ฐ ์ค‘๋ณต ๋ฌธ์ œ, ์ƒํ•˜ ์ข…์† ๊ด€๊ณ„๋ฅผ ํ•ด๊ฒฐํ–ˆ๋‹ค.

https://velog.io/@yeomyaloo/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EA%B0%9C%EB%85%90-%EC%9E%A1%EA%B8%B0-1.-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4

 

 

๋„คํŠธ์›Œํฌํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๋ ˆ์ฝ”๋“œ ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ์ผ๋Œ€๋‹ค ๋˜๋Š” ๋‹ค๋Œ€๋‹ค๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ข…์†์„ฑ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๊ธฐ ์‰ฌ์›Œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌ์กฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ธฐ ์–ด๋ ต๋‹ค.

 

ํ‚ค-๊ฐ’ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

ํ‚ค-๊ฐ’ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” NoSQL์˜ ํ•œ ์ข…๋ฅ˜๋กœ ํ‚ค-๊ฐ’์„ ์ผ๋Œ€์ผ ๋Œ€์‘ํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ๋‹ค. ๋ฐ์ดํ„ฐ ์ค‘๋ณต์ด ๋ฐœ์ƒํ•˜๋ฉฐ ๋น„์ •ํ˜• ๋ฐ์ดํ„ฐ ์ €์žฅ์— ์œ ๋ฆฌํ•˜๋‹ค.

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

https://www.dataversity.net/key-value-database/
https://en.wikipedia.org/wiki/Key%E2%80%93value_database

 

ํ‚ค-๊ฐ’ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํŠน์ง•์€ ์Šคํ‚ค๋งˆ ์—†์ด ์ž‘๋™ํ•œ๋‹ค๋Š” ์ ์ด๋‹ค. ๋”ฐ๋ผ์„œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ๋ฏธ๋ฆฌ ์ •์˜ํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋ฉฐ ์‹œ๊ฐ„์ด ์ง€๋‚˜๋”๋ผ๋„ ์–ธ์ œ๋“ ์ง€ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋น„์ •ํ˜• ๋ฐ์ดํ„ฐ๋ฅผ ์‰ฝ๊ฒŒ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์Šคํ‚ค๋งˆ๋ž€, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๊ตฌ์กฐ์™€ ์ œ์•ฝ ์กฐ๊ฑด์— ๋Œ€ํ•˜์—ฌ ์ „๋ฐ˜์ ์ธ ๋ช…์„ธ๋ฅผ ๊ธฐ์ˆ ํ•œ ๊ฒƒ์„ ๋งํ•œ๋‹ค. ์ฆ‰, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์ž๋ฃŒ ๊ฐœ์ฒด์˜ ์„ฑ์งˆ, ๊ด€๊ณ„, ์กฐ์ž‘, ์ž๋ฃŸ๊ฐ’ ๋“ฑ์˜ ์ •์˜๋ฅผ ์ด์นญํ•œ ๊ฒƒ์ด๋‹ค.

ํ‚ค-๊ฐ’ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” NoSQL์˜ ํ•œ ์ข…๋ฅ˜์ด๋‹ค. NoSQL์— ๋Œ€ํ•ด์„œ ๊ฐ„๋žตํ•˜๊ฒŒ ์‚ดํŽด๋ณด๊ณ  ๋„˜์–ด๊ฐ€์ž.

 

๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ์‹ค๋ฌด์—์„œ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ข…๋ฅ˜์˜ ํ•˜๋‚˜์ด๋‹ค. ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํ…Œ์ด๋ธ” ํ˜•ํƒœ๋กœ ์ €์žฅํ•œ๋‹ค. 

https://www.codecademy.com/resources/docs/general/database/relational-database

 

  • ์—ด: ๊ฐ ์—ด์€ ๊ณ ์œ ํ•œ ์ด๋ฆ„์„ ๊ฐ€์ง€๋ฉฐ ์ž์‹ ๋งŒ์˜ ํƒ€์ž…์„ ๊ฐ€์ง„๋‹ค. ์—ด์€ ํ•„๋“œ(field) ๋˜๋Š” ์• ํŠธ๋ฆฌ๋ทฐํŠธ(attribue)๋ผ๊ณ ๋„ ํ•œ๋‹ค. 
  • ํ–‰: ๊ด€๊ณ„๋œ ๋ฐ์ดํ„ฐ์˜ ๋ฌถ์Œ์„ ์˜๋ฏธํ•˜๋ฉฐ ํ•œ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ํ–‰์€ ๊ฐ™์€ ์ˆ˜์˜ ์—ด์„ ๊ฐ€์ง„๋‹ค. ํ–‰์€ ํŠœํ”Œ(tuple) ๋˜๋Š” ๋ ˆ์ฝ”๋“œ(record)๋ผ๊ณ ๋„ ํ•œ๋‹ค.
  • ํ…Œ์ด๋ธ”: ํ–‰๊ณผ ์—ด ๊ฐ’๋“ค์˜ ๋ชจ์Œ์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ๋„๋ฉ”์ธ ํŠน์„ฑ์— ๋”ฐ๋ผ ๋ฐ์ดํ„ฐ๋ฅผ ๋…ผ๋ฆฌ์ ์œผ๋กœ ๊ทธ๋ฃนํ™”ํ•ด ๋†“์€ ๊ฒƒ์ด๋‹ค.

ERD๋กœ ์ดํ•ดํ•˜๋Š” ํ…Œ์ด๋ธ” ๊ด€๊ณ„

  • ํ…Œ์ด๋ธ” ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ํ‘œํ˜„ํ•œ ๊ทธ๋ฆผ์„ ERD๋ผ๊ณ  ํ•œ๋‹ค.
    • ๋…ผ๋ฆฌ ๋ชจ๋ธ: ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์˜ ์ฒซ ๋‹จ๊ณ„๋กœ ๊ณ ๊ฐ์˜ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ˆ˜์ง‘, ๋ถ„์„ํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ „์ฒด ๋ชจ์–‘์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ
    • ๋ฌผ๋ฆฌ ๋ชจ๋ธ: ๋…ผ๋ฆฌ ๋ชจ๋ธ์„ ๋ฐ”ํƒ•์œผ๋กœ ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋ธ์„ ํ‘œํ˜„ํ•œ ๊ฒƒ

https://www.heavy.ai/technical-glossary/relational-database

 

01-3. SQL์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€

SQL์€ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ ์‹œ์Šคํ…œ(RDBMS)์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์ด๋‹ค. 1970๋…„๋Œ€์— IBM์—์„œ ์ตœ์ดˆ ๊ฐœ๋ฐœํ–ˆ์œผ๋ฉฐ ๊ด€๊ณ„ํ˜• ๋ชจ๋ธ์ด๋ผ๋Š” ์ด๋ก ์—์„œ ํŒŒ์ƒํ–ˆ๋‹ค. 

 

DBMS ์ข…๋ฅ˜์— ๋”ฐ๋ฅธ SQL ์ข…๋ฅ˜

SQL์€ ๊ตญ์ œ ํ‘œ์ค€ํ™” ๊ธฐ๊ตฌ์—์„œ ํ‘œ์ค€ํ™”ํ•œ ๋ฌธ๋ฒ•์„ ANSI SQL์ด๋ผ๊ณ  ๋ฐœํ‘œํ•œ๋‹ค. ํ•˜์ง€๋งŒ SQL์€ ANSI SQL๋งŒ ์žˆ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ฉฐ DBMS ๊ฐœ๋ฐœ์‚ฌ๋งˆ๋‹ค ๊ฐœ๋ฐœํ•œ ๊ณ ์œ  SQL๋„ ์žˆ๋‹ค. ๋ฌผ๋ก  ๊ทธ SQL์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ช…์นญ ๋˜ํ•œ ๋‹ค๋ฅด๋‹ค. ์œ ๋ช…ํ•œ DBMS์™€ ํ•ด๋‹น DBMS์—์„œ ์ด๋ฆ„ ๋ถ™์ธ SQL์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • SQL Server: Transact-SQL(T-SQL)
  • Oracle: PL/SQL
  • MySQL: SQL
  • ๊ตญ์ œ ํ‘œ์ค€: ANSI SQL

DBMS ๊ฐœ๋ฐœ์‚ฌ๋Š” ANSI SQL์„ ๋”ฐ๋ฆ„๋…€์„œ๋„ ์ œํ’ˆ์— ํŠนํ™”ํ•œ ๋ฌธ๋ฒ•์ด๋‚˜ ๋ช…์„ธ๋ฅผ ์ถ”๊ฐ€ํ•œ SQL์„ ์‚ฌ์šฉํ•œ๋‹ค.

 

SQL ๋ฌธ๋ฒ• ์ข…๋ฅ˜

๋ฐ์ดํ„ฐ ์ •์˜ ์–ธ์–ด(DDL)

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ •์˜ํ•˜๋Š” ์–ธ์–ด์ด๋‹ค. ๋ฐ์ดํ„ฐ ์ •์˜ ์–ธ์–ด๋Š” ํ…Œ์ด๋ธ” ์Šคํ‚ค๋งˆ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์—ญํ• ์„ ํ•˜๋ฉฐ, ๋‹ค์Œ ํ•ญ๋ชฉ์„ ํฌํ•จํ•œ๋‹ค.
    • CREATE
    • ALTER
    • DROP
    • TRUNCATE

๋ฐ์ดํ„ฐ ์กฐ์ž‘ ์–ธ์–ด(DML)

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

๋ฐ์ดํ„ฐ ์ œ์–ด ์–ธ์–ด(DCL)

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘๊ทผํ•˜๊ฑฐ๋‚˜ ๊ฐ์ฒด์— ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๋Š” ๋“ฑ์˜ ์—ญํ• ์„ ํ•˜๋ฉฐ, ๋‹ค์Œ ํ•ญ๋ชฉ์„ ํฌํ•จํ•œ๋‹ค.
    • GRANT
    • REVOKE
    • COMMIT
    • ROLLBACK