๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • ๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป ๐ŸŒฎ ๐Ÿ’ฌ
๐Ÿ“œ ์ž๊ฒฉ์ฆ/SQLD

[SQLD] 37ํšŒ ๊ธฐ์ถœ ๋ฌธ์ œ ํ’€์ด

by ๋ฐ”์ฟ„๋ฆฌ 2024. 3. 1.

 

 

1. ๋„๋ฉ”์ธ

- ๋ชจ๋“  ๋ฆด๋ ˆ์ด์…˜(Relation)์€ ์›์ž๊ฐ’(Atomic)์„ ๊ฐ€์ ธ์•ผํ•œ๋‹ค.

- ์–ด๋–ค ๋ฆด๋ ˆ์ด์…˜(Relation)์—์„œ ์†์„ฑ ๊ฐ’์ด ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ๊ฐ’์˜ ๋ฒ”์œ„๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

- ์‹ค์ œ ์†์„ฑ๊ฐ’์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

- ์†์„ฑ๋ช…๊ณผ ๋ฐ˜๋“œ์‹œ ๋™์ผํ•  ํ•„์š”๋Š” ์—†๋‹ค.

- ๋ฆด๋ ˆ์ด์…˜์˜ ์†์„ฑ์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ ํƒ€์ž…๊ณผ ํฌ๊ธฐ์ด๋‹ค.

- ์†์„ฑ์— ๋Œ€ํ•˜์—ฌ NOT NULL ์ œ์•ฝ์‚ฌํ•ญ์„ ์„ค์ •ํ•˜์—ฌ NULL ๊ฐ’์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

- ์†์„ฑ์— ๊ฐ’์„ ์ž…๋ ฅ ํ•  ๋•Œ CHECK ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•ด์„œ ์ž…๋ ฅ ๊ฐ’์„ ๊ฒ€์‚ฌํ•œ๋‹ค. 

 

+ ์นด๋””๋„๋ฆฌํ‹ฐ์— ๋Œ€ํ•œ ์„ค๋ช…

: ํŠœํ”Œ(ํ–‰)์˜ ์ˆ˜ = ์ธ์Šคํ„ด์Šค์˜ ์ˆ˜

- ์ค‘๋ณต๋„๊ฐ€ ๋‚ฎ์œผ๋ฉด ์นด๋””๋„๋ฆฌํ‹ฐ๊ฐ€ ๋†’๋‹ค๋ผ๊ณ  ํ‘œํ˜„ํ•œ๋‹ค.

- ์ค‘๋ณต๋„๊ฐ€ ๋†’์œผ๋ฉด ์นด๋””๋„๋ฆฌํ‹ฐ๊ฐ€ ๋‚ฎ๋‹ค๋ผ๋„ ํ‘œํ˜„ํ•œ๋‹ค.

- ์นด๋””๋„๋ฆฌํ‹ฐ๋Š” ์ „์ฒด ํ–‰์— ๋Œ€ํ•œ ํŠน์ • ์นผ๋Ÿผ์˜ ์ค‘๋ณต ์ˆ˜์น˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ง€ํ‘œ์ด๋‹ค.

 

2. ์™ธ๋ž˜ํ‚ค Foreign Key

- ์ฃผ ๋ฆด๋ ˆ์ด์…˜์„ ์ฐธ์กฐํ•˜๋Š” ํ‚ค๋ฅผ ์˜๋ฏธ

- ์ฐธ์กฐ ๋ฌด๊ฒฐ์„ฑ์„ ์ค€์ˆ˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉ๋œ๋‹ค.

 

3. ์Šˆํผ/์„œ๋ธŒํƒ€์ž… ๋ฐ์ดํ„ฐ ๋ชจ๋ธ

