SQLD

๊น€๊ธฐํ›ˆยท2025๋…„ 10์›” 19์ผ

์ž๊ฒฉ์ฆ

๋ชฉ๋ก ๋ณด๊ธฐ
1/5
post-thumbnail

๐Ÿ“˜ SQLD 3์ฃผ ์™„์„ฑ ๊ณต๋ถ€ ํ”Œ๋žœ

๐ŸŽฏ ๋ชฉํ‘œ: SQLD ํ•ฉ๊ฒฉ (60์  ์ด์ƒ, ์—ฌ์œ  ์žˆ๊ฒŒ 70์  ๋ชฉํ‘œ)
โฐ ๊ธฐ๊ฐ„: 3์ฃผ (21์ผ)
๐Ÿงฉ ํ•˜๋ฃจ 2~3์‹œ๊ฐ„ ๊ธฐ์ค€
๐Ÿ“˜ ์‚ฌ์šฉ ๊ต์žฌ: ์—๋“€์œŒ 2์ฃผ ์™„์„ฑ / ๋‚ด์ผ์€ SQL ๊ฐœ๋ฐœ์ž / ๋ฌด๋ฃŒ ๊ธฐ์ถœ PDF


๐Ÿ“‘ ๋ชฉ์ฐจ

  1. Week 1 โ€” ์ด๋ก  ์ง‘์ค‘๊ธฐ
  2. Week 2 โ€” ๊ธฐ์ถœ ์ง‘์ค‘๊ธฐ
  3. Week 3 โ€” ์‹ค์ „ ์™„์„ฑ๊ธฐ
  4. ์ฐธ๊ณ  ์ž๋ฃŒ
  5. ๊ณต๋ถ€ ํŒ

๐Ÿ—“๏ธ Week 1 โ€” ์ด๋ก  ์ง‘์ค‘๊ธฐ (๊ฐœ๋… ๊ธฐ๋ฐ˜ ๋‹ค์ง€๊ธฐ)

๋‚ ์งœํ•™์Šต ์ฃผ์ œ์„ธ๋ถ€ ๋‚ด์šฉ์ง„ํ–‰
โœ… Day 1๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง ๊ธฐ์ดˆ์—”ํ„ฐํ‹ฐ, ์†์„ฑ, ๊ด€๊ณ„ ๊ฐœ๋… ์ดํ•ด2025/10/19 [Y]
โœ… Day 2์ •๊ทœํ™”1~3์ •๊ทœํ˜• + ์ด์ƒํ˜„์ƒ + ์‹๋ณ„์ž ์ •๋ฆฌ2025/10/19 [Y]
โœ… Day 3ERD ์‹ค์ŠตํšŒ์›โ€“์ฃผ๋ฌธโ€“์ƒํ’ˆ ERD ์ง์ ‘ ์ž‘์„ฑ2025/10/19 [Y]
โœ… Day 4SQL ๊ธฐ๋ณธ ๋ฌธ๋ฒ•SELECT / FROM / WHERE / GROUP BY2025/10/20 [Y]
โœ… Day 5DDL & DMLCREATE, INSERT, UPDATE, DELETE2025/10/20 [Y]
โœ… Day 6์กฐ์ธ(JOIN) ๊ธฐ์ดˆINNER / LEFT / RIGHT / SELF JOIN2025/10/21 [Y]
โœ… Day 71์ฃผ์ฐจ ๋ณต์Šต์ •๊ทœํ™” + ERD + SQL๋ฌธ ์ง์ ‘ ์ž‘์„ฑ2025/10/25 [Y]

๐Ÿ—“๏ธ Week 2 โ€” ๊ธฐ์ถœ ์ง‘์ค‘๊ธฐ (์œ ํ˜• ๊ฐ ์žก๊ธฐ)

๋‚ ์งœํ•™์Šต ์ฃผ์ œ์„ธ๋ถ€ ๋‚ด์šฉ์ง„ํ–‰
โœ… Day 845ํšŒ ๊ธฐ์ถœ 1๊ณผ๋ชฉ๋ฐ์ดํ„ฐ๋ชจ๋ธ๋ง ๋ฌธ์ œํ’€์ด + ํ•ด์„ค ๋ถ„์„[ ]
โœ… Day 945ํšŒ ๊ธฐ์ถœ 2๊ณผ๋ชฉSQL ํ™œ์šฉ ๋ฌธ์ œํ’€์ด + ์˜ค๋‹ต์ •๋ฆฌ[ ]
โœ… Day 1046ํšŒ ๊ธฐ์ถœJOIN, GROUP BY, ์„œ๋ธŒ์ฟผ๋ฆฌ ์ค‘์‹ฌ[ ]
โœ… Day 11๋ณต์Šต + SQL ํ•จ์ˆ˜COUNT, SUM, NVL, CASE WHEN ๋“ฑ[ ]
โœ… Day 1247ํšŒ ๊ธฐ์ถœ๋ณตํ•ฉ SELECT / HAVING / ORDER BY[ ]
โœ… Day 13์กฐ์ธ & ์„œ๋ธŒ์ฟผ๋ฆฌ ์‹ฌํ™”์‹ค๋ฌดํ˜• ๋ฌธ์ œ ์œ„์ฃผ ๋ณต์Šต[ ]
โœ… Day 14๋ชจ์˜๊ณ ์‚ฌ 1ํšŒ์ฐจ์‹ค์ œ ์‹œํ—˜์ฒ˜๋Ÿผ 90๋ถ„ ํƒ€์ด๋จธ ํ’€๊ธฐ[ ]

๐Ÿ—“๏ธ Week 3 โ€” ์‹ค์ „ ์™„์„ฑ๊ธฐ (์‹ค์ œ ๊ฐ๊ฐ & ์•ฝ์  ๋ณด์™„)

๋‚ ์งœํ•™์Šต ์ฃผ์ œ์„ธ๋ถ€ ๋‚ด์šฉ์ง„ํ–‰
โœ… Day 1555ํšŒ ๊ธฐ์ถœ์ตœ์‹  ๊ธฐ์ถœ ์œ ํ˜• ํŒŒ์•…[ ]
โœ… Day 1656ํšŒ ๊ธฐ์ถœํ•จ์ˆ˜ + ์„œ๋ธŒ์ฟผ๋ฆฌ ์‘์šฉ ๋ฌธ์ œ[ ]
โœ… Day 17๋ณต์Šต + ์˜ค๋‹ต๋…ธํŠธ์ž์ฃผ ํ‹€๋ฆฐ ๊ฐœ๋… ์ •๋ฆฌ[ ]
โœ… Day 18์‹ค์ „๋ชจ์˜๊ณ ์‚ฌ 2ํšŒ์ฐจ์‹œ๊ฐ„ ์žฌ๋ฉฐ ํ’€๊ธฐ (์‹ค์ „ ๋ชจ๋“œ)[ ]
โœ… Day 19์•ฝ์  ์ง‘์ค‘ ๋ณต์Šต์ •๊ทœํ™”, ์‹๋ณ„์ž, ์กฐ์ธ ๋‹ค์‹œ๋ณด๊ธฐ[ ]
โœ… Day 20์š”์•ฝ๋…ธํŠธ ์ด์ •๋ฆฌ์‹œํ—˜ ์ง์ „ ํ•ต์‹ฌ ํ‚ค์›Œ๋“œ ๋ณต์Šต[ ]
โœ… Day 21ํœด์‹ & ์ปจ๋””์…˜ ์กฐ์ ˆ์ถฉ๋ถ„ํ•œ ์ˆ˜๋ฉด & ์‹œํ—˜ ๋Œ€๋น„ ๋งˆ์ธ๋“œ์…‹[ ]

๐Ÿ“š ์ฐธ๊ณ  ์ž๋ฃŒ

๋ถ„๋ฅ˜๋งํฌ
๐Ÿ“„ ๊ธฐ์ถœ๋ฌธ์ œ PDF ๋ชจ์Œ (45~50ํšŒ)eun-developer.tistory.com/130
๐Ÿ“˜ ํ•ต์‹ฌ์š”์•ฝ์ •๋ฆฌ PDF (๋ธŒ๋Ÿฐ์น˜)brunch.co.kr/@wikibook/53
๐Ÿงฉ 57ํšŒ ๋ณต์›๋ฌธ์ œepassbiz.com/board/restore_exam.asp
๐Ÿ’ฌ SQL ์‹ค์Šต ์‚ฌ์ดํŠธSQL Fiddle / w3schools SQL

Day 1 ~ Day 7 ์ฒ˜์Œ ์ด๋ก  ์ •๋ฆฌ


Day 1

๋ชจ๋ธ๋ง

  • ํ˜„์‹ค ์„ธ๊ณ„์˜ ๋ณต์žกํ•œ ํ˜„์ƒ์ด๋‚˜ ์‚ฌ๋ฌผ์„ ๋‹จ์ˆœํ™”ํ•˜์—ฌ ํ‘œํ˜„ํ•˜๋Š” ๊ธฐ๋ฒ•
    • ์‚ฌ๋žŒ์ด ์ ‘ํ•˜๋Š” ๋‹ค์–‘ํ•œ ํ˜„์ƒ์„ ์•ฝ์†๋œ ๋ฐฉ์‹์œผ๋กœ ํ‘œํ˜„ํ•˜๋Š” ๊ฒƒ
      • ํ˜„์ƒ: ์‚ฌ๋žŒ, ์‚ฌ๋ฌผ, ๊ฐœ๋… ๋“ฑ
      • ์•ฝ์†๋œ ๋ฐฉ์‹: ์ˆ˜์‹, ๊ทธ๋ฆผ ๋“ฑ
  • ์ข…๋ฅ˜
    • ์ •๋ณด์‹œ์Šคํ…œ ๋ชจ๋ธ๋ง: ์ •๋ณด/๋ฐ์ดํ„ฐ/ํ”„๋กœ์„ธ์Šค ๋ชจ๋ธ๋ง
      • ๋ฐ์ดํ„ฐ ๊ด€์  (What, Data): ์—…๋ฌด๊ฐ€ ์–ด๋–ค ๋ฐ์ดํ„ฐ์™€ ๊ด€๋ จ๋˜๋Š”์ง€
      • ํ”„๋กœ์„ธ์Šค ๊ด€์  (How, Process): ์—…๋ฌด๊ฐ€ ์‹ค์ œ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ์ผ์„ ๋ชจ๋ธ๋ง
      • ๋ฐ์ดํ„ฐ์™€ ํ”„๋กœ์„ธ์Šค์˜ ์ƒ๊ด€ ๊ด€์ : ์—…๋ฌด ์ฒ˜๋ฆฌ ๋ฐฉ์‹์— ๋”ฐ๋ผ ๋ฐ์ดํ„ฐ๊ฐ€ ์–ด๋–ค ์˜ํ–ฅ์„ ์ฃผ๊ณ ๋ฐ›๋Š”์ง€
    • ์ˆ˜๋ฆฌ ๋ชจ๋ธ๋ง: ์ˆ˜ํ•™์  ๋™์‹์œผ๋กœ ํ˜„์ƒ ํ‘œํ˜„
    • ํ™•/ํ†ต ๋ชจ๋ธ๋ง: ํ†ต๊ณ„์  ๋ฐฉ๋ฒ•๋ก ์œผ๋กœ ๋ฏธ๋ž˜ ์˜ˆ์ธก
    • ํšŒ๋กœ ๋ชจ๋ธ๋ง: ์ „์žํšŒ๋กœ๋ฅผ ์„ค๊ณ„ํ•˜๊ณ  ๊ตฌ์„ฑ
  • ํŠน์ง•
    • ์ถ”์ƒํ™”: ํ˜„์‹ค ์„ธ๊ณ„๋ฅผ ์ผ์ •ํ•œ ํ˜•์‹์— ๋งž์ถ”์–ด ๊ฐ„๋žตํ•˜๊ฒŒ ํ‘œํ˜„
    • ๋‹จ์ˆœํ™”: ๋ณต์žกํ•œ ํ˜„์‹ค์„ ๊ธฐํ˜ธ,๋ฌธ์ž,๊ทธ๋ฆผ ๋“ฑ์œผ๋กœ ์‰ฝ๊ฒŒ ์ดํ•ดํ•˜๊ฒŒ ํ•จ
    • ๋ช…ํ™•ํ™”: ์• ๋งค๋ชจํ˜ธํ•จ์„ ์ œ๊ฑฐํ•˜๊ณ  ๋ช…ํ™•ํ•˜๊ฒŒ ํ˜„์ƒ์„ ๊ธฐ์ˆ 

๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง

  • ์ •๋ณด์‹œ์Šคํ…œ ๊ตฌ์ถ•์„ ์œ„ํ•ด ๋ฐ์ดํ„ฐ ๊ด€์ ์—์„œ ์—…๋ฌด๋ฅผ ๋ถ„์„, ํ˜„์‹ค ์„ธ๊ณ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์•ฝ์†๋œ ํ‘œ๊ธฐ๋ฒ•์œผ๋กœ ํ‘œํ˜„ํ•˜๋Š” ๊ณผ์ •
  • ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์ด ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ
    • ์‹œ์Šคํ…œ ๊ฐ€์‹œํ™”
    • ์‹œ์Šคํ…œ ๊ตฌ์กฐ์™€ ํ–‰๋™ ๋ช…์„ธํ™”
    • ๊ตฌ์กฐํ™”๋œ ํ‹€ ์ œ๊ณต
    • ๋ฌธ์„œํ™”
    • ๋‹ค์–‘ํ•œ ๊ด€์  ์ œ๊ณต
    • ์ƒ์„ธ ์ˆ˜์ค€์˜ ๊ตฌ์ฒดํ™”
  • ์ค‘์š”์„ฑ
    • ์‹œ์Šคํ…œ ๊ตฌ์ถ•์—์„œ ๋งค์šฐ ์ค‘์š” ์š”์†Œ
    • ๋ณต์žกํ•œ ์ •๋ณด ์š”๊ตฌ์‚ฌํ•ญ์„ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ํ‘œํ˜„
    • ๋ฐ์ดํ„ฐ ์ค‘๋ณต/๋น„์œ ์—ฐ์„ฑ/๋น„์ผ๊ด€์„ฑ์„ ์ค„์—ฌ ํ’ˆ์งˆ ํ–ฅ์ƒ
  • ์œ ์˜์ 
    • ์ค‘๋ณต๋œ ๋ฐ์ดํ„ฐ์š”์†Œ ์ตœ์†Œํ™”
    • ๋ณ€ํ™” ๊ฐ€๋Šฅ์„ฑ ๊ณ ๋ ค(์œ ์—ฐํ•œ ๋Œ€์ฒ˜๋ฅผ ์œ„ํ•ด)
    • ๋‹จ์ˆœํ™” ์ถ”๊ตฌ
    • ์žฌ์‚ฌ์šฉ์„ฑ ๊ณ ๋ ค
    • ์ผ๊ด€์„ฑ/ํ†ตํ•ฉ์„ฑ ์œ ์ง€
  • 3๋‹จ๊ณ„
    • ๊ฐœ๋…์  ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง
      • ์ถ”์ƒํ™” (๋†’์Œ), ์—…๋ฌด ์ค‘์‹ฌ์ , ํฌ๊ด„์  ์ˆ˜์ค€์˜ ๋ชจ๋ธ๋ง, ์ „์‚ฌ์  ๊ด€์ , ์ฃผ๋กœ ERD ์‚ฐ์ถœ๋ฌผ
    • ๋…ผ๋ฆฌ์  ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง
      • ์‹œ์Šคํ…œ ๊ตฌ์ถ•์„ ์œ„ํ•œ ํ‚ค/์†์„ฑ/๊ด€๊ณ„ ๋“ฑ์„ ์ •ํ™•ํ•˜๊ฒŒ ํ‘œํ˜„
      • ์žฌ์‚ฌ์šฉ์„ฑ ๋†’์€ ์„ค๊ณ„ ๊ฐ€๋Šฅ
      • ์ •๊ทœํ™” -> ๋ชจ๋ธ ํ’ˆ์งˆ ํ–ฅ์ƒ
    • ๋ฌผ๋ฆฌ์  ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง
      • DB๊ตฌ์ถ•์„ ์œ„ํ•œ ์„ค๊ณ„ ๋‹จ๊ณ„ / ์„ฑ๋Šฅ,์ €์žฅ์„ ๊ณ ๋ คํ•œ ์‹ค์ œ์  ๊ตฌํ˜„๋ฐฉ๋ฒ• ์ œ์‹œ/ ์ธ๋ฑ์Šค, ์—ญ์ •๊ทœํ™”
  • ์ข‹์€ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง์˜ ํŠน์ง•
    • ์™„์ „์„ฑ: ์—…๋ฌด์— ํ•„์š”ํ•œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด์•„์•ผ ํ•จ
    • ์ค‘๋ณต ๋ฐฐ์ œ: ์ค‘๋ณต ์ตœ์†Œํ™” / ์ผ๊ด€์„ฑ ์œ ์ง€
    • ์—…๋ฌด ๊ทœ์น™ ๋ฐ˜์˜: ํ˜„์—…์˜ ์—…๋ฌด ๊ทœ์น™์„ ์ •ํ™•ํžˆ ํ‘œํ˜„
    • ๋ฐ์ดํ„ฐ ์žฌ์‚ฌ์šฉ: ์žฌ์‚ฌ์šฉ์ด ์šฉ์ดํ•˜๊ฒŒ ์„ค๊ณ„
    • ์˜์‚ฌ์†Œํ†ต: ์š”๊ตฌ์‚ฌํ•ญ์„ ๋ช…ํ™•ํžˆ ์ „๋‹ฌ
    • ํ†ตํ•ฉ์„ฑ: ํ†ตํ•ฉ๋œ ์‹œ๊ฐ์„ ์ œ๊ณต

๋ฐ์ดํ„ฐ ๋…๋ฆฝ์„ฑ

  • ์™ธ๋ถ€ ์Šคํ‚ค๋งˆ
    • ์‚ฌ์šฉ์ž ๊ด€์  / ๊ฐœ์ธ์ ์ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ทฐ / ์‘์šฉํ”„๋กœ๊ทธ๋žจ์ด ์ ‘๊ทผํ•˜๋Š” ์˜์—ญ
  • ๊ฐœ๋… ์Šคํ‚ค๋งˆ
    • ํ†ตํ•ฉ ๊ด€์  / ์กฐ์ง ์ „์ฒด์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๊ธฐ์ˆ  / ์ „์ฒด DB ๊ตฌ์กฐ ์ •์˜
  • ๋‚ด๋ถ€ ์Šคํ‚ค๋งˆ
    • ๋ฌผ๋ฆฌ์  ์ €์žฅ๊ตฌ์กฐ / ์‹ค์ œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜๋Š” ๋ฐฉ๋ฒ• ์ •์˜
  • ๋…๋ฆฝ์„ฑ ์ข…๋ฅ˜
    • ๋…ผ๋ฆฌ์ : ๊ฐœ๋… ์Šคํ‚ค๋งˆ๊ฐ€ ๋ณ€๊ฒฝ๋˜์–ด๋„ ์™ธ๋ถ€ ์Šคํ‚ค๊ฐ€ ์˜ํ–ฅX
    • ๋ฌผ๋ฆฌ์ : ๋‚ด๋ถ€ ์Šคํ‚ค๋งˆ๊ฐ€ ๋ณ€๊ฒฝ๋˜์–ด๋„ ๊ฐœ๋… ์Šคํ‚ค๊ฐ€ ์˜ํ–ฅX
  • ๋งคํ•‘(์‚ฌ์ƒ)
    • ์ƒ์œ„ ๋‹จ๊ณ„์™€ ํ•˜์œ„ ๋‹จ๊ณ„ ์‚ฌ์ด์˜ ๋Œ€์‘ ๊ด€๊ณ„

๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง์˜ ์„ธ ๊ฐ€์ง€ ํ•ต์‹ฌ ์š”์†Œ

  • ์—”ํ„ฐํ‹ฐ (Entity): ์—…๋ฌด์— ํ•„์š”ํ•˜๊ณ  ์œ ์šฉํ•œ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ์ง‘ํ•ฉ์  ์‹ค์ฒด
  • ์†์„ฑ (Attribute): ์—”ํ„ฐํ‹ฐ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์ตœ์†Œ ๋ฐ์ดํ„ฐ ๋‹จ์œ„
  • ๊ด€๊ณ„ (Relationship): ์—”ํ„ฐํ‹ฐ ๊ฐ„์˜ ๋…ผ๋ฆฌ์ ์ธ ์—ฐ๊ด€์„ฑ์„ ๊ฐ€์ง€๋Š” ํ˜•ํƒœ๋‚˜ ํ–‰์œ„

์—”ํ„ฐํ‹ฐ

