SQLD ๊ฐ๋ ์ ๋ฆฌ
๐๋ฐ์ดํฐ ๋ชจ๋ธ๋ง์ 3Step
- ๊ฐ๋ ์ ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง: ์ถ์ํ ์์ค์ด ๋๊ณ ์ ๋ฌด์ค์ฌ์ ์ด๊ณ ํฌ๊ด์ ์ธ ์์ค์ ๋ชจ๋ธ๋ง ์งํ, ์ ์ฌ์ ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง, EA ์๋ฆฝ์ ๋ง์ด ์ด์ฉ
- ๋ ผ๋ฆฌ์ ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง: Key, ์์ฑ, ๊ด๊ณ๋ค์ ํํํ๋ ์ ๊ทํ ํ๋์ด ์ด๋ฃจ์ด์ง๋ ๋จ๊ณ
- ๋ฌผ๋ฆฌ์ ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง: ์ค์ ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ด์ํ ์ ์๋๋ก ์ฑ๋ฅ, ์ ์ฅ ๋ฑ ๋ฌผ๋ฆฌ์ ์ธ ์ฑ๊ฒฉ์ ๊ณ ๋ คํ์ฌ ์ค๊ณ
๐๋ฐ์ดํฐ ์ค์นด๋ง์ ๊ตฌ์กฐ
- ์ธ๋ถ ์คํค๋ง: ๊ฐ ์ฌ์ฉ์๊ฐ ๋ณด๋ ์คํค๋ง ์ ์ ๋ฐ ํํ
- ๊ฐ๋ ์คํค๋ง: ๋ชจ๋ ์ฌ์ฉ์๊ฐ ๋ณด๋ ๋ฐ์ดํฐ ์ ์ ๋ฐ ํํ, ๊ด๊ณ๋ฅผ ์ ์ํ๋ ๋จ๊ณ
- ๋ด๋ถ ์คํค๋ง: ๋ฌผ๋ฆฌ์ ์ธ ์ ์ฅ ๊ตฌ์กฐ๋ฅผ ๋ํ๋ด๋ ๋จ๊ณ
๐์ํฐํฐ
๊ฐ๋
- ์ ์ ๊ฐ๋ฅํ ์ฌ๋ฌผ ๋๋ ๊ฐ๋
ํน์ง
- ๋ฐ๋์ ํด๋น ์ ๋ฌด์์ ํ์ํ๊ณ ๊ด๋ฆฌํ๊ณ ์ ํ๋ ์ ๋ณด์ฌ์ผ ํ๋ค.
- ์ ์ผํ ์๋ณ์์ ์ํด ์๋ณ์ด ๊ฐ๋ฅํด์ผ ํ๋ค.
- ์์์ ์ผ๋ก ์กด์ฌํ๋ ์ธ์คํด์ค์ ์งํฉ์ด์ด์ผ ํ๋ค. ("ํ ๊ฐ"๊ฐ ์๋๋ผ "๋ ๊ฐ ์ด์")
- ์ํฐํฐ๋ ์ ๋ฌด ํ๋ก์ธ์ค์ ์ํด ์ด์ฉ๋์ด์ผ ํ๋ค.
- ์ํฐํฐ๋ ๋ฐ๋์ ์์ฑ์ด ์์ด์ผ ํ๋ค. (ํ ๊ฐ์ ์ํฐํฐ๋ ๋ ๊ฐ ์ด์์ ์์ฑ์ ๊ฐ๋๋ค.)
- ์ํฐํฐ๋ ๋ค๋ฅธ ์ํฐํฐ์ ์ต์ ํ ๊ฐ ์ด์์ ๊ด๊ณ๊ฐ ์์ด์ผ ํ๋ค.
๋ถ๋ฅ
1) ๋ฐ์ ์์ ์ ๋ฐ๋ฅธ ๋ถ๋ฅ
ํ๊ธฐ์ค
- ๊ธฐ๋ณธ ์ํฐํฐ: ๋ค๋ฅธ ์ํฐํฐ์ ์ํฅ์ ๋ฐ์ง ์๊ณ ๋ ๋ฆฝ์ ์ผ๋ก ์์ฑ/์กด์ฌํ๋ ์ํฐํฐ
- ์ค์ฌ ์ํฐํฐ: ๊ธฐ๋ณธ ์ํฐํฐ์ ํ์ ์ํฐํฐ ์ฌ์ด๋ฅผ ์ฐ๊ฒฐํด์ฃผ๋ ์ค๊ฐ ์ํฐํฐ(๊ณ ๊ฐ, ์ํ)
- ํ์ ์ํฐํฐ: ํ์ ์ํฐํฐ๋ 2๊ฐ ์ด์์ ๋ถ๋ชจ ์ํฐํฐ๋ก๋ถํฐ ๋ฐ์๋๋ค.(์ฃผ๋ฌธ ๋ด์ญ)
2) ์ ํ, ๋ฌดํ์ ๋ฐ๋ฅธ ๋ถ๋ฅ
๊ฐ์ฌ์
- ์ ํ ์ํฐํฐ: ๋ฌผ๋ฆฌ์ ์ธ ํํ๋ก ์กด์ฌํ๊ณ , ์ง์์ ์ผ๋ก ์ฌ์ฉ๋๋ ์ํฐํฐ
- ๊ฐ๋ ์ํฐํฐ: ๋ฌผ๋ฆฌ์ ์ผ๋ก ํํ๊ฐ ์์ง๋ง ๊ด๋ฆฌํด์ผ ํ ์ ๋ณด๊ฐ ์ฌ์ฉ๋๋ ์ํฐํฐ
- ์ฌ๊ฑด ์ํฐํฐ: ์ ๋ฌด ํ๋ก์ธ์ค๋ฅผ ์คํํ๋ฉด์ ๋ฐ์ํ๋ ์ํฐํฐ
๐์์ฑ
๊ฐ๋
- ์ํฐํฐ ๊ฐ์ฒด๊ฐ ๊ฐ๊ณ ์๋ ์์ฑ์ ์๋ฏธํ๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ ์ด๋ธ์ ๊ฐ ํ๋๋ค์ด ์ํฐํฐ ์์ฑ์ด๋ผ๊ณ ๋ณด๋ฉด ๋๋ค.
- ์ํฐํฐ์ ํน์ง์ ๋ํ๋ด๋ ์ต์์ ๋ฐ์ดํฐ ๋จ์์ด๋ค.
ํน์ง
- ์ ๋ฌด์ ํ์ํ๊ณ ๊ด๋ฆฌํ๊ณ ์ ํ๋ ์ ๋ณด์ฌ์ผ ํ๋ค.
- ์ฃผ ์๋ณ์๋ฅผ ํตํด์ ์๋ณ๋ ์ ์์ด์ผ ํ๋ค.
- ํ๋์ ์์ฑ์๋ ๋จ ํ ๊ฐ์ ๊ฐ๋ง์ ๊ฐ์ง๋ค.
๋ถ๋ฅ
1) ํน์ฑ์ ๋ฐ๋ฅธ ๋ถ๋ฅ
- ๊ธฐ๋ณธ ์์ฑ: ์ ๋ฌด ํ๋ก์ธ์ค๋ฅผ ๋ถ์ํ๋ฉด ๋ฐ๋ก ์ ์ ๊ฐ๋ฅํ ์์ฑ
- ์ค๊ณ ์์ฑ: ์ธ์คํด์ค์ ์ ๋ํฌํจ์ ๋ถ์ฌํ๋ ์์ฑ(ํ๋ฒ, ์ฌ๋ฒ)
- ํ์ ์์ฑ: ์ฑ๋ฅ, ํธ์๋ฅผ ์ํด ์๋ก ๋ง๋ ์์ฑ(ํ๊ท , ์ฌ๊ณ )
๐๊ด๊ณ
๊ฐ๋
์ํฐํฐ์ ์ํฐํฐ ์ฌ์ผ์ ์์ฑ๋ผ๋ฆฌ์ ์ฐ๊ฒฐ์ ์ํด ๋ง๋ค์ด์ง๋ ์๊ด๊ด๊ณ
์ข ๋ฅ
- ์กด์ฌ ๊ด๊ณ: ๋ชจ๋ธ๋ง ๋ ์ํฐํฐ๋ค์ด ์กด์ฌ๋ก์ ๊ด๊ณ๋ฅผ ๊ฐ์ง๋ ๊ด๊ณ
- ํ์ ๊ด๊ณ: ๋ชจ๋ธ๋ง ๋ ์ํฐํฐ๋ค์ด ํ์์ ์ํด ๊ด๊ณ๋ฅผ ๊ฐ์ง๋ ๊ด๊ณ
- ์ฐ๊ด ๊ด๊ณ: ํ์์ ์ธ ๊ด๊ณ๋ก ํญ์ ์๋ก๋ฅผ ์ด์ฉํ๋ ๊ด๊ณ(์ค์ )
- ์์กด ๊ด๊ณ: ์ ํ์ ์ธ ๊ด๊ณ๋ฅด ์๋ ํด๋์ค์ ํ์์ ๋ฐ๋ผ ์ด์ฉํ๋ ๊ด๊ณ
๐๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ตฌ์กฐ์ ์ฑ๋ฅ
์ํผ/์๋ธํ์ ๋ฐ์ดํฐ ๋ชจ๋ธ
- ๋ ผ๋ฆฌ์ ๋ฐ์ดํฐ ๋ชจ๋ธ์์ ์ฃผ๋ก ์ด์ฉ(=๋ถ์ ๋จ๊ณ์์ ๋ง์ด ์ฌ์ฉ๋จ)
- ๋ฌผ๋ฆฌ์ ๋ฐ์ดํฐ ๋ชจ๋ธ๋ก ์ค๊ณ ์ ๋ฌธ์ ๋ฐ์
- ์ํผํ์ : ๊ณตํต ๋ถ๋ถ์ ์ํผํ์ ์ผ๋ก ๋ชจ๋ธ๋ง
- ์๋ธํ์ : ๊ณตํต์ผ๋ก๋ถํฐ ์์๋ฐ์ ๋ค๋ฅธ ์ํฐํฐ์ ์ฐจ์ด๊ฐ ์๋ ๋ชจ๋ธ๋ง ๋ชจ๋ธ๋ง
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฑ๋ฅ ์ ํ ์์ธ 3๊ฐ์ง
- ํธ๋์ญ์ : ์ ์ฒด๋ฅผ ์ผ๊ด์ฒ๋ฆฌ, ํ ์ด๋ธ ๊ฐ๋ณ๋ก ์ ์ง > Union ์ฐ์ฐ์ ์ํด ์ฑ๋ฅ ์ ํ
- ํธ๋์ญ์ : ์ํผ+์๋ธํ์ ๊ณตํต ์ฒ๋ฆฌ, ํ ์ด๋ธ์ ๊ฐ๋ณ๋ก ์ ์ง > ์กฐ์ธ์ ์ํด ์ฑ๋ฅ ์ ํ
- ํธ๋์ญ์ : ์๋ธํ์ ๋ง ๊ฐ๋ณ๋ก ์ฒ๋ฆฌ, ํ ์ด๋ธ์ ํ๋๋ก ํตํฉ > ๋ถํ์ํ๊ฒ ๋ง์ ๋ฐ์ดํฐ ์ง์
๐NULL์ ์๋ฏธ
- ์์ ์๋ ๊ฐ, 0๋ ์๋๊ณ ๊ณต๋ฐฑ๋ ์๋(ORACLE์ ๋น ๋ฌธ์์ด์ NULL๋ก ์ทจ๊ธ)
- NULL์ "IS NULL", "IS NOT NULL"๋ก๋ง ๋น๊ต ๊ฐ๋ฅ, !=NULL์ ๋ถ๊ฐ๋ฅ
- a=""๋ก ๋ฃ์ผ๋ฉด ๊ณต๋ฐฑ๊ฐ์ด ๋ค์ด๊ฐ๋ฉฐ IS NULL ์์ false๊ฐ์ ๋ฐํํ๋ค.
์ฐ์ฐ
- NULL ๊ฐ๊ณผ์ ์ฐ์ฐ(+, -, *, / ๋ฑ)์ NULL ๊ฐ์ ๋ฆฌํดํ๋ค.
- NULL ๊ฐ๊ณผ์ ๋น๊ต์ฐ์ฐ์ ๊ฑฐ์ง(FALSE)๊ฐ์ ๋ฆฌํดํ๋ค.
- ํน์ ๊ฐ๋ณด๋ค ํฌ๋ค ๋ฐ ์๋ค๋ผ๊ณ ํํํ ์ ์๋ค.
2. SQL ๊ธฐ๋ณธ ๋ฐ ํ์ฉ
๐SQL ๋ฌธ์ฅ๋ค์ ์ข ๋ฅ
1) DML(Data Management Language): SELECT, INSERT, UPDATE, DELECT
2) DDL(Data Definition Language): CREATE, ALTER, DROP, RENAME
3) DCL(Data Control Language): GRANT, REVOKE
4) TML(Transaction Management Language): COMMIT, ROLLBACK
*DDL ์ฐธ๊ณ ์ฌํญ
- DROP COLUMN: ๋ฐ์ดํฐ ์๊ฑฐ๋ ์ ๊ฑฐ๋ ๋ชจ๋ ์ญ์ ๊ฐ๋ฅ. ํ ๋ฒ์ ํ๋์ ์นผ๋ผ๋ง ์ญ์ ๊ฐ๋ฅ
- DROP CONSTRAINT: ํ ์ด๋ธ ์์ฑ ์ ๋ถ์ฌํ๋ ์ ์ฝ์กฐ๊ฑด์ ์ญ์ ํ๋ ๋ช ๋ น์ด
- ADD CONSTRAINT: ํ ์ด๋ธ ์์ฑ ์ดํ์ ํ์์ ์ํด ์ ์ฝ์กฐ๊ฑด์ ์ถ๊ฐ
*์ฐธ์กฐ ๋์(Referential Action)
์ฐธ์กฐ ๋์(Referential Action)์ ์ฐธ์กฐ ๋ฌด๊ฒฐ์ฑ์ ์ ์งํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ๊ท์น ์ค ํ๋์ด๋ค. ์ด๋ ์ธ๋ํค๊ฐ ์ค์ ๋ ๊ฒฝ์ฐ์, ๋ถ๋ชจ ํ ์ด๋ธ์ ๋ฐ์ดํฐ๊ฐ ์ฝ์ ๋๊ฑฐ๋ ์ญ์ /์์ ๋ ๋ ์์(Child) ํ ์ด๋ธ์ด ์ด๋ป๊ฒ ๋ฐ์ํ ์ง๋ฅผ ์ ์ํ๋ค.
1) โญ Automatic: Child์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ํ ๋ ์ฐธ์กฐํ Parent์ PK๊ฐ ์์ผ๋ฉด, ์๋์ผ๋ก Parent ํ ์ด๋ธ์ ํด๋น PK ๋ ์ฝ๋๋ฅผ ์์ฑํ ํ Child์ ์ฝ์ ํ๋ค.
2) Set Null: Parent ํ ์ด๋ธ์ ํด๋น PK๊ฐ ์์ผ๋ฉด, Child์ ์ธ๋ํค ํ๋๋ฅผ NULL๋ก ์ค์ ํ์ฌ ์ฝ์ ํ๋ค.
3) Set Default: Parent์ ํด๋น PK๊ฐ ์์ผ๋ฉด, Child์ ์ธ๋ํค๋ฅผ ๋ฏธ๋ฆฌ ์ง์ ๋ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ค์ ํ์ฌ ์ฝ์ ํ๋ค.
4) โญ Dependent: Parent์ ์ฐธ์กฐํ PK๊ฐ ์กด์ฌํ ๋๋ง Child์ ์ฝ์ ์ด ํ์ฉ๋๋ค.
*Delete / Modify Action
1) โญ Cascade: Parent ์ญ์ ์ Child ๊ฐ์ด ์ญ์
2) Set Null: Parent ์ญ์ ์ ํด๋น Child์ ํด๋น ํ๋๋ Null๋ก ์ ํ
3) Set Default: Parent ์ญ์ ์ ํด๋น Child์ ํด๋น ํ๋๋ Default๋ก ์ ํ
4) โญ Restrict: Parent ์ญ์ ์ Child ํ ์ด๋ธ์ PK๊ฐ ์๋ ๊ฒฝ์ฐ์๋ง Parent ์ญ์ ํ์ฉ
5) No Action:์ฐธ์กฐ ๋ฌด๊ฒฐ์ฑ์ ์๋ฐํ๋ ์ญ์ /์์ ์ก์ ๋ ์ทจํ์ง ์๋๋ค.
*์ญ์ SQL ๋น๊ต ์ ๋ฆฌ
Drop Table ํ ์ด๋ธ๋ช | Truncate Table ํ ์ด๋ธ๋ช | Delete From ํ ์ด๋ธ๋ช |
DDL | DDL | DML |
Auto Commit(DDL์ด๋ฏ๋ก) | Auto Commit(DDL์ด๋ฏ๋ก) | ์ฌ์ฉ์ Commit |
Rollback ๋ถ๊ฐ | Rollback ๋ถ๊ฐ | Commit ์ ์ Rollback ๊ฐ๋ฅ |
ํ ์ด๋ธ์ ๋ชจ๋ ๋ฐ์ดํฐ ์ญ์ | ํ ์ด๋ธ์ ๋ชจ๋ ๋ฐ์ดํฐ ์ญ์ | ํ ์ด๋ธ์ ๋ชจ๋ ๋ฐ์ดํฐ ์ญ์ |
๋ก๊ทธ ์ ๊ฑฐ | ๋ก๊ทธ ์ ๊ฑฐ | ๋ก๊ทธ ์ ์ง |
์คํค๋ง ์ ์๊น์ง ๋ชจ๋ ์ญ์ | ํ ์ด๋ธ ์คํค๋ง ๊ตฌ์กฐ ์ ์ง | ํ ์ด๋ธ ์คํค๋ง ๊ตฌ์กฐ ์ ์ง |
๐ํธ๋์ญ์ ์ ํน์ ACID
1) ์์์ฑ(Automicity): ํธ๋์ญ์ ์์ ์ ์๋ ์ฐ์ฐ๋ค์ ๋ชจ๋ ์ฑ๊ณต์ ์ผ๋ก ์คํ๋๋ ์ง ์๋๋ฉด ์ ํ ์คํ๋์ง ์์ ์ํ๋ก ๋จ์์์ด์ผ ํ๋ค.(all or notion)
2) ์ผ๊ด์ฑ(consistency): ํธ๋์ญ์ ์ด ์คํ๋๊ธฐ ์ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ด์ฉ์ด ์๋ชป๋์ด ์์ง ์๋ค๋ฉด ํธ๋์ญ์ ์ด ์คํ๋ ์ดํ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ด์ฉ์ด ์๋ชป์ด ์์ผ๋ฉด ์๋๋ค.
3) ๊ณ ๋ฆฝ์ฑ(isolation): ํธ๋์ญ์ ์ด ์คํ๋๋ ๋์ค์ ๋ค๋ฅธ ํธ๋์ญ์ ์ ์ํฅ์ ๋ฐ์ ์๋ชป๋ ๊ฒฐ๊ณผ๋ฅผ ๋ง๋ค์ด์๋ ์๋๋ค.
4) ์ง์์ฑ(durability): ํธ๋์ญ์ ์ด ์ฑ๊ณต์ ์ผ๋ก ์ํ๋๋ฉด ๊ทธ ํธ๋์ญ์ ์ด ๊ฐฑ์ ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ด์ฉ์ด ์๊ตฌ์ ์ผ๋ก ์ ์ฅ๋๋ค.
*DB ํธ๋์ญ์ ์ด ๊ฒฉ๋ฆฌ์ฑ์ด ๋ฎ์ ๊ฒฝ์ฐ ๋ฐ์ํ๋ ๋ฌธ์ ์
- Dirty Read: ๋ค๋ฅธ ํธ๋์ญ์ ์ ์ํด ์์ ๋์์ง๋ง ์์ง ์ปค๋ฐ๋์ง ์์ Dirtyํ ๋ฐ์ดํฐ๋ฅผ ์ฝ๋ ๊ฒ
- Non-Repeatable Read: ํ ํธ๋์ญ์ ๋ด์์ ๊ฐ์ ์ฟผ๋ฆฌ๋ฅผ ๋๋ฒ ์ํํ๋๋ฐ, ๊ทธ ์ฌ์ด ๋ค๋ฅธ ํธ๋์ญ์ ์ด ๊ฐ์ ์์ /์ญ์ ํด์ ๋ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๊ฐ ๋ค๋ฅด๊ฒ ๋ํ๋๋ ํ์
- Phantom Read: ํ ํธ๋์ญ์ ๋ด์์ ๊ฐ์ ์ฟผ๋ฆฌ๋ฅผ ๋๋ฒ ์ํํ๋๋ฐ, ์ฒซ ๋ฒ์งธ ์ฟผ๋ฆฌ์์ ์๋ ์ ํ ๋ ์ฝ๋(ํฌํ ๋ ์ฝ๋)๊ธฐ ๋ ๋ฒ์งธ ์ฟผ๋ฆฌ์์ ๋ํ๋๋ ํ์
๐SQL ํ์ฉ
*์ผ๋ฐ ์งํฉ ์ฐ์ฐ์ - SQL
- Union - Union(ํฉ์งํฉ)
- Intersection - Intersect(๊ต์งํฉ)
- Difference - Except(Oracle์ Minus) - 1-1 ๊ด๊ณ์ธ ํ ์ด๋ธ์์ ์ํํ๋ฉด ๊ณต์งํฉ์ด ๋๋ค.
- Product - Cross Join
*์์ ์ฐ์ฐ์ - SQL
- Select - Where
- Project - Select
- Join - ๋ค์ํ Join์ผ๋ก ๊ธฐ๋ฅ ๊ตฌํ
- Divide - ํ์ฌ ์ฌ์ฉํ์ง ์์