๐ SQLD 3์ฃผ ์์ฑ ๊ณต๋ถ ํ๋
๐ฏ ๋ชฉํ: SQLD ํฉ๊ฒฉ (60์ ์ด์, ์ฌ์ ์๊ฒ 70์ ๋ชฉํ)
โฐ ๊ธฐ๊ฐ: 3์ฃผ (21์ผ)
๐งฉ ํ๋ฃจ 2~3์๊ฐ ๊ธฐ์ค
๐ ์ฌ์ฉ ๊ต์ฌ: ์๋์ 2์ฃผ ์์ฑ / ๋ด์ผ์ SQL ๊ฐ๋ฐ์ / ๋ฌด๋ฃ ๊ธฐ์ถ PDF
๐ ๋ชฉ์ฐจ
- Week 1 โ ์ด๋ก ์ง์ค๊ธฐ
- Week 2 โ ๊ธฐ์ถ ์ง์ค๊ธฐ
- Week 3 โ ์ค์ ์์ฑ๊ธฐ
- ์ฐธ๊ณ ์๋ฃ
- ๊ณต๋ถ ํ
๐๏ธ Week 1 โ ์ด๋ก ์ง์ค๊ธฐ (๊ฐ๋
๊ธฐ๋ฐ ๋ค์ง๊ธฐ)
| ๋ ์ง | ํ์ต ์ฃผ์ | ์ธ๋ถ ๋ด์ฉ | ์งํ |
|---|
| โ
Day 1 | ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง ๊ธฐ์ด | ์ํฐํฐ, ์์ฑ, ๊ด๊ณ ๊ฐ๋
์ดํด | 2025/10/19 [Y] |
| โ
Day 2 | ์ ๊ทํ | 1~3์ ๊ทํ + ์ด์ํ์ + ์๋ณ์ ์ ๋ฆฌ | 2025/10/19 [Y] |
| โ
Day 3 | ERD ์ค์ต | ํ์โ์ฃผ๋ฌธโ์ํ ERD ์ง์ ์์ฑ | 2025/10/19 [Y] |
| โ
Day 4 | SQL ๊ธฐ๋ณธ ๋ฌธ๋ฒ | SELECT / FROM / WHERE / GROUP BY | 2025/10/20 [Y] |
| โ
Day 5 | DDL & DML | CREATE, INSERT, UPDATE, DELETE | 2025/10/20 [Y] |
| โ
Day 6 | ์กฐ์ธ(JOIN) ๊ธฐ์ด | INNER / LEFT / RIGHT / SELF JOIN | 2025/10/21 [Y] |
| โ
Day 7 | 1์ฃผ์ฐจ ๋ณต์ต | ์ ๊ทํ + ERD + SQL๋ฌธ ์ง์ ์์ฑ | 2025/10/25 [Y] |
๐๏ธ Week 2 โ ๊ธฐ์ถ ์ง์ค๊ธฐ (์ ํ ๊ฐ ์ก๊ธฐ)
| ๋ ์ง | ํ์ต ์ฃผ์ | ์ธ๋ถ ๋ด์ฉ | ์งํ |
|---|
| โ
Day 8 | 45ํ ๊ธฐ์ถ 1๊ณผ๋ชฉ | ๋ฐ์ดํฐ๋ชจ๋ธ๋ง ๋ฌธ์ ํ์ด + ํด์ค ๋ถ์ | [ ] |
| โ
Day 9 | 45ํ ๊ธฐ์ถ 2๊ณผ๋ชฉ | SQL ํ์ฉ ๋ฌธ์ ํ์ด + ์ค๋ต์ ๋ฆฌ | [ ] |
| โ
Day 10 | 46ํ ๊ธฐ์ถ | JOIN, GROUP BY, ์๋ธ์ฟผ๋ฆฌ ์ค์ฌ | [ ] |
| โ
Day 11 | ๋ณต์ต + SQL ํจ์ | COUNT, SUM, NVL, CASE WHEN ๋ฑ | [ ] |
| โ
Day 12 | 47ํ ๊ธฐ์ถ | ๋ณตํฉ SELECT / HAVING / ORDER BY | [ ] |
| โ
Day 13 | ์กฐ์ธ & ์๋ธ์ฟผ๋ฆฌ ์ฌํ | ์ค๋ฌดํ ๋ฌธ์ ์์ฃผ ๋ณต์ต | [ ] |
| โ
Day 14 | ๋ชจ์๊ณ ์ฌ 1ํ์ฐจ | ์ค์ ์ํ์ฒ๋ผ 90๋ถ ํ์ด๋จธ ํ๊ธฐ | [ ] |
๐๏ธ Week 3 โ ์ค์ ์์ฑ๊ธฐ (์ค์ ๊ฐ๊ฐ & ์ฝ์ ๋ณด์)
| ๋ ์ง | ํ์ต ์ฃผ์ | ์ธ๋ถ ๋ด์ฉ | ์งํ |
|---|
| โ
Day 15 | 55ํ ๊ธฐ์ถ | ์ต์ ๊ธฐ์ถ ์ ํ ํ์
| [ ] |
| โ
Day 16 | 56ํ ๊ธฐ์ถ | ํจ์ + ์๋ธ์ฟผ๋ฆฌ ์์ฉ ๋ฌธ์ | [ ] |
| โ
Day 17 | ๋ณต์ต + ์ค๋ต๋
ธํธ | ์์ฃผ ํ๋ฆฐ ๊ฐ๋
์ ๋ฆฌ | [ ] |
| โ
Day 18 | ์ค์ ๋ชจ์๊ณ ์ฌ 2ํ์ฐจ | ์๊ฐ ์ฌ๋ฉฐ ํ๊ธฐ (์ค์ ๋ชจ๋) | [ ] |
| โ
Day 19 | ์ฝ์ ์ง์ค ๋ณต์ต | ์ ๊ทํ, ์๋ณ์, ์กฐ์ธ ๋ค์๋ณด๊ธฐ | [ ] |
| โ
Day 20 | ์์ฝ๋
ธํธ ์ด์ ๋ฆฌ | ์ํ ์ง์ ํต์ฌ ํค์๋ ๋ณต์ต | [ ] |
| โ
Day 21 | ํด์ & ์ปจ๋์
์กฐ์ | ์ถฉ๋ถํ ์๋ฉด & ์ํ ๋๋น ๋ง์ธ๋์
| [ ] |
๐ ์ฐธ๊ณ ์๋ฃ
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๊ฐ
- ์ฝ์
์ด์
- ์ผ๋ถ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ ์ ์์
- ์ญ์ ์ด์
- ์ผ๋ถ ์ ๋ณด๋ฅผ ์ญ์ ํ๋ฉด ๋ค๋ฅธ ์ ๋ณด๋ ์ฌ๋ผ์ง
- ๊ฐฑ์ ์ด์
- ๋ฐ์ดํฐ๋ฅผ ํ ๊ณณ๋ง ์์ ํ๋ฉด ๋ถ์ผ์น ๋ฐ์
์ 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;
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;
WHERE โ ์กฐ๊ฑด ํํฐ๋ง
SELECT ์นผ๋ผ๋ช
1, ์นผ๋ผ๋ช
2, ... FROM ํ
์ด๋ธ๋ช
WHERE ์กฐ๊ฑด์;
- ํน์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ํ(row)๋ง ์กฐํ
- ์กฐ๊ฑด์์ =, >, <, >=, LIKE, IN, BETWEEN, IS NULL ๋ฑ ์ฌ์ฉ ๊ฐ๋ฅ
SELECT ename, sal
FROM emp
WHERE sal >= 3000;
SELECT ename, deptno
FROM emp
WHERE deptno IN (10, 20);
ํน์ ์ฐ์ฐ์