DB์—์„œ๋Š” ํ…Œ์ด๋ธ”๋กœ ๊ตฌํ˜„

  • ํŠน์ง•
    • ์—…๋ฌด์  ํ•„์š”์„ฑ
      • ๋ฐ˜๋“œ์‹œ ์—…๋ฌด์—์„œ ํ•„์š”ํ•˜๊ณ  ๊ด€๋ฆฌํ•  ๊ฐ€์น˜ ํ•„์š”
    • ์‹๋ณ„์ž
      • ์œ ์ผํ•œ ์‹๋ณ„์ž(ex.ํ•™๋ฒˆ,์‚ฌ๋ฒˆ)๋กœ ์‹๋ณ„ ๊ฐ€๋Šฅํ•ด์•ผ ํ•จ
    • ์ธ์Šคํ„ด์Šค ์ง‘ํ•ฉ
      • 2๊ฐœ ์ด์ƒ์˜ ์ธ์Šคํ„ด์Šค(ํ–‰)์„ ํฌํ•จํ•ด์•ผ ํ•จ
    • ์—…๋ฌด ํ”„๋กœ์„ธ์Šค ์ฐธ์—ฌ
      • ์‹ค์ œ ์—…๋ฌด ํ”„๋กœ์„ธ์Šค์— ํ™œ์šฉ๋˜์–ด์•ผ ํ•จ
    • ์†์„ฑ ํฌํ•จ
      • ๋ฐ˜๋“œ์‹œ ์†์„ฑ์„ ๊ฐ€์ ธ์•ผ ํ•จ
    • ๊ด€๊ณ„ ์กด์žฌ
      • ๋‹ค๋ฅธ ์—”ํ„ฐํ‹ฐ์™€ ์ตœ์†Œ 1๊ฐœ ์ด์ƒ์˜ ๊ด€๊ณ„๊ฐ€ ํ•„์š”
  • ๋ถ„๋ฅ˜
    • ์œ ๋ฌดํ˜•์— ๋”ฐ๋ฅธ ๋ถ„๋ฅ˜
      • ์œ ํ˜• ์—”ํ„ฐํ‹ฐ: ๋ฌผ๋ฆฌ์  ํ˜•ํƒœ๊ฐ€ ์žˆ์Œ (์˜ˆ: ํ•™์ƒ, ์‚ฌ์›, ๊ฐ•์‚ฌ)
      • ๊ฐœ๋… ์—”ํ„ฐํ‹ฐ: ๊ฐœ๋…์ ์ธ ์ •๋ณด (์˜ˆ: ์กฐ์ง, ๋ณดํ—˜์ƒํ’ˆ)
      • ์‚ฌ๊ฑด ์—”ํ„ฐํ‹ฐ: ์—…๋ฌด ์ˆ˜ํ–‰์— ๋”ฐ๋ผ ๋ฐœ์ƒ (์˜ˆ: ์ฃผ๋ฌธ, ์ฒญ๊ตฌ)
    • ๋ฐœ์ƒ์‹œ์ ์— ๋”ฐ๋ฅธ ๋ถ„๋ฅ˜
      • ๊ธฐ๋ณธ ์—”ํ„ฐํ‹ฐ: ๋…๋ฆฝ์ ์œผ๋กœ ์ƒ์„ฑ ๊ฐ€๋Šฅ (์˜ˆ: ๊ณ ๊ฐ, ์ƒํ’ˆ)
      • ์ค‘์‹ฌ ์—”ํ„ฐํ‹ฐ: ๊ธฐ๋ณธ ์—”ํ„ฐํ‹ฐ๋กœ๋ถ€ํ„ฐ ์ƒ์„ฑ (์˜ˆ: ๊ณ„์•ฝ, ์ฃผ๋ฌธ)
      • ํ–‰์œ„ ์—”ํ„ฐํ‹ฐ: ๋‘ ์—”ํ„ฐํ‹ฐ ๊ฐ„์˜ ํ–‰์œ„๋กœ ์ƒ์„ฑ (์˜ˆ: ์ฃผ๋ฌธ๋ชฉ๋ก, ์‚ฌ์›๋ณ€๊ฒฝ์ด๋ ฅ)
  • ์—”ํ„ฐํ‹ฐ ๋ช…๋ช… ๊ทœ์น™
    • ํ˜„์—…์—…๋ฌด์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์šฉ์–ด ์‚ฌ์šฉ
    • ์•ฝ์–ด ์‚ฌ์šฉ ์ง€์–‘
    • ๋‹จ์ˆ˜ ๋ช…์‚ฌ ์‚ฌ์šฉ
    • ๋ชจ๋“  ์—”ํ„ฐํ‹ฐ์—์„œ ์œ ์ผํ•œ ์ด๋ฆ„ ๋ถ€์—ฌ
    • ์ƒ์„ฑ ์˜๋ฏธ๊ฐ€ ๋ถ€์—ฌ๋œ ์ด๋ฆ„ ์‚ฌ์šฉ
    • ๋ช…๋ช… ๋ฐฉ์‹
      • CamelCase: ๊ฐ ๋‹จ์–ด์˜ ์ฒซ ๊ธ€์ž๋ฅผ ๋Œ€๋ฌธ์ž๋กœ ํ‘œ๊ธฐ (์˜ˆ: CustomerOrder)
      • SnakeCase: ๋‹จ์–ด ์‚ฌ์ด์— ์–ธ๋”๋ฐ”( _ ) ์‚ฌ์šฉ (์˜ˆ: customer_order)

์†์„ฑ

์—”ํ„ฐํ‹ฐ๋ฅผ ์„ค๋ช…ํ•˜๋Š” ๋ฐ์ดํ„ฐ ์š”์†Œ

  • ์—…๋ฌด์—์„œ ํ•„์š”๋กœ ํ•˜๋Š” ์ตœ์†Œํ•œ์˜ ๋ฐ์ดํ„ฐ ๋‹จ์œ„๋กœ, ๋” ์ด์ƒ ๋ถ„๋ฆฌ๋˜์ง€ ์•Š๋Š” ์ •๋ณด
  • ํŠน์„ฑ
    • ์—…๋ฌด ํ•„์š”์„ฑ: ํ•ด๋‹น ์—…๋ฌด์—์„œ ํ•„์š”ํ•˜๊ณ  ๊ด€๋ฆฌํ•ด์•ผ ํ•  ์ •๋ณด์—ฌ์•ผ ํ•จ
    • ํ•จ์ˆ˜์  ์ข…์†์„ฑ: ์ •๊ทœํ™” ์ด๋ก ์— ๋”ฐ๋ผ ์ฃผ์‹๋ณ„์ž์— ํ•จ์ˆ˜์  ์ข…์†์„ฑ์„ ๊ฐ€์ ธ์•ผ ํ•จ
    • ๋‹จ์ผ๊ฐ’ ์›์น™: ํ•˜๋‚˜์˜ ์†์„ฑ์€ ํ•œ ๊ฐœ์˜ ๊ฐ’๋งŒ์„ ๊ฐ€์ง
    • ๋„๋ฉ”์ธ: ์†์„ฑ์ด ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ๊ฐ’์˜ ๋ฒ”์œ„๋ฅผ ์ •์˜
  • ๋ถ„๋ฅ˜
    • ํŠน์„ฑ์— ๋”ฐ๋ฅธ ๋ถ„๋ฅ˜
      • ๊ธฐ๋ณธ ์†์„ฑ: ์—…๋ฌด ๋ถ„์„ ๋‹จ๊ณ„์—์„œ ๋ฐ”๋กœ ์ •์˜๋˜๋Š” ์†์„ฑ (์˜ˆ: ์ƒํ’ˆ์ด๋ฆ„)
      • ์„ค๊ณ„ ์†์„ฑ: ์—…๋ฌด ๊ทœ์น™ํ™”, DB ์„ค๊ณ„ ๊ณผ์ •์—์„œ ๋„์ถœ๋˜๋Š” ์†์„ฑ (์˜ˆ: ์˜ˆ๊ธˆ๋ถ„๋ฅ˜์ฝ”๋“œ)
      • ํŒŒ์ƒ ์†์„ฑ: ๋‹ค๋ฅธ ์†์„ฑ์—์„œ ๊ณ„์‚ฐ์ด๋‚˜ ๋ณ€ํ˜•์œผ๋กœ ์ƒ์„ฑ๋˜๋Š” ์†์„ฑ (์˜ˆ: ์ด์ž)
    • ์—”ํ„ฐํ‹ฐ ๋‚ด ์—ญํ• ์— ๋”ฐ๋ฅธ ๋ถ„๋ฅ˜
      • PK(Primary Key) ์†์„ฑ: ์—”ํ„ฐํ‹ฐ๋ฅผ ์‹๋ณ„ํ•˜๋Š” ์†์„ฑ
      • FK(Foreign Key) ์†์„ฑ: ๋‹ค๋ฅธ ์—”ํ„ฐํ‹ฐ์™€์˜ ๊ด€๊ณ„์—์„œ ํฌํ•จ๋œ ์†์„ฑ
      • ์ผ๋ฐ˜ ์†์„ฑ: PK๋‚˜ FK๊ฐ€ ์•„๋‹Œ ์ผ๋ฐ˜์ ์ธ ์†์„ฑ
  • ๋ช…๋ช… ๊ทœ์น™
    • ํ˜„์—…์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์ด๋ฆ„ ์‚ฌ์šฉ
    • ์•ฝ์–ด ์‚ฌ์šฉ ์ง€์–‘
    • ์ „์ฒด ์‹œ์Šคํ…œ์—์„œ ์œ ์ผํ•œ ์ด๋ฆ„ ์‚ฌ์šฉ
    • ๋ช…์‚ฌํ˜• ์‚ฌ์šฉ
    • ์ด๋ฆ„๋งŒ์œผ๋กœ๋„ ์˜๋ฏธ ํŒŒ์•… ๊ฐ€๋Šฅํ•˜๊ฒŒ

๊ด€๊ณ„

์—”ํ„ฐํ‹ฐ ๊ฐ„์˜ ์—…๋ฌด์  ์—ฐ๊ด€์„ฑ์„ ํ‘œํ˜„

  • ํ‘œํ˜„
    • 2๊ฐœ์˜ ์—”ํ„ฐํ‹ฐ ์‚ฌ์ด์˜ ๊ด€๊ณ„๋Š” 2๊ฐœ์˜ ๊ด€๊ณ„๋ช…์„ ๊ฐ€์ง
      • ์˜ˆ: ๊ณ ๊ฐ์€ ์ฃผ๋ฌธ์„ ์ƒ์„ฑํ•œ๋‹ค / ์ฃผ๋ฌธ์€ ๊ณ ๊ฐ์— ์˜ํ•ด ์ƒ์„ฑ๋œ๋‹ค
  • ๋ถ„๋ฅ˜
    • ์ข…๋ฅ˜:
      • ์กด์žฌ์— ์˜ํ•œ ๊ด€๊ณ„: ํ•ญ์ƒ ์กด์žฌํ•˜๋Š” ๊ด€๊ณ„ (์˜ˆ: ์‚ฌ์›์€ ๋ถ€์„œ์— ์†ํ•œ๋‹ค)
      • ํ–‰์œ„์— ์˜ํ•œ ๊ด€๊ณ„: ํŠน์ • ํ–‰์œ„๋กœ ๋ฐœ์ƒํ•˜๋Š” ๊ด€๊ณ„ (์˜ˆ: ๊ณ ๊ฐ์ด ์ƒํ’ˆ์„ ๊ตฌ๋งค)
    • ์นด๋””๋„๋ฆฌํ‹ฐ(Cardinality)(์ฐธ์—ฌ์ž ์ˆ˜):
      • 1:1 ๊ด€๊ณ„: ์–‘์ชฝ ์—”ํ„ฐํ‹ฐ์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ 1:1๋กœ ๋Œ€์‘
      • 1:M ๊ด€๊ณ„: ํ•œ์ชฝ ์—”ํ„ฐํ‹ฐ ์ธ์Šคํ„ด์Šค๊ฐ€ ์—ฌ๋Ÿฌ ์ธ์Šคํ„ด์Šค์™€ ๊ด€๊ณ„
      • N:M ๊ด€๊ณ„: ์–‘์ชฝ ์—”ํ„ฐํ‹ฐ์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ๋‹ค๋Œ€๋‹ค ๊ด€๊ณ„
  • ์„ ํƒ์„ฑ
    • ํ•„์ˆ˜์  ๊ด€๊ณ„: ๋ฐ˜๋“œ์‹œ ๊ด€๊ณ„๋ฅผ ๊ฐ€์ ธ์•ผ ํ•จ (์‹ค์„ ์œผ๋กœ ํ‘œ์‹œ)
    • ์„ ํƒ์  ๊ด€๊ณ„: ๊ด€๊ณ„๋ฅผ ๊ฐ€์งˆ ์ˆ˜๋„ ์žˆ๊ณ  ์•„๋‹ ์ˆ˜๋„ ์žˆ์Œ (์ ์„ ์œผ๋กœ ํ‘œ์‹œ)
  • ๊ด€๊ณ„๋ช… ํ‘œ๊ธฐ ๊ทœ์น™
    • ๊ด€๊ณ„์˜ ์ด๋ฆ„์€ ํ˜„์žฌํ˜• ๋™์‚ฌ ์‚ฌ์šฉ
    • ๊ด€๊ณ„ ์ฐธ์—ฌ์ž์˜ ๊ด€์ ์—์„œ ๋Šฅ๋™์ ์œผ๋กœ ๋ช…๋ช…
    • ๊ด€๊ณ„๋Š” ์–‘๋ฐฉํ–ฅ์œผ๋กœ ๋ช…๋ช… (๋Šฅ๋™/์ˆ˜๋™)