๋ณ€ํ™˜ ๋ฐฉ๋ฒ• ์„ค๋ช…
One To One Type - ์Šˆํผํƒ€์ž…๊ณผ ์„œ๋ธŒํƒ€์ž…์„ ๊ฐœ๋ณ„ ํ…Œ์ด๋ธ”๋กœ ๋„์ถœํ•œ๋‹ค.
- ํ…Œ์ด๋ธ”์˜ ์ˆ˜๊ฐ€ ๋งŽ์•„์„œ ์กฐ์ธ์ด ๋งŽ์ด ๋ฐœ์ƒํ•˜๊ณ  ๊ด€๋ฆฌ๊ฐ€ ์–ด๋ ต๋‹ค.
Plus Type - ์Šˆํผํƒ€์ž…๊ณผ ์„œ๋ธŒํƒ€์ž… ํ…Œ์ด๋ธ”๋กœ ๋„์ถœํ•œ๋‹ค.
- ์กฐ์ธ์ด ๋ฐœ์ƒํ•˜๊ณ  ๊ด€๋ฆฌ๊ฐ€ ์–ด๋ ต๋‹ค.
Single Type - ์Šˆํผํƒ€์ž…๊ณผ ์„œ๋ธŒํƒ€์ž…์„ ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ”๋กœ ๋„์ถœํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
- ์กฐ์ธ์„ฑ๋Šฅ์ด ์ข‹๊ณ  ๊ด€๋ฆฌ๊ฐ€ ํŽธํ•˜์ง€๋งŒ, IO ์„ฑ๋Šฅ์ด ๋‚˜์˜๋‹ค.

 

5. ์—”ํ„ฐํ‹ฐ(Entity)๋Š” ์ง‘ํ•ฉ์˜ ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค.

 

6. ์†์„ฑ์˜ ์ข…๋ฅ˜

- ๊ธฐ๋ณธ์†์„ฑ : ๋น„์ง€๋‹ˆ์Šค ํ”„๋กœ์„ธ์Šค์—์„œ ๋„์ถœ๋˜๋Š” ๋ณธ๋ž˜์˜ ์†์„ฑ์ด๋‹ค.

- ์„ค๊ณ„์†์„ฑ : ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง ๊ณผ์ •์—์„œ ๋ฐœ์ƒ๋˜๋Š” ์†์„ฑ์ด๋‹ค. ์œ ์ผํ•œ ๊ฐ’์„ ๋ถ€์—ฌํ•œ๋‹ค. ์ƒํ’ˆ์ฝ”๋“œ,์ง€์ ์ฝ”๋“œ ๋“ฑ์ด ์žˆ๋‹ค.

- ํŒŒ์ƒ์†์„ฑ : ๋‹ค๋ฅธ ์†์„ฑ์— ์˜ํ•ด์„œ ๋งŒ๋“ค์–ด์ง€๋Š” ์†์„ฑ์ด๋‹ค. ํ•ฉ๊ณ„, ํ‰๊ท  ๋“ฑ์ด ์žˆ๋‹ค.

 

7. ์‹๋ณ„๊ด€๊ณ„ vs ๋น„์‹๋ณ„๊ด€๊ณ„

- ์‹๋ณ„์ž ๊ด€๊ณ„ : ๊ฐ•ํ•œ ์—ฐ๊ฒฐ ๊ด€๊ณ„ → ๋ถ€๋ชจ ํ…Œ์ด๋ธ”์˜ ๊ธฐ๋ณธํ‚ค ๋˜๋Š” ์œ ๋‹ˆํฌ ํ‚ค๋ฅผ ์ž์‹ ํ…Œ์ด๋ธ”์ด ์ž์‹ ์˜ ๊ธฐ๋ณธํ‚ค๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ด€๊ณ„   ๋ถ€๋ชจ ๋ฐ์ดํ„ฐ๊ฐ€ ์—†๋‹ค๋ฉด ์ž์‹ ๋ฐ์ดํ„ฐ๋Š” ์ƒ๊ธธ ์ˆ˜ ์—†๋‹ค. ๋ถ€๋ชจ ๋ฆด๋ ˆ์ด์…˜์˜ ๊ธฐ๋ณธํ‚ค๊ฐ€ ์ž์‹ ๋ฆด๋ ˆ์ด์…˜์˜ ๊ธฐ๋ณธํ‚ค๋กœ ์‚ฌ์šฉ๋จ  ์‹ค์„ ํ‘œํ˜„