SELECT ENAME, JOB FROM EMP WHERE ENAME LIKE '_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;

- 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;
์ํ ๋๋น
- ๊ฐ์ฒด โ ํ
์ด๋ธ, ์์ฑ โ ์นผ๋ผ, ๊ด๊ณ โ ์ธ๋ํค๋ก ๋งคํ๋๋คโ๋ชจ๋ธ์ด ๋ช
ํํ ์๋ก ์ฟผ๋ฆฌ๊ฐ ๋จ์ํด์ง๋ค.
- SELECT ๋ฌธ์ ๋
ผ๋ฆฌ์ ์คํ ์์๋
- FROM โ WHERE โ GROUP BY โ HAVING โ SELECT โ ORDER BY
- DISTINCT๋ก ์ค๋ณต์ ์ ๊ฑฐํ๊ณ , ๋ณ์นญ(ALIAS) ์ผ๋ก ๊ฒฐ๊ณผ ๊ฐ๋
์ฑ์ ๋์ธ๋ค. ์ฐ์ ยท๋ฌธ์ ์ฐ์ฐ ์ ์ฐ์ ์์๋ฅผ ์ฃผ์ํ๋ค.
- ๋จ์ผํ ํจ์(LOWER, ABS ๋ฑ)์ ๋ค์คํ ํจ์(COUNT, SUM ๋ฑ)๋ ์ฉ๋๊ฐ ๋ค๋ฅด๋คโ์ง๊ณ๋ ํ์์์๋ง ๊ฐ๋ฅํ๋ค.
- WHERE๋ ํ ํํฐ, HAVING์ ๊ทธ๋ฃน ํํฐ๋ค. ์ง๊ณ ํจ์ ์กฐ๊ฑด์ HAVING์ ์์ฑํ๋ค
Day 5
DDL(Data Definition Language)
- ๋ฐ์ดํฐ ๊ตฌ์กฐ(ํ
์ด๋ธ, ์ปฌ๋ผ ๋ฑ) ์ ์ / ๋ณ๊ฒฝ
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 ์์

์ํ ๋น์ถ ํฌ์ธํธ
- ์๋์ผ๋ก ์ปค๋ฐ ๋๋ ๋ช
๋ น์ด: DDL (CREATE, ALTER, DROP)
- ํ
์ด๋ธ์ ๊ตฌ์กฐ๋ฅผ ๋ณ๊ฒฝํ๋ ๋ช
๋ น์ด: ALTER
- ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ๋ ๊ตฌ์กฐ๋ ์ ์งํ๋ ๋ช
๋ น์ด: DELETE
- ๋ฐ์ดํฐ๋ฅผ ์์ ํ ์ญ์ ํ๊ณ ๋ณต๊ตฌ ๋ถ๊ฐ๋ฅํ ๋ช
๋ น์ด: DROP
- ํธ๋์ญ์
์ ์ด๊ฐ ๊ฐ๋ฅํ ๋ช
๋ น์ด: 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, ALL | WHERE 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; |