Day2

์ •๊ทœํ™”

  • ๋ฐ์ดํ„ฐ์˜ ์ค‘๋ณต์„ ์ตœ์†Œํ™”ํ•˜๊ณ  ์ด์ƒํ˜„์ƒ(Anomaly) ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ํ…Œ์ด๋ธ”์„ ๊ตฌ์กฐ์ ์œผ๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ๊ณผ์ •
    • ์ฆ‰, ๋ฐ์ดํ„ฐ๋ฅผ โ€œ๋” ํšจ์œจ์ ์œผ๋กœ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ํ…Œ์ด๋ธ”์„ ์ชผ๊ฐœ๋Š” ๊ณผ์ •โ€
  • ๋ชฉํ‘œ
    • ๋ฐ์ดํ„ฐ ์ค‘๋ณต ์ œ๊ฑฐ
    • ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ์œ ์ง€: ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ๋งŒ ์ˆ˜์ •ํ•˜๋ฉด ๋˜๊ฒŒ ํ•จ
    • ์ด์ƒํ˜„์ƒ ๋ฐฉ์ง€: ์‚ฝ์ž…/์‚ญ์ œ/๊ฐฑ์‹  ์‹œ ๋ฌธ์ œ(Anomaly)๊ฐ€ ์•ˆ ์ƒ๊ธฐ๊ฒŒ ํ•จ

์ด์ƒํ˜„์ƒ

  • ์ •๊ทœํ™”๋ฅผ ํ•˜์ง€ ์•Š์œผ๋ฉด ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ
    • ๋Œ€ํ‘œ์ ์ธ ๋ฌธ์ œ 3๊ฐœ
      • ์‚ฝ์ž… ์ด์ƒ
        • ์ผ๋ถ€ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์„ ์ˆ˜ ์—†์Œ
      • ์‚ญ์ œ ์ด์ƒ
        • ์ผ๋ถ€ ์ •๋ณด๋ฅผ ์‚ญ์ œํ•˜๋ฉด ๋‹ค๋ฅธ ์ •๋ณด๋„ ์‚ฌ๋ผ์ง
      • ๊ฐฑ์‹  ์ด์ƒ
        • ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ ๊ณณ๋งŒ ์ˆ˜์ •ํ•˜๋ฉด ๋ถˆ์ผ์น˜ ๋ฐœ์ƒ

์ •๊ทœํ˜• (Normal Forms)

์ œ1์ •๊ทœํ˜• (1NF)

  • ๋ชจ๋“  ์†์„ฑ(์ปฌ๋Ÿผ)์ด ์›์ž๊ฐ’(atomic value)์„ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค.
    • ํ•œ ์นธ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ฐ’์ด ๋“ค์–ด ์žˆ์œผ๋ฉด โŒ

์ œ2์ •๊ทœํ˜• (2NF)

  • ๋ถ€๋ถ„ ํ•จ์ˆ˜ ์ข…์† ์ œ๊ฑฐ (๊ธฐ๋ณธํ‚ค์˜ ์ผ๋ถ€๋ถ„์—๋งŒ ์ข…์†๋œ ์†์„ฑ์„ ์ œ๊ฑฐ)
    • ์ด๋ฏธ 1NF๋ฅผ ๋งŒ์กฑํ•ด์•ผ ํ•จ
    • ๋ณตํ•ฉํ‚ค(๋‘ ๊ฐœ ์ด์ƒ ์ปฌ๋Ÿผ์œผ๋กœ PK ๊ตฌ์„ฑ) ์ธ ๊ฒฝ์šฐ์—๋งŒ ์˜๋ฏธ ์žˆ์Œ

์ œ3์ •๊ทœํ˜• (3NF)

  • ์ดํ–‰ ํ•จ์ˆ˜ ์ข…์† ์ œ๊ฑฐ (A โ†’ B โ†’ C ํ˜•ํƒœ ๊ธˆ์ง€)
    • ์ฆ‰, ๊ธฐ๋ณธํ‚ค๊ฐ€ ์•„๋‹Œ ์†์„ฑ์ด ๋˜ ๋‹ค๋ฅธ ์†์„ฑ์„ ๊ฒฐ์ •ํ•˜์ง€ ์•Š์•„์•ผ ํ•จ

์‹๋ณ„์ž

  • ํ…Œ์ด๋ธ”์—์„œ ๊ฐ๊ฐ์˜ ํ–‰(Row)์„ ์œ ์ผํ•˜๊ฒŒ ๊ตฌ๋ณ„ํ•  ์ˆ˜ ์žˆ๋Š” ์†์„ฑ(๋˜๋Š” ์†์„ฑ์˜ ์กฐํ•ฉ)
    • ์ฆ‰, ๋ฐ์ดํ„ฐ์˜ โ€œ์ฃผ๋ฏผ๋“ฑ๋ก๋ฒˆํ˜ธโ€ ๊ฐ™์€ ์—ญํ• ์„ ํ•˜๋Š” ๊ฒŒ ์‹๋ณ„์ž

์‹๋ณ„์ž์˜ ๋ถ„๋ฅ˜

  • ํฌ๊ฒŒ 4๊ฐ€์ง€ ๊ธฐ์ค€์œผ๋กœ ๊ตฌ๋ถ„
๋ถ„๋ฅ˜ ๊ธฐ์ค€๊ตฌ๋ถ„์„ค๋ช…์˜ˆ์‹œ
1. ๋Œ€ํ‘œ์„ฑ์ฃผ์‹๋ณ„์ž (Primary Identifier)ํ•˜๋‚˜์˜ ์—”ํ„ฐํ‹ฐ(ํ…Œ์ด๋ธ”)๋ฅผ ์œ ์ผํ•˜๊ฒŒ ์‹๋ณ„์ฃผ๋ฏผ๋ฒˆํ˜ธ, ํ•™๋ฒˆ, ์ฃผ๋ฌธID
๋ณด์กฐ์‹๋ณ„์ž (Alternate Identifier)์ฃผ์‹๋ณ„์ž ์™ธ์— ์œ ์ผํ•˜๊ฒŒ ์‹๋ณ„ ๊ฐ€๋Šฅํ•œ ์†์„ฑ์ด๋ฉ”์ผ, ์ „ํ™”๋ฒˆํ˜ธ
2. ์ƒ์„ฑ ์‹œ์ ๋‚ด๋ถ€์‹๋ณ„์ž (Internal)๋‚ด๋ถ€์—์„œ ์ƒ์„ฑ (์‹œํ€€์Šค, AUTO_INCREMENT ๋“ฑ)ํšŒ์›๋ฒˆํ˜ธ, ์ฃผ๋ฌธ๋ฒˆํ˜ธ
์™ธ๋ถ€์‹๋ณ„์ž (External)์™ธ๋ถ€ ์‹œ์Šคํ…œ์ด๋‚˜ ๋‹ค๋ฅธ ์—”ํ„ฐํ‹ฐ์—์„œ ๊ฐ€์ ธ์˜ด์‚ฌ์—…์ž๋“ฑ๋ก๋ฒˆํ˜ธ, ํ•™๋ฒˆ ๋“ฑ
3. ์†์„ฑ ์ˆ˜๋‹จ์ผ์‹๋ณ„์ž (Single)ํ•˜๋‚˜์˜ ์†์„ฑ์œผ๋กœ ์‹๋ณ„์ฃผ๋ฏผ๋ฒˆํ˜ธ
๋ณตํ•ฉ์‹๋ณ„์ž (Composite)๋‘ ๊ฐœ ์ด์ƒ์˜ ์†์„ฑ ์กฐํ•ฉ์œผ๋กœ ์‹๋ณ„(์ฃผ๋ฌธID, ์ƒํ’ˆID)
4. ๋Œ€์ฒด ์—ฌ๋ถ€๋ณธ์งˆ์‹๋ณ„์ž (Natural)์‹ค์ œ ์˜๋ฏธ ์žˆ๋Š” ์†์„ฑ ์‚ฌ์šฉํ•™๋ฒˆ, ์ฃผ๋ฏผ๋ฒˆํ˜ธ
์ธ์กฐ์‹๋ณ„์ž (Surrogate)์˜๋ฏธ ์—†์ด ์ธ์œ„์ ์œผ๋กœ ์ƒ์„ฑ๋œ ๊ฐ’์ผ๋ จ๋ฒˆํ˜ธ, UUID

์ฃผ์‹๋ณ„์ž(Primary Identifier)์˜ ํŠน์ง•

์กฐ๊ฑด์„ค๋ช…
์œ ์ผ์„ฑํ•˜๋‚˜์˜ ํ–‰์„ ์œ ์ผํ•˜๊ฒŒ ๊ตฌ๋ถ„ ๊ฐ€๋Šฅํ•ด์•ผ ํ•จ
์ตœ์†Œ์„ฑ๋ถˆํ•„์š”ํ•œ ์†์„ฑ ํฌํ•จ โŒ (๊ฐ€์žฅ ์ตœ์†Œํ•œ์œผ๋กœ ๊ตฌ์„ฑ)
๋ถˆ๋ณ€์„ฑ์‹œ๊ฐ„์ด ์ง€๋‚˜๋„ ๊ฐ’์ด ๋ณ€ํ•˜์ง€ ์•Š์•„์•ผ ํ•จ
์กด์žฌ์„ฑํ•ญ์ƒ ๊ฐ’์ด ์กด์žฌํ•ด์•ผ ํ•จ (NULL ๋ถˆ๊ฐ€)

์ฃผ์‹๋ณ„์ž ์˜ˆ์‹œ

  • ์ฃผ๋ฌธID ๊ณ ๊ฐID ์ƒํ’ˆID ์ฃผ๋ฌธ์ผ์ž
    • ์ฃผ๋ฌธID โ†’ ์ฃผ์‹๋ณ„์ž (๋‹จ์ผ์‹๋ณ„์ž, ๋‚ด๋ถ€์‹๋ณ„์ž, ์ธ์กฐ์‹๋ณ„์ž)
    • (๊ณ ๊ฐID, ์ƒํ’ˆID) โ†’ ๋ณตํ•ฉ์‹๋ณ„์ž (๊ฒฝ์šฐ์— ๋”ฐ๋ผ ๋Œ€์ฒด ๊ฐ€๋Šฅ)
    • ๊ณ ๊ฐID โ†’ ์™ธ๋ถ€์‹๋ณ„์ž (๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์˜ ์ฃผ์‹๋ณ„์ž ์ฐธ์กฐ)

์™ธ๋ถ€์‹๋ณ„์ž (Foreign Identifier)

  • ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์˜ ์ฃผ์‹๋ณ„์ž๋ฅผ ์ฐธ์กฐํ•˜๋Š” ์†์„ฑ
    • ์ฆ‰, โ€œ๊ด€๊ณ„(relationship)โ€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํ‚ค
      • ์™ธ๋ž˜ํ‚ค(Foreign Key) ์™€ ๊ฐ™์€ ๊ฐœ๋…์œผ๋กœ ๋ด๋„ ๋ฌด๋ฐฉ