- ๋น„์‹๋ณ„์ž ๊ด€๊ณ„ : ์•ฝํ•œ ์—ฐ๊ฒฐ ๊ด€๊ณ„ ๋ถ€๋ชจ ํ…Œ์ด๋ธ”์˜ ๊ธฐ๋ณธํ‚ค ๋˜๋Š” ์œ ๋‹ˆํฌ ํ‚ค๋ฅผ ์ž์‹ ์˜ ๊ธฐ๋ณธํ‚ค๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , ์™ธ๋ž˜ํ‚ค๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ด€๊ณ„   ๋ถ€๋ชจ ๋ฆด๋ ˆ์ด์…˜์˜ ๊ธฐ๋ณธํ‚ค๊ฐ€ ์ž์‹ ๋ฆด๋ ˆ์ด์…˜์˜ ์ผ๋ฐ˜ ์†์„ฑ์œผ๋กœ ์‚ฌ์šฉ๋จ ์ ์„ ํ‘œํ˜„

 

8. ์—”ํ„ฐํ‹ฐ(Entity) ๊ด€๊ณ„์˜ ํ‘œ๊ธฐ๋ฒ•

- ๊ด€๊ณ„๋ช… : ์—”ํ„ฐํ‹ฐ๊ฐ€ ๊ด€๊ณ„์— ์ฐธ์—ฌํ•˜๋Š” ํ˜•ํƒœ, ๊ฐ ๊ด‘๊ณ„๋Š” 2๊ฐœ์˜ ๊ด€๊ณ„๋ช… ๋ฐ ๊ด€์ ์„ ๊ฐ€์ง

- ๊ด€๊ณ„์ฐจ์ˆ˜(Cadinality): 1:1, 1:M, M:M (๊ด€๊ณ„ ์—”ํ„ฐํ‹ฐ ์ด์šฉ)

- ๊ด€๊ณ„์„ ํƒ์‚ฌ์–‘ : ํ•„์ˆ˜์ฐธ์—ฌ(Mandatory), ์„ ํƒ์ฐธ์—ฌ(Optional) (ํ•„์ˆ˜๋Š” I, ์„ ํƒ์€ O๋กœ ํ‘œ์‹œ)

 

9. ์„ฑ๋Šฅ์„ ๊ณ ๋ คํ•œ ๋ฐ์ดํ„ฐ๋ชจ๋ธ๋ง ์ˆœ์„œ

- ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง์„ ํ•  ๋•Œ ์ •๊ทœํ™”๋ฅผ ์ •ํ™•ํ•˜๊ฒŒ ์ˆ˜ํ–‰

- ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์šฉ๋Ÿ‰์‚ฐ์ • ์ˆ˜ํ–‰

- ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ฐœ์ƒ๋˜๋Š” ํŠธ๋žœ์žญ์…˜ ์œ ํ˜• ํŒŒ์•…

- ์šฉ๋Ÿ‰๊ณผ ํŠธ๋žœ์žญ์…˜์˜ ์œ ํ˜•์— ๋”ฐ๋ผ ๋ฐ˜์ •๊ทœํ™” ์ˆ˜ํ–‰

- ์ด๋ ฅ๋ชจ๋Ž…์˜ ์กฐ์ •, PK/FK ์กฐ์ •, ์Šˆํผํƒ€์ž…/์„œ๋ธŒํƒ€์ž… ์กฐ์ • ์ˆ˜ํ–‰

- ์„ฑ๋Šฅ๊ด€์ ์—์„œ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ ๊ฒ€์ฆ

 

10. ์ฃผ์‹๋ณ„์ž๋ฅผ ๋„์ถœํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ์ค€

- ํ•ด๋‹น ์—…๋ฌด์—์„œ ์ž์ฃผ ์ด์šฉ๋˜๋Š” ์†์„ฑ์„ ์ฃผ์‹๋ณ„์ž๋กœ ์ •์˜ํ•œ๋‹ค.

- ๋ช…์นญ, ๋‚ด์—ญ ๋“ฑ๊ณผ ๊ฐ™์ด ์ด๋ฆ„์œผ๋กœ ๊ธฐ์ˆ ๋˜๋Š” ๊ฒƒ๋“ค์€ ๊ฐ€๋Šฅํ•˜๋ฉด ์ฃผ์‹๋ณ„์ž๋กœ ์ง€์ •ํ•˜์ง€ ์•Š๋Š”๋‹ค.

- ๋ณตํ•ฉ์œผ๋กœ ์ฃผ์‹๋ณ„์ž๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ ๋„ˆ๋ฌด ๋งŽ์€ ์†์„ฑ์ด ํฌํ•จ๋˜์ง€ ์•Š๋„๋ก ํ•œ๋‹ค.

 

11. ํ•ด์‹œ ์กฐ์ธ Hash Join

- ํ•ด์‹œ์กฐ์ธ์€ ๋‘ ๊ฐœ์˜ ํ…Œ์ด๋ธ” ๊ฐ„์— ์กฐ์ธ์„ ํ•  ๋•Œ ๋ฒ”์œ„๊ฒ€์ƒ‰์ด ์•„๋‹Œ ๋™๋“ฑ์กฐ์ธ(EQUI-Join)์— ์ ํ•ฉํ•œ ๋ฐฉ์‹์ด๋‹ค.

- ์ž‘์€ ํ…Œ์ด๋ธ”(Build Input)์„ ๋จผ์ € ์ฝ์–ด์„œ Hash Area์— ํ•ด์‹œ ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ํฐ ํ…Œ์ด๋ธ”๋กœ Hash Area๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ๊ณผ๋‹คํ•œ Sort๊ฐ€ ์œ ๋ฐœ๋˜์–ด ์„ฑ๋Šฅ์ด ์ €ํ•˜๋  ์ˆ˜ ์žˆ๋‹ค.

- ํ•ด์‹œ์กฐ์ธ์€ ์ˆ˜ํ–‰ ๋นˆ๋„๊ฐ€ ๋‚ฎ๊ณ  ์ˆ˜ํ–‰์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ๋Œ€์šฉ๋Ÿ‰ ํ…Œ์ด๋ธ”์— ๋Œ€ํ•œ ์กฐ์ธ์„ ํ•  ๋•Œ ์œ ์šฉํ•˜๋‹ค.

* ์˜จ๋ผ์ธ ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ(OLTP)์—๋Š” ํ•ด์‹œ๋ณด์ธ๋ณด๋‹ค๋Š” ์ ์€ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ธํ•  ๋•Œ ์œ ๋ฆฌํ•œ ๊ตฌ์กฐ์ธ Nested Loop ๋ฐฉ์‹์ด ์œ ์šฉํ•˜๋‹ค.

 

12. Join ์ •๋ฆฌ