์‹œํ—˜์šฉ ํฌ์ธํŠธ โญ๏ธ

  • โ€œ์ •๊ทœํ™” ๋ชฉ์ , ์ด์ƒํ˜„์ƒ ์ข…๋ฅ˜, ์ •๊ทœํ˜• ๋‹จ๊ณ„๋ณ„ ์ฐจ์ดโ€ ๋นˆ์ถœ
    • โ€œ์–ด๋–ค ํ…Œ์ด๋ธ” ๊ตฌ์กฐ๊ฐ€ ๋ช‡ ์ •๊ทœํ˜•์ธ๊ฐ€?โ€ ๋ฌป๋Š” ์œ ํ˜•
  • ์‹๋ณ„์ž์˜ ๋ถ„๋ฅ˜
    • โ€œ์ข‹์€ ์ฃผ์‹๋ณ„์ž ์กฐ๊ฑดโ€์„ ๋ฌผ์–ด๋ณด๋Š” ๋ฌธ์ œ ๋นˆ์ถœ
    • ์ฃผ์‹๋ณ„์ž vs ๋ณด์กฐ์‹๋ณ„์ž
    • ๋ณธ์งˆ vs ์ธ์กฐ
    • ์™ธ๋ถ€์‹๋ณ„์ž

Day3

ERD

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค๊ณ„์˜ ์ดˆ์„์œผ๋กœ
    • ํ˜„์‹ค ์„ธ๊ณ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ โ€œ์—”ํ„ฐํ‹ฐ(๊ฐœ์ฒด)โ€์™€ โ€œ๊ด€๊ณ„(Relationship)โ€๋กœ ํ‘œํ˜„ํ•œ ๊ทธ๋ฆผ
  • ์ž‘์„ฑ ์ˆœ์„œ
    • ์—”ํ„ฐํ‹ฐ ๋„์ถœ -> ๊ด€๊ณ„์ •์˜ -> ๊ด€๊ณ„๋ช… ๊ธฐ์ˆ  -> ๊ด€๊ณ„์˜ ์ฐธ์—ฌ๋„ ๊ธฐ์ˆ  -> ๊ด€๊ณ„์˜ ํ•„์ˆ˜์—ฌ๋ถ€ ๊ธฐ์ˆ 
  • ํ‘œ๊ธฐ๋ฒ• ์ข…๋ฅ˜
    • Chen ํ‘œ๊ธฐ๋ฒ•
      • ๊ฐ€์žฅ ์˜ค๋ž˜๋œ ํ‘œ๊ธฐ๋ฒ•, ๊ด€๊ณ„๋ฅผ ๋งˆ๋ฆ„๋ชจ๊ผด๋กœ ํ‘œ์‹œ
    • IE (Information Engineering) ํ‘œ๊ธฐ๋ฒ•
      • ๊นŒ๋งˆ๊ท€๋ฐœ ํ‘œ๊ธฐ๋ฒ•์ด๋ผ๊ณ ๋„ ํ•จ, ๊ด€๊ณ„๋ฅผ ์„ ์œผ๋กœ ํ‘œ์‹œ
    • Barker ํ‘œ๊ธฐ๋ฒ•
      • ์—”ํ„ฐํ‹ฐ์— ์ฃผ์‹๋ณ„์ž๋ฅผ ํ‘œ๊ธฐํ•˜์ง€ ์•Š์Œ, ๊ด€๊ณ„๋Š” ์„ ์œผ๋กœ ํ‘œ์‹œ

ERD ๊ตฌ์„ฑ์š”์†Œ

๊ตฌ์„ฑ์š”์†Œ์„ค๋ช…์˜ˆ์‹œ
์—”ํ„ฐํ‹ฐ(Entity)๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ๋Œ€์ƒ (ํ…Œ์ด๋ธ”)๊ณ ๊ฐ, ์ฃผ๋ฌธ, ์ƒํ’ˆ
์†์„ฑ(Attribute)์—”ํ„ฐํ‹ฐ๊ฐ€ ๊ฐ€์ง„ ๊ตฌ์ฒด์ ์ธ ์ •๋ณด (์ปฌ๋Ÿผ)๊ณ ๊ฐ๋ช…, ์ „ํ™”๋ฒˆํ˜ธ
์‹๋ณ„์ž(Identifier)์—”ํ„ฐํ‹ฐ๋ฅผ ์œ ์ผํ•˜๊ฒŒ ๊ตฌ๋ณ„ํ•˜๋Š” ํ‚ค๊ณ ๊ฐID
๊ด€๊ณ„(Relationship)์—”ํ„ฐํ‹ฐ ๊ฐ„์˜ ์—ฐ๊ฒฐ ์˜๋ฏธ๊ณ ๊ฐ โ€“ ์ฃผ๋ฌธ ๊ด€๊ณ„
์นด๋””๋„๋ฆฌํ‹ฐ(Cardinality)๊ด€๊ณ„์˜ ์ˆ˜์  ์ œ์•ฝ (1:1, 1:N, M:N)๊ณ ๊ฐ 1 โ†” ์ฃผ๋ฌธ ์—ฌ๋Ÿฌ ๊ฐœ

์—”ํ„ฐํ‹ฐ(Entity)

  • ํ•˜๋‚˜์˜ ์ฃผ์ œ๋ฅผ ๊ฐ€์ง„ ๋ฐ์ดํ„ฐ ์ง‘ํ•ฉ, ERD์—์„œ ์‚ฌ๊ฐํ˜•(โ–ก)์œผ๋กœ ํ‘œ์‹œ

์†์„ฑ(Attribute)

  • ์—”ํ„ฐํ‹ฐ์˜ ์„ธ๋ถ€ ์ •๋ณด, ERD์—์„œ ํƒ€์›ํ˜•(โญ•) ๋กœ ํ‘œํ˜„

๊ด€๊ณ„(Relationship)

  • ๋‘ ์—”ํ„ฐํ‹ฐ ๊ฐ„์˜ ์—ฐ๊ด€์„ฑ ERD์—์„œ๋Š” ๋งˆ๋ฆ„๋ชจ(โ—‡) ๋กœ ํ‘œํ˜„
  • M:N ๊ด€๊ณ„๋Š” ์ •๊ทœํ™” ์‹œ ์ค‘๊ฐ„ ํ…Œ์ด๋ธ”(๊ต์ฐจ ์—”ํ„ฐํ‹ฐ)๋กœ ๋ถ„๋ฆฌํ•ด์•ผ ํ•จ
    • ex. ์—ฌ๋Ÿฌ ํ•™์ƒ โ†” ์—ฌ๋Ÿฌ ๊ณผ๋ชฉ = ํ•™์ƒ โ†” ๊ณผ๋ชฉ = M:N
      • ํ•™์ƒ โ†” ์ˆ˜๊ฐ• โ†” ๊ณผ๋ชฉ

์‹๋ณ„/๋น„์‹๋ณ„ ๊ด€๊ณ„

  • ์‹๋ณ„ ๊ด€๊ณ„
    • ๋ถ€๋ชจ์˜ ์‹๋ณ„์ž๊ฐ€ ์ž์‹์˜ ๊ธฐ๋ณธํ‚ค(PK)์— ํฌํ•จ๋จ(์ž์‹์˜ PK์— ๋ถ€๋ชจํ‚ค ํฌํ•จ)
      • ์ฆ‰, โ€œ๋ถ€๋ชจ๊ฐ€ ์—†์œผ๋ฉด ์ž์‹์ด ์กด์žฌํ•  ์ˆ˜ ์—†์Œโ€
    • ERD ํ‘œ์‹œ: ์‹ค์„ 
      • ex. ์ฃผ๋ฌธ โ†’ ์ฃผ๋ฌธ์ƒ์„ธ (์ฃผ๋ฌธID ํฌํ•จ)
        • [์ฃผ๋ฌธ] โ”€โ”€โ”€< [์ฃผ๋ฌธ์ƒ์„ธ]
  • ๋น„์‹๋ณ„ ๊ด€๊ณ„
    • ๋ถ€๋ชจ์˜ ์‹๋ณ„์ž๊ฐ€ ์ž์‹์˜ ์ผ๋ฐ˜์†์„ฑ์œผ๋กœ๋งŒ ๋“ค์–ด๊ฐ(์ž์‹์˜ PK์—๋Š” ํฌํ•จ X (๊ทธ๋ƒฅ FK๋กœ๋งŒ ์กด์žฌ))
      • ์ฆ‰, โ€œ๋ถ€๋ชจ์™€ ์—ฐ๊ฒฐ์€ ์žˆ์ง€๋งŒ ๋…๋ฆฝ์ ์œผ๋กœ ์กด์žฌ ๊ฐ€๋Šฅโ€
    • ERD ํ‘œ์‹œ: ์ ์„ 
      • ex. ๊ณ ๊ฐ โ†’ ์ฃผ๋ฌธ (๊ณ ๊ฐID๋Š” ์™ธ๋ž˜ํ‚ค์ง€๋งŒ PK ์•„๋‹˜)
        • [๊ณ ๊ฐ] โ”€ - - > [์ฃผ๋ฌธ]

ERD ์‹œํ—˜ ๋นˆ์ถœ โญ๏ธ

์ถœ์ œ ํฌ์ธํŠธ๊ธฐ์–ตํ•  ํ•ต์‹ฌ
ERD์˜ ๊ตฌ์„ฑ์š”์†Œ์—”ํ„ฐํ‹ฐ, ์†์„ฑ, ๊ด€๊ณ„, ์‹๋ณ„์ž
๊ด€๊ณ„ ํ‘œํ˜„1:1 / 1:N / M:N ๊ตฌ๋ถ„
์‹๋ณ„ vs ๋น„์‹๋ณ„๋ถ€๋ชจํ‚ค๊ฐ€ ์ž์‹PK์— ํฌํ•จ๋˜๋ฉด ์‹๋ณ„
M:N ํ•ด์†Œ๊ต์ฐจ์—”ํ„ฐํ‹ฐ(์ค‘๊ฐ„ ํ…Œ์ด๋ธ”) ์ƒ์„ฑ
์•ฝํ•œ์—”ํ„ฐํ‹ฐ๋ถ€๋ชจ ์—”ํ„ฐํ‹ฐ ์กด์žฌ์— ์˜์กด
ํŒŒ์ƒ์†์„ฑ๊ณ„์‚ฐ์œผ๋กœ ์–ป๋Š” ์†์„ฑ (ํ…Œ์ด๋ธ”์— ์ง์ ‘ ์ €์žฅ X)

Day4

SQL ๊ธฐ๋ณธ ๊ตฌ์กฐ

  • SELECT ์ปฌ๋Ÿผ๋ช… FROM ํ…Œ์ด๋ธ”๋ช…
  • WHERE ์กฐ๊ฑด
  • GROUP BY ๊ทธ๋ฃน๊ธฐ์ค€์ปฌ๋Ÿผ
  • HAVING ๊ทธ๋ฃน์กฐ๊ฑด
  • ORDER BY ์ •๋ ฌ๊ธฐ์ค€์ปฌ๋Ÿผ;

SELECT โ€” ์กฐํšŒํ•  ์—ด ์ง€์ •

  • SELECT [ALL|DISTINCT] ๋Œ€์ƒ ์นผ๋Ÿผ๋ช…1, ๋Œ€์ƒ ์นผ๋Ÿผ๋ช…2, ... FROM ๋Œ€์ƒ ์นผ๋Ÿผ๋“ค์ด ์žˆ๋Š” ํ…Œ์ด๋ธ”๋ช…;
    • ALL : ๊ธฐ๋ณธ ์˜ต์…˜์œผ๋กœ ์ค‘๋ณต ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•˜์—ฌ ๋ชจ๋“  ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
    • DISTINCT : ์ค‘๋ณต๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ ํ•œ ๊ฑด์œผ๋กœ๋งŒ ์ฒ˜๋ฆฌํ•˜์—ฌ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
    • * : (asterisk) ์กฐํšŒ ๋Œ€์ƒ ์นผ๋Ÿผ์„ ์ง€์ •ํ•˜์ง€ ์•Š๊ณ  ๋ชจ๋“  ์นผ๋Ÿผ์„ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค
1. SELECT * FROM EMP; # EMP ํ…Œ์ด๋ธ” ์ „์ฒด ์กฐํšŒ

# emp ํ…Œ์ด๋ธ”์—์„œ ์ง๋ฌด(job) ์™€ ๋ถ€์„œ๋ฒˆํ˜ธ(deptno) ์˜ ์ค‘๋ณต ์—†๋Š” ๋ชฉ๋ก ์กฐํšŒ
2. SELECT DISTINCT job, deptno FROM emp;

FROM โ€” ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ํ…Œ์ด๋ธ” ์ง€์ •

  • ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋””์„œ ๊ฐ€์ ธ์˜ฌ์ง€ ์ง€์ •
    • ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ”์„ ์กฐ์ธํ•  ๋•Œ๋„ ์‚ฌ์šฉ
SELECT ename, sal
FROM emp;
  • emp ํ…Œ์ด๋ธ”์˜ ename(์ด๋ฆ„), sal(๊ธ‰์—ฌ) ์ปฌ๋Ÿผ ์กฐํšŒ

์นผ๋Ÿผ ๋ฐ ํ…Œ์ด๋ธ” ๋ณ„์นญ(ALIAS) ์‚ฌ์šฉํ•˜๊ธฐ

  • SELECT ์นผ๋Ÿผ๋ช… AS ๋ณ„์นญ FROM ํ…Œ์ด๋ธ”๋ช…
SELECT EMPNO AS ์‚ฌ์›๋ฒˆํ˜ธ, ENAME AS ์‚ฌ์›์ด๋ฆ„ FROM EMP;

๊ณต๋ฐฑ์ด ํฌํ•จ๋œ ๋ณ„์นญ

  • Oracle์—์„œ๋Š” ํฐ๋”ฐ์˜ดํ‘œ(" ") ์‚ฌ์šฉ
  • SQL Server์—์„œ๋Š” ๋Œ€๊ด„ํ˜ธ([ ])๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
SELECT EMPNO AS "์‚ฌ์› ๋ฒˆํ˜ธ", ENAME AS "์‚ฌ์› ์ด๋ฆ„" FROM EMP;

๋ฌธ์ž ํ•ฉ์„ฑ ์—ฐ์‚ฐ์ž

  • Oracle: || (๋‘ ๊ฐœ์˜ ์ˆ˜์ง์„ )
  • SQL Server: + ๋˜๋Š” CONCAT ํ•จ์ˆ˜
SELECT ENAME || ' is a ' || JOB AS EMPLOYEE_INFO FROM EMP;
# "KING is a PRESIDENT" ํ˜•ํƒœ์˜ ๋ฌธ์ž์—ด๋กœ ์ถœ๋ ฅ

WHERE โ€” ์กฐ๊ฑด ํ•„ํ„ฐ๋ง

  • SELECT ์นผ๋Ÿผ๋ช…1, ์นผ๋Ÿผ๋ช…2, ... FROM ํ…Œ์ด๋ธ”๋ช… WHERE ์กฐ๊ฑด์‹;
  • ํŠน์ • ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ํ–‰(row)๋งŒ ์กฐํšŒ
    • ์กฐ๊ฑด์‹์— =, >, <, >=, LIKE, IN, BETWEEN, IS NULL ๋“ฑ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
SELECT ename, sal
FROM emp
WHERE sal >= 3000; # ๊ธ‰์—ฌ๊ฐ€ 3000 ์ด์ƒ์ธ ์ง์›๋งŒ ์ถœ๋ ฅ

SELECT ename, deptno
FROM emp
WHERE deptno IN (10, 20); # ๋ถ€์„œ๋ฒˆํ˜ธ๊ฐ€ 10 ๋˜๋Š” 20์ธ ์ง์›๋งŒ ์กฐํšŒ

ํŠน์ˆ˜ ์—ฐ์‚ฐ์ž

SELECT ENAME, JOB FROM EMP WHERE ENAME LIKE '_A%';
-- ๋‘ ๋ฒˆ์งธ ๋ฌธ์ž๊ฐ€ A์ธ ์ด๋ฆ„

GROUP BY โ€” ๊ทธ๋ฃน๋ณ„ ์ง‘๊ณ„

  • SELECT ์นผ๋Ÿผ๋ช…, ์ง‘๊ณ„ํ•จ์ˆ˜(์นผ๋Ÿผ๋ช…) FROM ํ…Œ์ด๋ธ”๋ช… GROUP BY ๊ทธ๋ฃนํ™”ํ• _์นผ๋Ÿผ๋ช…;
    • ์ง€์ •ํ•œ ์นผ๋Ÿผ์˜ ๊ฐ’์ด ๊ฐ™์€ ํ–‰์„ ๊ทธ๋ฃนํ™”ํ•˜์—ฌ ๊ฐ ๊ทธ๋ฃน์— ์ง‘๊ณ„ ํ•จ์ˆ˜๋ฅผ ์ ์šฉ
-- ๋ถ€์„œ๋ณ„๋กœ ํ‰๊ท  ๊ธ‰์—ฌ๋ฅผ ๊ณ„์‚ฐ
SELECT deptno, AVG(sal) AS avg_salary
FROM emp
GROUP BY deptno;
-- ๋ถ€์„œ๋ณ„/์ง๋ฌด๋ณ„ ํ‰๊ท  ๊ธ‰์—ฌ
SELECT deptno, job, AVG(sal) AS avg_salary
FROM emp
GROUP BY deptno, job;

์ง‘๊ณ„ ํ•จ์ˆ˜

SELECT COUNT(*) AS ์ง์›์ˆ˜, SUM(SAL) AS ๊ธ‰์—ฌํ•ฉ๊ณ„, AVG(SAL) AS ํ‰๊ท ๊ธ‰์—ฌ FROM EMP;

HAVING โ€” ๊ทธ๋ฃน ์กฐ๊ฑด ํ•„ํ„ฐ๋ง

  • SELECT ์นผ๋Ÿผ๋ช…, ์ง‘๊ณ„ํ•จ์ˆ˜(์นผ๋Ÿผ๋ช…) FROM ํ…Œ์ด๋ธ”๋ช… GROUP BY ๊ทธ๋ฃนํ™”ํ• _์นผ๋Ÿผ๋ช… HAVING ์ง‘๊ณ„ํ•จ์ˆ˜_์กฐ๊ฑด;
    • HAVING ์ ˆ์€ GROUP BY๋กœ ๋งŒ๋“ค์–ด์ง„ ๊ทธ๋ฃน ์ค‘์—์„œ ํŠน์ • ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๊ทธ๋ฃน๋งŒ ์„ ํƒ
SELECT deptno, AVG(sal) AS avg_salary
FROM emp
GROUP BY deptno
HAVING AVG(sal) >= 2000;
# ํ‰๊ท  ๊ธ‰์—ฌ๊ฐ€ 2000 ์ด์ƒ์ธ ๋ถ€์„œ๋งŒ ์ถœ๋ ฅ
## AVG(sal)์ฒ˜๋Ÿผ ์ง‘๊ณ„ํ•จ์ˆ˜ ๊ฒฐ๊ณผ์— ์กฐ๊ฑด์„ ๊ฑธ ๋•Œ HAVING์„ ์จ์•ผ ํ•จ

  • COUNT(*): NULL ํฌํ•จ ๋ชจ๋“  ํ–‰์„ ์…ˆ
    • SELECT COUNT(comm) FROM emp;
      • comm ์ปฌ๋Ÿผ(์ปค๋ฏธ์…˜)์— NULL์ด ์•„๋‹Œ ๊ฐ’๋งŒ ์„ผ๋‹ค.

count()

ORDER BY โ€” ์ •๋ ฌ

  • SELECT ์นผ๋Ÿผ๋ช… FROM ํ…Œ์ด๋ธ”๋ช… ORDER BY ์ •๋ ฌ๊ธฐ์ค€์นผ๋Ÿผ [ASC|DESC];
    • ๊ธฐ๋ณธ์€ ์˜ค๋ฆ„์ฐจ์ˆœ(ASC), ๋‚ด๋ฆผ์ฐจ์ˆœ์€ DESC
SELECT ename, sal
FROM emp
ORDER BY sal DESC;
# ๊ธ‰์—ฌ ๋†’์€ ์ˆœ์œผ๋กœ ์ •๋ ฌ

์‹œํ—˜ ๋Œ€๋น„

    1. ๊ฐœ์ฒด โ†’ ํ…Œ์ด๋ธ”, ์†์„ฑ โ†’ ์นผ๋Ÿผ, ๊ด€๊ณ„ โ†’ ์™ธ๋ž˜ํ‚ค๋กœ ๋งคํ•‘๋œ๋‹คโ€”๋ชจ๋ธ์ด ๋ช…ํ™•ํ• ์ˆ˜๋ก ์ฟผ๋ฆฌ๊ฐ€ ๋‹จ์ˆœํ•ด์ง„๋‹ค.
    1. SELECT ๋ฌธ์˜ ๋…ผ๋ฆฌ์  ์‹คํ–‰ ์ˆœ์„œ๋Š”
    • FROM โ†’ WHERE โ†’ GROUP BY โ†’ HAVING โ†’ SELECT โ†’ ORDER BY
    1. DISTINCT๋กœ ์ค‘๋ณต์„ ์ œ๊ฑฐํ•˜๊ณ , ๋ณ„์นญ(ALIAS) ์œผ๋กœ ๊ฒฐ๊ณผ ๊ฐ€๋…์„ฑ์„ ๋†’์ธ๋‹ค. ์‚ฐ์ˆ ยท๋ฌธ์ž ์—ฐ์‚ฐ ์‹œ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ฃผ์˜ํ•œ๋‹ค.
    1. ๋‹จ์ผํ–‰ ํ•จ์ˆ˜(LOWER, ABS ๋“ฑ)์™€ ๋‹ค์ค‘ํ–‰ ํ•จ์ˆ˜(COUNT, SUM ๋“ฑ)๋Š” ์šฉ๋„๊ฐ€ ๋‹ค๋ฅด๋‹คโ€”์ง‘๊ณ„๋Š” ํ›„์ž์—์„œ๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค.
    1. WHERE๋Š” ํ–‰ ํ•„ํ„ฐ, HAVING์€ ๊ทธ๋ฃน ํ•„ํ„ฐ๋‹ค. ์ง‘๊ณ„ ํ•จ์ˆ˜ ์กฐ๊ฑด์€ HAVING์— ์ž‘์„ฑํ•œ๋‹ค

Day 5

DDL(Data Definition Language)

  • ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ(ํ…Œ์ด๋ธ”, ์ปฌ๋Ÿผ ๋“ฑ) ์ •์˜ / ๋ณ€๊ฒฝ
    • CREATE, ALTER, DROP