์ค‘์ฒฉ ๋ฐ˜๋ณต ์กฐ์ธ
Nested Loop Join
- ์ข์€ ๋ฒ”์œ„์— ์œ ๋ฆฌ
- ์œ ๋ฆฌ์ˆœ์ฐจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋ฉฐ, Random Access ์œ„์ฃผ
- ํ›„ํ–‰(Driven) ํ…Œ์ด๋ธ”์—๋Š” ์กฐ์ธ์„ ์œ„ํ•œ ์ธ๋ฑ์Šค๊ฐ€ ์ƒ์„ฑ๋˜์–ด ์žˆ์–ด์•ผ ํ•จ
- ์‹คํ–‰์†๋„ = ์„ ํ–‰ ํ…Œ์ด๋ธ” ์‚ฌ์ด์ฆˆ * ํ›„ํ–‰ ํ…Œ์ด๋ธ” ์ ‘๊ทผํšŸ์ˆ˜
์ƒ‰์ธ๋œ ์ค‘์ฒฉ ๋ฐ˜๋ณต ์กฐ์ธ, ๋‹จ์ผ ๋ฐ˜๋ณต ์กฐ์ธ
Single Loop Join
- ํ›„ํ–‰(Driven) ํ…Œ์ด๋ธ”์˜ ์กฐ์ธ ์†์„ฑ์— ์ธ๋ฑ์Šค๊ฐ€ ์กด์žฌํ•  ๊ฒฝ์šฐ ์‚ฌ์šฉ
- ์„ ํ–‰ ํ…Œ์ด๋ธ”์˜ ๊ฐ ๋ ˆ์ฝ”๋“œ๋“ค์— ๋Œ€ํ•˜์—ฌ ํ›„ํ–‰ ํ…Œ์ด๋ธ”์˜ ์ธ๋ฑ์Šค ์ ‘๊ทผ ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ง์ ‘ ๊ฒ€์ƒ‰ ํ›„ ์กฐ์ธํ•˜๋Š” ๋ฐฉ์‹
์ •๋ ฌ ํ•ฉ๋ณ‘ ์กฐ์ธ
Sort Merge Join
- Sort Merge Join์€ ํ•ด๋‹น ํ…Œ์ด๋ธ”์— ์ธ๋ฑ์Šค๊ฐ€ ์—†์„ ๋•Œ ์ˆ˜ํ–‰์ด ๋œ๋‹ค.
- ํ…Œ์ด๋ธ”์„ ์ •๋ ฌ(Sort) ํ•œ ํ›„ ์ •๋ ฌ๋œ ํ…Œ์ด๋ธ”์„ ๋ณ‘ํ•ฉ(Merge)ํ•˜๋ฉด์„œ ์กฐ์ธ์„ ์‹คํ–‰ํ•œ๋‹ค.
- ์กฐ์ธ ์—ฐ๊ฒฐ๊ณ ๋ฆฌ์˜ ๋น„๊ต ์—ฐ์‚ฐ์ž๊ฐ€ ๋ฒ”์œ„ ์—ฐ์‚ฐ(>, <)์ธ ๊ฒฝ์šฐ Nested Loop Join ๋ณด๋‹ค ์œ ๋ฆฌ
- ๋‘ ๊ฒฐ๊ณผ์ง‘ํ•ฉ์˜ ํฌ๊ธฐ๊ฐ€ ์ฐจ์ด๊ฐ€ ๋งŽ์ด ๋‚˜๋Š” ๊ฒฝ์šฐ์—๋Š” ๋น„ํšจ์œจ์ 
ํ•ด์‹œ ์กฐ์ธ
Hash Join
- ํ•ด์‹œ(Hash) ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‘ ํ…Œ์ด๋ธ”์˜ ์ž๋ฃŒ๋ฅผ ๊ฒฐํ•ฉํ•˜๋Š” ์กฐ์ธ ๋ฐฉ์‹
- Nested Loop Join๊ณผ Sort Merge Join์˜ ๋ฌธ์ œ์ ์„ ํ•ด๊ฒฐ
- ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋Š” ์ƒ๋‹นํžˆ ํฐ Hash Area๋ฅผ ํ•„์š”๋กœ ํ•จ์œผ๋กœ, ๋ฉ”๋ชจ๋ฆฌ์˜ ์ง€๋‚˜์นœ ์‚ฌ์šฉ์œผ๋กœ ์˜ค๋ฒ„ํ—ค๋“œ ๋ฐœ์ƒ ๊ฐ€๋Šฅ์„ฑ

 

14. NULL ๊ด€๋ จ ํ•จ์ˆ˜

- NVL(COL1, 0) → COL1์ด NULL์ด๋ฉด 0์œผ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

- NVL2(COL1, 1, 0) → COL1์ด NULL์ด ์•„๋‹ˆ๋ฉด 1, NULL์ด๋ฉด 0์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

- NULLIF(exp1, exp2) → exp1๊ณผ exp2์ด ๊ฐ™์œผ๋ฉด NULL์„, ๊ฐ™์ง€ ์•Š์œผ๋ฉด exp1์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

- COALESCE(mgr, 1) → mgr์ด NULL์ด ์•„๋‹ˆ๋ฉด 1์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

24. PL/SQL ํŠน์ง•

- PL/SQL์€ Block๊ตฌ์กฐ๋กœ ๋˜์–ด์žˆ์–ด ๊ฐ ๊ธฐ๋Šฅ๋ณ„๋กœ ๋ชจ๋“ˆํ™”๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

- ๋ณ€์ˆ˜, ์ƒ์ˆ˜ ๋“ฑ์„ ์„ ์–ธํ•˜์—ฌ SQL๋ฌธ์žฅ ๊ฐ„ ๊ฐ’์„ ๊ตํ™˜ํ•œ๋‹ค.

- IF, LOOP ๋“ฑ์˜ ์ ˆ์ฐจํ˜• ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ ˆ์ฐจ์ ์ธ ํ”„๋กœ๊ทธ๋žจ์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•œ๋‹ค.

- DBMS ์ •์˜ ์—๋Ÿฌ๋‚˜ ์‚ฌ์šฉ์ž ์ •์˜ ์—๋Ÿฌ๋ฅผ ์ •์˜ํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

- PL/SQL์€ Oracle์— ๋‚ด์žฅ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ Oracle๊ณผ PL/SQL์„ ์ง€์›ํ•˜๋Š” ์–ด๋–ค ์„œ๋ฒ„๋กœ๋„ ํ”„๋กœ๊ทธ๋žจ์„ ์˜ฎ๊ธธ ์ˆ˜ ์žˆ๋‹ค.

- PL/SQL์€ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚จ๋‹ค.

- PL/SQL์€ ์—ฌ๋Ÿฌ SQL๋ฌธ์žฅ์„ Block์œผ๋กœ ๋ฌถ๊ณ  ํ•œ๋ฒˆ์— Block์ „๋ถ€๋ฅผ ์„œ๋ฒ„๋กœ ๋ณด๋‚ด๊ธฐ ๋•Œ๋ฌธ์— ํ†ต์‹ ๋Ÿ‰์„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

- DECLARE์™€ BEGIN ~ END ๋ฌธ์€ ํ•„์ˆ˜์ง€๋งŒ, EXCEPTION ๋ฌธ์€ ์„ ํƒ์‚ฌํ•ญ์ด๋‹ค.

 

26. ๊ณ ์œ ํ‚ค(Unique Key)๋กœ ์ง€์ •๋œ ๋ชจ๋“  ์นผ๋Ÿผ์€ NULL ๊ฐ’์„ ๊ฐ€์งˆ ์ˆ˜๋„ ์žˆ๋‹ค.

 

29. NOT IN๋ฌธ ์„œ๋ธŒ์ฟผ๋ฆฌ์˜ ๊ฒฐ๊ณผ ์ค‘์— NULL์ด ํฌํ•จ๋˜๋Š” ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ๊ฐ€ ์ถœ๋ ฅ๋˜์ง€ ์•Š๋Š”๋‹ค.

IN ๋ฌธ์€ OR ์กฐ๊ฑด, NOT IN ๋ฌธ์€ AND ์กฐ๊ฑด

 