1. CREATE โ€” ์ƒˆ ๊ฐ์ฒด(ํ…Œ์ด๋ธ” ๋“ฑ) ์ƒ์„ฑ

2. ALTER โ€” ๊ธฐ์กด ๊ตฌ์กฐ ๋ณ€๊ฒฝ

3. DROP โ€” ๊ฐ์ฒด(ํ…Œ์ด๋ธ” ๋“ฑ) ์‚ญ์ œ


DML(Data Manipulation Language)

  • ํ…Œ์ด๋ธ” ์•ˆ์˜ ์‹ค์ œ ๋ฐ์ดํ„ฐ ์กฐ์ž‘
    • SELECT, INSERT, UPDATE, DELETE

INSERT โ€” ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€

UPDATE โ€” ๋ฐ์ดํ„ฐ ์ˆ˜์ •

DELETE โ€” ๋ฐ์ดํ„ฐ ์‚ญ์ œ


DCL(Data Control Language)

  • ๊ถŒํ•œ, ํŠธ๋žœ์žญ์…˜ ์ œ์–ด
    • GRANT, REVOKE, COMMIT, ROLLBACK

COMMIT / ROLLBACK ์˜ˆ์‹œ

์‹œํ—˜ ๋นˆ์ถœ ํฌ์ธํŠธ

    1. ์ž๋™์œผ๋กœ ์ปค๋ฐ‹ ๋˜๋Š” ๋ช…๋ น์–ด: DDL (CREATE, ALTER, DROP)
    1. ํ…Œ์ด๋ธ”์˜ ๊ตฌ์กฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๋ช…๋ น์–ด: ALTER
    1. ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•˜๋˜ ๊ตฌ์กฐ๋Š” ์œ ์ง€ํ•˜๋Š” ๋ช…๋ น์–ด: DELETE
    1. ๋ฐ์ดํ„ฐ๋ฅผ ์™„์ „ํžˆ ์‚ญ์ œํ•˜๊ณ  ๋ณต๊ตฌ ๋ถˆ๊ฐ€๋Šฅํ•œ ๋ช…๋ น์–ด: DROP
    1. ํŠธ๋žœ์žญ์…˜ ์ œ์–ด๊ฐ€ ๊ฐ€๋Šฅํ•œ ๋ช…๋ น์–ด: INSERT, UPDATE, DELETE

Day 6

JOIN

  • ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ”์˜ ๊ณตํ†ต๋œ ์ปฌ๋Ÿผ(์ฃผ๋กœ PK/FK ๊ด€๊ณ„) ์„ ๊ธฐ์ค€์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜์˜ ๊ฒฐ๊ณผ๋กœ ๋ฌถ๋Š” ๊ฒƒ

INNER JOIN (๋‚ด๋ถ€ ์กฐ์ธ)

  • ๋‘ ํ…Œ์ด๋ธ”์— ๊ณตํ†ต๋œ ๊ฐ’์ด ์žˆ๋Š” ํ–‰๋งŒ ๊ฐ€์ ธ์˜ด
  • SELECT ์นผ๋Ÿผ๋ช… FROM ํ…Œ์ด๋ธ”1 [INNER] JOIN ํ…Œ์ด๋ธ”2 ON ํ…Œ์ด๋ธ”1.์นผ๋Ÿผ = ํ…Œ์ด๋ธ”2.์นผ๋Ÿผ;

LEFT JOIN (์™ผ์ชฝ ์กฐ์ธ)

  • ์™ผ์ชฝ ํ…Œ์ด๋ธ”(employees)์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ + ์˜ค๋ฅธ์ชฝ์˜ ์ผ์น˜ ๋ฐ์ดํ„ฐ๋งŒ

RIGHT JOIN (์˜ค๋ฅธ์ชฝ ์กฐ์ธ)

  • ์˜ค๋ฅธ์ชฝ ํ…Œ์ด๋ธ”(departments)์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ + ์™ผ์ชฝ์˜ ์ผ์น˜ ๋ฐ์ดํ„ฐ๋งŒ

SELF JOIN (์ž๊ธฐ ์กฐ์ธ)

  • ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ”์„ ์ž๊ธฐ ์ž์‹ ๊ณผ ์กฐ์ธํ•˜๋Š” ๋ฐฉ๋ฒ•

FULL OUTER JOIN

  • ๋‘ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ํ–‰์„ ๋ฐ˜ํ™˜
  • SELECT S.ID, S.NAME, D.DNAME FROM STUDENT S FULL OUTER JOIN DEPARTMENT D ON S.DEPTNO = D.DEPTNO;

CROSS JOIN(๊ต์ฐจ ์กฐ์ธ)

  • ๋‘ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ํ–‰ ์กฐํ•ฉ์„ ๋ฐ˜ํ™˜
  • SELECT * FROM EMP CROSS JOIN DEPT;

์‹œํ—˜ ๋Œ€๋น„

  • INNER JOIN = ๊ต์ง‘ํ•ฉ, OUTER JOIN = NULL ๋ณด์กด. ์กฐ์ธ ์กฐ๊ฑด์— ์ธ๋ฑ์Šค๊ฐ€ ์ ์šฉ๋˜๋ฉด ํฐ ํญ์œผ๋กœ ์„ฑ๋Šฅ์ด ๊ฐœ์„  ๋œ๋‹ค.
  • ์‹คํ–‰ ๊ณ„ํš์—์„œ ์นด๋””๋„๋ฆฌํ‹ฐยทํ•„ํ„ฐ ๋น„์œจ์„ ํ™•์ธํ•ด ์ธ๋ฑ์Šคยท์กฐ์ธ ์ˆœ์„œ๋ฅผ ํŠœ๋‹ํ•œ๋‹ค.
  • SQL์€ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์„ ํ˜„์‹คํ™”ํ•˜๋Š” ๊ตฌํ˜„ ์–ธ์–ด๋‹คโ€”๋ชจ๋ธ-์ค‘์‹ฌ ์„ค๊ณ„๊ฐ€ SQL ๋ณต์žก๋„๋ฅผ ์ค„์ด๊ณ  ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๋†’์ธ๋‹ค.

day 7

๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง ๊ธฐ์ดˆ (40%)

๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง ๊ฐœ๋…

  • ๋ชจ๋ธ๋ง(Modeling)
    • ํ˜„์‹ค ์„ธ๊ณ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‹œ์Šคํ…œ์— ๋งž๊ฒŒ ์ถ”์ƒํ™”ํ•˜๋Š” ๊ณผ์ •
  • ๋ฐ์ดํ„ฐ ๋ชจ๋ธ(Data Model)
    • ํ˜„์‹ค ๋ฐ์ดํ„ฐ๋ฅผ Entity(์—”ํ„ฐํ‹ฐ), Attribute(์†์„ฑ), Relationship(๊ด€๊ณ„)๋กœ ํ‘œํ˜„
  • ๋ชฉ์ 
    • ๋ฐ์ดํ„ฐ ์ค‘๋ณต ์ตœ์†Œํ™”, ๋ฌด๊ฒฐ์„ฑ ๋ณด์žฅ, ๊ตฌ์กฐ์  ์ผ๊ด€์„ฑ ์œ ์ง€