31. '%'๋‚˜ '_' ๋“ฑ๊ณผ ๊ฐ™์€ ํŠน์ˆ˜๋ฌธ์ž๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ESCAPE ์‚ฌ์šฉํ•œ๋‹ค.

LIKE๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒฐ๊ณผ๊ฐ’์— '_' ๊ฐ€ ๋“ค์–ด๊ฐ„ ๋ฌธ์ž์—ด์„ ์ฐพ๋Š” SQL๋ฌธ์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค

SELETE * FROM TESTTABLE WHERE NAME LIKE '%@_%' ESCAPE '@';

 

'@'์ด ESCAPE ์‹๋ณ„์ž๊ฐ€ ๋˜๋ฉด์„œ '@' ๋’ค์˜ '_' ๊ฐ€ ๋ฌธ์ž ๊ทธ๋ž˜๋„ ํ•ด์„ค๋  ์ˆ˜ ์žˆ๋‹ค.

'@' ๋ฌธ์ž๋ง๊ณ  ์•„๋ฌด๊ฑฐ๋‚˜ ์‚ฌ์šฉํ•ด๋„ ์ƒ๊ด€์—†๋‹ค.

 

35. EXISTS / IN ํ•จ์ˆ˜ ๋น„๊ต

# EXISTS
SELETE * FROM TABLE1
WHERE COL1 EXISTS (SELECT DISTINCT COL2 FROM TABLE2);

# IN
SELETE * FROM TABLE1
WHERE COL1 IN (SELECT DISTINCT COL2 FROM TABLE2);

  

- EXISTS : ๊ด„ํ˜ธ์•ˆ์—๋Š” ์„œ๋ธŒ์ฟผ๋ฆฌ๋งŒ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์Œ. ํŠน์ •๊ฐ’ ๋„ฃ์„ ์ˆ˜ ์—†๋‹ค. ์„œ๋ธŒ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๊ฐ€ '์กด์žฌํ•˜๋Š”์ง€๋งŒ ํ™•์ธ', NULL์— ๋Œ€ํ•ด TRUE return ํ•œ๋‹ค. ์ฒ˜๋ฆฌ ์ˆœ์„œ [๋ฉ”์ธ์ฟผ๋ฆฌ] → [์„œ๋ธŒ์ฟผ๋ฆฌ]

- IN : ๊ด„ํ˜ธ์•ˆ์— ํŠน์ • ๊ฐ’ / ์„œ๋ธŒ ์ฟผ๋ฆฌ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์Œ. NULL์— ๋Œ€ํ•ด FALSE return ๋”ฐ๋ผ์„œ NOT IN ์‚ฌ์šฉ์‹œ NVL๋กœ NULL ์ฒดํฌ ํ•„์š”. ์ฒ˜๋ฆฌ์ˆœ์„œ [์„œ๋ธŒ์ฟผ๋ฆฌ] [๋ฉ”์ธ์ฟผ๋ฆฌ]

 

42. NATURAL JOIN / CROSS JOIN

CROSS JOIN - ์ƒํ˜ธ ์กฐ์ธ์ด๋ผ๊ณ ๋„ ๋ถˆ๋ฆฌ๋ฉฐ, ํ•œ ์ชฝ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ํ–‰๋“ค๊ณผ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ํ–‰์„ ์กฐ์ธ์‹œํ‚ค๋Š” ๊ธฐ๋Šฅ์„ ํ•œ๋‹ค.
- ์ด๋Ÿฌํ•œ CROSS JOIN์„ ์นดํ…Œ์‹œ์•ˆ ๊ณฑ(Catesian Product)๋ผ๊ณ ๋„ ํ•œ๋‹ค.
NATURAL JOIN - ๋™์ผํ•œ ํƒ€์ž…๊ณผ ์ด๋ฆ„์„ ๊ฐ€์ง„ ์ปฌ๋Ÿผ์„ ์กฐ์ธ ์กฐ๊ฑด์œผ๋กœ ์ด์šฉํ•˜๋Š” ์กฐ์ธ์„ ๊ฐ„๋‹จํžˆ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.
- NATURAL JOIN์€ ๋‘ ํ…Œ์ด๋ธ”์˜ ๋™์ผํ•œ ์ด๋ฆ„์„ ๊ฐ€์ง€๋Š” ์นผ๋Ÿผ์ด ๋ชจ๋‘ ์กฐ์ธ๋œ๋‹ค.
- ๋™์ผํ•œ ์นผ๋Ÿผ์„ ๋‚ด๋ถ€์ ์œผ๋กœ ์ฐพ๊ฒŒ ๋˜๋ฏ€๋กœ ํ…Œ์ด๋ธ” ๋ณ„์นญ(Alias)์„ ์ฃผ๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

* NATURAL JOIN์˜ ๊ฒฝ์šฐ WHERE ์ ˆ์—์„œ JOIN์กฐ๊ฑด์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์—†์ง€๋งŒ CROSS JOIN์˜ ๊ฒฝ์šฐ WHERE ์ ˆ์— JOIN์กฐ๊ฑด์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

45. NULLS FIRST / NULLS LAST

- NULLS FIRST : ์ •๋ ฌํ•˜๊ณ ์ž ํ•˜๋Š” NULL ๋ฐ์ดํ„ฐ๋“ค์„ ๋ฐ์ดํ„ฐ ์•ž์— ๋‚˜์˜ค๊ฒŒ ํ•œ๋‹ค.

- NULLS LAST : ์ •๋ ฌํ•˜๊ณ ์ž ํ•˜๋Š” NULL ๋ฐ์ดํ„ฐ๋“ค์„ ๋ฐ์ดํ„ฐ ๋’ค์— ๋‚˜์˜ค๊ฒŒ ํ•œ๋‹ค.

ORDER BY [์ •๋ ฌํ•˜๊ณ ์ž ํ•˜๋Š” ์ปฌ๋Ÿผ๋ช…] [DESC/ASC] NULLS LAST

 

50. RANGE๋Š” ํ˜„์žฌ ํ–‰์˜ ๋ฐ์ดํ„ฐ ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ์•ž๋’ค ๋ฐ์ดํ„ฐ ๊ฐ’์˜ ๋ฒ”์œ„๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 


์ด ๋ธ”๋กœ๊ทธ์— ์ž‘์„ฑ๋œ ๋ฌธ์ œ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ํ’€์—ˆ์œผ๋ฉฐ

ํ’€์–ด๋ณด๊ณ  ํ‹€๋ฆฐ ๋ฌธ์ œ, ์•”๊ธฐํ•ด์•ผํ•˜๋Š” ๋ถ€๋ถ„๋“ค์„ ์ •๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.

 

[SQLD] 37ํšŒ ๊ธฐ์ถœ๋ฌธ์ œ ( 50๋ฌธ์ œ / ์ •๋‹ต, ํ•ด์„คํฌํ•จ )

๐Ÿ“–SQLD. ์ œ 37 ํšŒ ๊ธฐ์ถœ ๋ฌธ์ œ ๋ฌธ์ œ 1. ๋‹ค์Œ์—์„œ ์„ค๋ช…ํ•˜๋Š” ๊ฒƒ์€ ER๋ชจ๋ธ ์ค‘ ์–ด๋–ค ํ•ญ๋ชฉ์— ๋Œ€ํ•œ ์„ค๋ช…์ธ๊ฐ€? ์ •๋‹ตํ™•์ธ๐ŸŒผ 1) ๋ชจ๋“  ๋ฆด๋ ˆ์ด์…˜(Relation)์€ ์›์ž๊ฐ’(Atomic)์„ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค. 2) ์–ด๋–ค ๋ฆด๋ ˆ์ด์…˜(Relation)์—

yunamom.tistory.com