์—”ํ„ฐํ‹ฐ(Entity)

  • ํ•˜๋‚˜์˜ ๋…๋ฆฝ์ ์ธ ๊ฐ์ฒด (ํ…Œ์ด๋ธ” ๋‹จ์œ„) (์˜ˆ: ๊ณ ๊ฐ, ์ฃผ๋ฌธ, ์ƒํ’ˆ)
  • ํŠน์ง•
    • ์‹๋ณ„์ž ์กด์žฌ, ์†์„ฑ ๋ณด์œ , ๊ด€๊ณ„ ์กด์žฌ
  • ๊ธฐ๋ณธ ์—”ํ„ฐํ‹ฐ
    • ๋…๋ฆฝ์ ์œผ๋กœ ์กด์žฌ (ํšŒ์›, ์ƒํ’ˆ)
  • ์ค‘์‹ฌ ์—”ํ„ฐํ‹ฐ
    • ์—…๋ฌด์˜ ์ค‘์‹ฌ (์ฃผ๋ฌธ, ๊ณ„์•ฝ)
  • ํ–‰์œ„ ์—”ํ„ฐํ‹ฐ
    • ์ด๋ฒคํŠธ์„ฑ (์ฃผ๋ฌธ์ƒ์„ธ, ๋กœ๊ทธ๊ธฐ๋ก ๋“ฑ

์†์„ฑ(Attribute)

  • ์—”ํ„ฐํ‹ฐ์˜ ํŠน์ง•์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ปฌ๋Ÿผ (์˜ˆ: ๊ณ ๊ฐ(์ด๋ฆ„, ์ „ํ™”๋ฒˆํ˜ธ, ์ฃผ์†Œ))
    • ์ข…๋ฅ˜: ๊ธฐ๋ณธ์†์„ฑ / ํŒŒ์ƒ์†์„ฑ / ์‹๋ณ„์†์„ฑ

๊ด€๊ณ„(Relationship)

  • ์—”ํ„ฐํ‹ฐ ๊ฐ„์˜ ์—ฐ๊ฒฐ (1:1, 1:N, N:M)
    • N:M ๊ด€๊ณ„๋Š” ์ค‘๊ฐ„ ์—”ํ„ฐํ‹ฐ(๊ต์ฐจ ํ…Œ์ด๋ธ”)๋กœ ๋ถ„๋ฆฌํ•ด์•ผ ํ•จ

์‹๋ณ„์ž(Identifier, PK)

  • ๊ธฐ๋ณธ ์‹๋ณ„์ž
    • ์—”ํ„ฐํ‹ฐ์˜ ์ฃผ ํ‚ค (PK)
  • ๋Œ€์ฒด ์‹๋ณ„์ž
    • ๊ธฐ๋ณธํ‚ค๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š์ง€๋งŒ ์œ ์ผํ•œ ๊ฐ’ (์ด๋ฉ”์ผ, ์ฃผ๋ฏผ๋ฒˆํ˜ธ ๋“ฑ)
  • ์™ธ๋ž˜ ์‹๋ณ„์ž
    • ๋‹ค๋ฅธ ์—”ํ„ฐํ‹ฐ์˜ ๊ธฐ๋ณธํ‚ค๋ฅผ ์ฐธ์กฐ (FK)

์ •๊ทœํ™”(Normalization)

  • 1NF
    • ์›์ž๊ฐ’๋งŒ ์ €์žฅ ์ „ํ™”๋ฒˆํ˜ธ ์—ฌ๋Ÿฌ ๊ฐœ โ†’ ํ–‰ ๋ถ„๋ฆฌ
  • 2NF
    • ๋ถ€๋ถ„ ์ข…์† ์ œ๊ฑฐ(ex. ๋ณตํ•ฉํ‚ค์˜ ์ผ๋ถ€์— ์ข…์† ์ œ๊ฑฐ)
  • 3NF
    • ์ดํ–‰ ์ข…์† ์ œ๊ฑฐ(ex. ํ•™๊ณผ๋ช…์€ ํ•™๊ณผID์—๋งŒ ์ข…์†)
  • BCNF
    • ๊ฒฐ์ •์ž์ด๋ฉด์„œ ํ›„๋ณดํ‚ค๊ฐ€ ์•„๋‹Œ ์ปฌ๋Ÿผ ์ œ๊ฑฐ

ERD(Entity Relationship Diagram)

  • ์—”ํ„ฐํ‹ฐ + ์†์„ฑ + ๊ด€๊ณ„๋ฅผ ์‹œ๊ฐํ™”
  • ํ‘œ๊ธฐ๋ฒ•: IE / Barker ํ‘œ๊ธฐ๋ฒ•
  • ์นด๋””๋„๋ฆฌํ‹ฐ: (1:1), (1:N), (N:M)
  • ๊ด€๊ณ„ ์„ ํƒ์„ฑ: ํ•„์ˆ˜ / ์„ ํƒ ๊ด€๊ณ„ ํ‘œ์‹œ(โŠ•, โ—‹ ๋“ฑ)

SQL ๊ธฐ๋ณธ ๋ฐ ํ™œ์šฉ (60%)

  • SELECT ๋ฌธ, JOIN, SUBQUERY, DML, DDL, ํŠธ๋žœ์žญ์…˜ ๋“ฑ SQL์˜ ์ „๋ฐ˜์  ํ™œ์šฉ ๋Šฅ๋ ฅ ํ‰๊ฐ€

SELECT ๊ธฐ๋ณธ ๊ตฌ์กฐ

  • SELECT ์ปฌ๋Ÿผ / FROM ํ…Œ์ด๋ธ” / WHERE ์กฐ๊ฑด /
  • GROUP BY ๊ทธ๋ฃน์ปฌ๋Ÿผ / HAVING ๊ทธ๋ฃน์กฐ๊ฑด / ORDER BY ์ •๋ ฌ;

์‹คํ–‰ ์ˆœ์„œ

  • FROM โ†’ WHERE โ†’ GROUP BY โ†’ HAVING โ†’ SELECT โ†’ ORDER BY

WHERE vs HAVING

  • WHERE์—์„œ๋Š” ์ง‘๊ณ„ํ•จ์ˆ˜(SUM, AVG ๋“ฑ) ์‚ฌ์šฉ ๋ถˆ๊ฐ€
    • ์ง‘๊ณ„ ํ›„ ์กฐ๊ฑด์€ ๋ฐ˜๋“œ์‹œ HAVING
      | ๊ตฌ๋ถ„ | ์‹œ์  | ๋Œ€์ƒ | ์˜ˆ์‹œ |
      | ---------- | ---- | --------- | ------------------------- |
      | WHERE | ์ง‘๊ณ„ ์ „ | ํ–‰(Row) | WHERE dept = 'IT' |
      | HAVING | ์ง‘๊ณ„ ํ›„ | ๊ทธ๋ฃน(Group) | HAVING AVG(sal) >= 5000 |

์ฃผ์š” ํ•จ์ˆ˜(Function)

๋ถ„๋ฅ˜์˜ˆ์‹œ์„ค๋ช…
์ง‘๊ณ„ํ•จ์ˆ˜SUM, AVG, COUNT, MAX, MIN๊ทธ๋ฃน๋ณ„ ํ†ต๊ณ„
๋ฌธ์žํ•จ์ˆ˜CONCAT, SUBSTR, LENGTH๋ฌธ์ž์—ด ์กฐ์ž‘
๋‚ ์งœํ•จ์ˆ˜SYSDATE, ADD_MONTHS, TO_CHAR๋‚ ์งœ ๊ณ„์‚ฐ
ํ˜•๋ณ€ํ™˜CAST, TO_NUMBER, TO_CHAR๋ฐ์ดํ„ฐ ํƒ€์ž… ๋ณ€ํ™˜
NULL ์ฒ˜๋ฆฌNVL(col,0), COALESCE(col,1)NULL ๋Œ€์ฒด

JOIN (์กฐ์ธ)

์ข…๋ฅ˜์„ค๋ช…์˜ˆ์‹œ
INNER JOIN์–‘์ชฝ ํ…Œ์ด๋ธ”์— ๋ชจ๋‘ ์กด์žฌํ•˜๋Š” ํ–‰๋งŒA JOIN B ON A.id = B.id
LEFT JOIN์™ผ์ชฝ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ํ–‰ ํฌํ•จA LEFT JOIN B ON A.id = B.id
RIGHT JOIN์˜ค๋ฅธ์ชฝ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ํ–‰ ํฌํ•จA RIGHT JOIN B ON A.id = B.id
FULL OUTER JOIN์–‘์ชฝ ๋ชจ๋‘ ํฌํ•จ (NULL ๋ณด์กด)A FULL JOIN B ON A.id = B.id

์„œ๋ธŒ์ฟผ๋ฆฌ(Subquery)

์œ ํ˜•์„ค๋ช…์‚ฌ์šฉ ์—ฐ์‚ฐ์ž์˜ˆ์‹œ
๋‹จ์ผ ํ–‰๊ฒฐ๊ณผ 1๊ฐœ=, <, >WHERE sal > (SELECT AVG(sal) FROM emp)
๋‹ค์ค‘ ํ–‰์—ฌ๋Ÿฌ ๊ฒฐ๊ณผIN, ANY, ALLWHERE deptno IN (SELECT deptno FROM dept)
๋‹ค์ค‘ ์ปฌ๋Ÿผ์—ฌ๋Ÿฌ ์ปฌ๋Ÿผ ๋น„๊ต(A,B) IN(deptno, job) IN (SELECT deptno, job FROM emp)
์ƒ๊ด€ ์„œ๋ธŒ์ฟผ๋ฆฌ์™ธ๋ถ€์ฟผ๋ฆฌ ๊ฐ’ ์ฐธ์กฐ-`WHERE sal >

์ง‘ํ•ฉ ์—ฐ์‚ฐ์ž (Set Operators)

์—ฐ์‚ฐ์ž์„ค๋ช…
UNION์ค‘๋ณต ์ œ๊ฑฐํ•œ ํ•ฉ์ง‘ํ•ฉ
UNION ALL์ค‘๋ณต ํฌํ•จํ•œ ํ•ฉ์ง‘ํ•ฉ
INTERSECT๊ต์ง‘ํ•ฉ
MINUS (EXCEPT)์ฐจ์ง‘ํ•ฉ

์œˆ๋„์šฐ ํ•จ์ˆ˜ (Window Function)

ํ•จ์ˆ˜์„ค๋ช…์˜ˆ์‹œ
RANK()๋™์ผ๊ฐ’ ๊ฑด๋„ˆ๋›ฐ๋Š” ์ˆœ์œ„RANK() OVER (ORDER BY sal DESC)
DENSE_RANK()์ˆœ์œ„ ๊ฑด๋„ˆ๋›ฐ์ง€ ์•Š์ŒDENSE_RANK() OVER (ORDER BY sal DESC)
ROW_NUMBER()๊ณ ์œ  ์ผ๋ จ๋ฒˆํ˜ธ ๋ถ€์—ฌROW_NUMBER() OVER (ORDER BY sal DESC)
SUM(), AVG()๋ˆ„์  ์ง‘๊ณ„SUM(sal) OVER (ORDER BY empno)
LAG(), LEAD()์ด์ „/๋‹ค์Œ ํ–‰ ์ฐธ์กฐLAG(sal,1) OVER (ORDER BY empno)

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

๋ช…๋ น์–ด๊ธฐ๋Šฅ์˜ˆ์‹œ
INSERTํ–‰ ์ถ”๊ฐ€INSERT INTO emp VALUES (...);
UPDATEํ–‰ ์ˆ˜์ •UPDATE emp SET sal = 5000 WHERE id = 1;
DELETEํ–‰ ์‚ญ์ œDELETE FROM emp WHERE id = 1;
MERGE์กฐ๊ฑด์— ๋”ฐ๋ผ INSERT / UPDATE ๋ณ‘ํ–‰MERGE INTO emp USING dept ON (...) WHEN MATCHED THEN UPDATE ...

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

๋ช…๋ น์–ด๊ธฐ๋Šฅ์˜ˆ์‹œ
CREATE TABLEํ…Œ์ด๋ธ” ์ƒ์„ฑCREATE TABLE emp (id INT, name VARCHAR(20));
ALTER TABLE๊ตฌ์กฐ ๋ณ€๊ฒฝALTER TABLE emp ADD COLUMN age INT;
DROP TABLEํ…Œ์ด๋ธ” ์‚ญ์ œDROP TABLE emp;
TRUNCATE TABLE์ „์ฒด ๋ฐ์ดํ„ฐ ์‚ญ์ œ (๋ณต๊ตฌ ๋ถˆ๊ฐ€)TRUNCATE TABLE emp;
CONSTRAINT์ œ์•ฝ์กฐ๊ฑด ์ •์˜ (PK, FK, UNIQUE, CHECK ๋“ฑ)PRIMARY KEY(id)

ํŠธ๋žœ์žญ์…˜ (Transaction)

  • ๋ช…๋ น์–ด: COMMIT, ROLLBACK, SAVEPOINT
์†์„ฑ์„ค๋ช…
A (Atomicity)๋ชจ๋‘ ์ˆ˜ํ–‰๋˜๊ฑฐ๋‚˜ ๋ชจ๋‘ ์ˆ˜ํ–‰๋˜์ง€ ์•Š์•„์•ผ ํ•จ
C (Consistency)์ผ๊ด€๋œ ์ƒํƒœ ์œ ์ง€
I (Isolation)ํŠธ๋žœ์žญ์…˜ ๊ฐ„ ๊ฐ„์„ญ ๊ธˆ์ง€
D (Durability)์ปค๋ฐ‹ ํ›„ ์˜๊ตฌ ๋ฐ˜์˜

์ธ๋ฑ์Šค (Index)

๊ตฌ๋ถ„์„ค๋ช…
์ •์˜๊ฒ€์ƒ‰ ์†๋„ ํ–ฅ์ƒ์„ ์œ„ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ (B-Tree)
์žฅ์ ์กฐํšŒ ์„ฑ๋Šฅ ํ–ฅ์ƒ
๋‹จ์ ์‚ฝ์ž…/์ˆ˜์ •/์‚ญ์ œ ์‹œ ๋ถ€ํ•˜ ๋ฐœ์ƒ
์ ์šฉ ๋Œ€์ƒWHERE, JOIN, ORDER BY ์กฐ๊ฑด์— ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ์ปฌ๋Ÿผ

๋ทฐ (View)

๊ตฌ๋ถ„์„ค๋ช…
์ •์˜SQL ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ƒ ํ…Œ์ด๋ธ”๋กœ ์ €์žฅ
์ƒ์„ฑCREATE VIEW v_emp AS SELECT name, sal FROM emp;
์žฅ์ ๋ณด์•ˆ์„ฑ โ†‘, ์žฌ์‚ฌ์šฉ์„ฑ โ†‘, ์ฟผ๋ฆฌ ๋‹จ์ˆœํ™”
๋‹จ์ ์„ฑ๋Šฅ ์ €ํ•˜, DML ์ œ์•ฝ ๊ฐ€๋Šฅ์„ฑ ์žˆ์Œ

์‚ฌ์šฉ์ž ๋ฐ ๊ถŒํ•œ

๋ช…๋ น์–ด๊ธฐ๋Šฅ์˜ˆ์‹œ
GRANT๊ถŒํ•œ ๋ถ€์—ฌGRANT SELECT ON emp TO user1;
REVOKE๊ถŒํ•œ ํšŒ์ˆ˜REVOKE SELECT ON emp FROM user1;
ROLE์—ฌ๋Ÿฌ ๊ถŒํ•œ์„ ๋ฌถ์€ ๋‹จ์œ„GRANT role_name TO user1;
profile
์•ˆ๋…•ํ•˜์„ธ์š”.

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