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

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

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

 

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

- ๊ฐœ๋…์  ๋ชจ๋ธ๋ง : ๊ฐœ์ฒด์™€ ๊ฐœ์ฒด๋“ค ๊ฐ„์˜ ๊ด€๊ณ„์—์„œ ER๋‹ค์ด์–ด๊ทธ๋žจ์„ ๋งŒ๋“œ๋Š” ๊ณผ์ •

- ๋…ผ๋ฆฌ์  ๋ชจ๋ธ๋ง : ER๋‹ค์ด์–ด๊ทธ๋žจ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ด€๊ณ„ ์Šคํ‚ค๋งˆ ๋ชจ๋ธ์„ ๋งŒ๋“œ๋Š” ๊ณผ์ •

- ๋ฌผ๋ฆฌ์  ๋ชจ๋ธ๋ง : ๊ด€๊ณ„ ์Šคํ‚ค๋งˆ ๋ชจ๋ธ์˜ ๋ฌผ๋ฆฌ์  ๊ตฌ์กฐ๋ฅผ ์ •์˜ํ•˜๊ณ  ๊ตฌํ˜„ํ•˜๋Š” ๊ณผ์ •

 

6. ๊ธฐ๋ณธํ‚ค ์†์„ฑ์€ ์—”ํ„ฐํ‹ฐ๋ฅผ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋Š” ์†์„ฑ์ด๊ณ , ์™ธ๋ž˜ํ‚ค ์†์„ฑ์€ ๋‹ค๋ฅธ ์—”ํ„ฐํ‹ฐ์˜ ๊ด€๊ณ„์— ํฌํ•จ๋˜๋Š” ์†์„ฑ์ด๋‹ค. ๋‹ค๋ฅธ ์—”ํ„ฐํ‹ฐ์˜ ๊ด€๊ณ„์— ํฌํ•จ๋˜์ง€ ์•Š๋Š” ์†์„ฑ์„ ์ผ๋ฐ˜ ์†์„ฑ์ด๋ผ๊ณ  ํ•œ๋‹ค.

 

9. ERD ํ‘œ๊ธฐ๋ฒ•

์ถœ์ฒ˜ : https://yunamom.tistory.com/269#a9

 

ERD ํ‘œ๊ธฐ๋ฒ• ์ค‘ IE ํ‘œ๊ธฐ๋ฒ•์€ ๊ด€๊ณ„์˜ 1:N ๊ด€๊ณ„์—์„œ N์ชฝ์— ์ƒˆ๋ฐœ์„ ํ‘œ์‹œํ•˜๊ณ  ์„ ํƒ, ํ•„์ˆ˜ ์ฐธ์—ฌ๊ด€๊ณ„์—์„œ ์„ ํƒ ์ฐธ์—ฌ(or)์— O, ํ•„์ˆ˜ ์ฐธ์—ฌ์— | ๋กœ ํ‘œ์‹œํ•œ๋‹ค.

 

10. ์‹๋ณ„์ž์˜ ํŠน์ง•

- ์œ ์ผ์„ฑ : ์ฃผ์‹๋ณ„์ž์— ์˜ํ•ด ์—”ํ„ฐํ‹ฐ๋‚ด์— ๋ชจ๋“  ์ธ์Šคํ„ด์Šค๋“ค์ด ์œ ์ผํ•˜๊ฒŒ ๊ตฌ๋ถ„๋˜์–ด์•ผ ํ•จ

- ์ตœ์†Œ์„ฑ : ์ฃผ์‹๋ณ„์ž๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์†์„ฑ์˜ ์ˆ˜๋Š” ์œ ์ผ์„ฑ์„ ๋งŒ์กฑํ•˜๋Š” ์ตœ์†Œ์˜ ์ˆ˜๊ฐ€ ๋˜์–ด์•ผ ํ•จ

- ๋ถˆ๋ณ€์„ฑ : ์ง€์ •๋œ ์ฃผ์‹๋ณ„์ž ๊ฐ’์€ ์ž์ฃผ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด์–ด์•ผ ํ•จ

- ์กด์žฌ์„ฑ : ์ฃผ์‹๋ณ„์ž๊ฐ€ ์ง€์ •์ด ๋˜๋ฉด ๋ฐ˜๋“œ์‹œ ๊ฐ’์ด ๋“ค์–ด์™€์•ผ ํ•จ (NOT NULL)

 

12. ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ธํ•  ๋•Œ ํ›„ํ–‰ ํ…Œ์ด๋ธ”์— ์ธ๋ฑ์Šค๊ฐ€ ์—†์œผ๋ฉด Nested Loop Join์„ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ ๋œ๋‹ค. ๋ฌผ๋ก  ์˜ตํ‹ฐ๋งˆ์ด์ €๊ฐ€ ์ด๋Ÿฐ ๊ฒฝ์šฐ์— ์ž๋™์œผ๋กœ Nested Loop Join์œผ๋กœ ์‹คํ–‰ํ•˜์ง€ ์•Š๊ณ  Hash Join ํ˜น์€ Sort Merge, Full Scan์„ ์‚ฌ์šฉํ•œ๋‹ค.

 

20. ๋‹ค์Œ ์ฟผ๋ฆฌ์˜ ๊ฒฐ๊ณผ๊ฐ’?

SELECT NVL(COUNT(*), 9999) FROM TABLE WHERE 1=2;

 

WHERE 1=2 : ๊ณต์ง‘ํ•ฉ์ด๋ผ๋Š” ๋œป (False)

NVL : COUNT(*) IS NULL ์ด๋ฉด 9999, COUNT(*) IS NOT NULL ์ด๋ฉด COUNT(*) ๋ฐ˜ํ™˜

๊ทธ๋Ÿฌ๋‚˜ ๊ณต์ง‘ํ•ฉ์ด๋ฏ€๋กœ COUNT(*) = 0

๋”ฐ๋ผ์„œ 0์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

* WHERE 1=1 : TRUE

* WHERE 1=2 : FALSE

 

22. PL/SQL์€ ์ ˆ์ฐจํ˜• ์–ธ์–ด๋กœ PL/SQL ๋‚ด๋ถ€์—์„œ ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

PL/SQL ๋‚ด๋ถ€์—์„œ ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•˜๋Š” ์ด์œ ๋Š” ์ž„์‹œ ํ…Œ์ด๋ธ”๋กœ ์ž ๊น ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ์šฉ๋„๊ฐ€ ๋งŽ๋‹ค.

 

* PL/SQL ๊ตฌ์กฐ

- ๊ธฐ๋ณธ์ ์œผ๋กœ BLOCK ๊ตฌ์กฐ๋กœ ๋˜์–ด์žˆ๋‹ค. BLOCK ์•ˆ์—๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ DECLARE, BEGIN, EXCEPTION์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์œผ๋ฉฐ ๋งˆ์ง€๋ง‰์—๋Š” END๋กœ BLOCK์˜ ๋์„ ํ‘œํ˜„ํ•œ๋‹ค.

- DECLARE : ์„ ์–ธ๋ถ€๋ผ๊ณ  ํ•˜๋ฉฐ BEGINE ~ END์—์„œ ์‚ฌ์šฉํ•  ๋ณ€์ˆ˜(์ƒ์ˆ˜)์— ๋Œ€ํ•˜์—ฌ ์ •์˜ํ•˜๋Š” ๋ถ€๋ถ„์ด๋‹ค. ์ •์˜ํ•  ๊ฒŒ ์—†๋‹ค๋ฉด ์ƒ๋žต ๊ฐ€๋Šฅํ•˜๋‹ค.

- BEGIN : ์‹คํ–‰ ๋ถ€๋ผ๊ณ  ํ•˜๋ฉฐ ์ฒ˜๋ฆฌํ•˜๊ณ ์ž ํ•˜๋Š” SQL๋ฌธ๊ณผ ํ•„์š”ํ•œ ๋กœ์ง์„ ๊ธฐ์ˆ ํ•˜๋Š” ๋ถ€๋ถ„์ด๋‹ค.

- EXCEPTION : ์˜ˆ์™ธ์ฒ˜๋ฆฌ ๋ถ€๋ผ๊ณ  ํ•˜๋ฉฐ ์‹คํ–‰ ๋„์ค‘์— ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ์— ์—๋Ÿฌ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋กœ์ง์„ ๊ธฐ์ˆ ํ•˜๋Š” ๋ถ€๋ถ„์ด๋‹ค. ์ƒ๋žต๊ฐ€๋Šฅํ•˜๋‹ค.

 

28. ์ธ๋ฑ์Šค์— ๋Œ€ํ•ด์„œ ์—ฐ์‚ฐ์„ ํ•˜๋ฉด ์ธ๋ฑ์Šค๊ฐ€ ๋ณ€ํ˜•์ด ๋˜๋ฏ€๋กœ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ• ์ˆ˜๊ฐ€ ์—†๋‹ค.

 

29. ๋ถ„์‚ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

- ์žฅ์  : ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹ ๋ขฐ์„ฑ๊ณผ ๊ฐ€์šฉ์„ฑ์ด ๋†’๋‹ค. ๋ถ„์‚ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋น ๋ฅธ ์‘๋‹ต์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ๋ถ„์‚ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์‹œ์Šคํ…œ ์šฉ๋Ÿ‰ ํ™•์žฅ์ด ์‰ฝ๋‹ค.

- ๋‹จ์  : ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์—ฌ๋Ÿฌ ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด์„œ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ด€๋ฆฌ์™€ ํ†ต์ œ๊ฐ€ ์–ด๋ ต๋‹ค. ๋ณด์•ˆ๊ด€๋ฆฌ๊ฐ€ ์–ด๋ ต๋‹ค. ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ๊ด€๋ฆฌ๊ฐ€ ์–ด๋ ต๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค๊ณ„๊ฐ€ ๋ณต์žกํ•˜๋‹ค. 

 

34. ์—ฐ์‚ฐ์ž ์šฐ์„ ์ˆœ์œ„

์šฐ์„ ์ˆœ์œ„ ์—ฐ์‚ฐ์ž
1 ์‚ฐ์ˆ  ์—ฐ์‚ฐ์ž (*, /, +, -)
2 ์—ฐ๊ฒฐ ์—ฐ์‚ฐ์ž (||)
3 ๋น„๊ต ์—ฐ์‚ฐ์ž (<, >, <=, >=, <>, =)
4 IS NULL, LIKE, IN
5 BETWEEN
6 NOT ์—ฐ์‚ฐ์ž
7 AND ์—ฐ์‚ฐ์ž
8 OR ์—ฐ์‚ฐ์ž

 

35. SELF JOIN

๋™์ผํ•œ ํ…Œ์ด๋ธ”์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์กฐ์ธ์„ ์˜๋ฏธํ•˜๋ฉฐ, FROM ์ ˆ์— ๋™์ผํ•œ ํ…Œ์ด๋ธ”๋ช…์ด ๋‘ ๋ฒˆ ์ด์ƒ ๋‚˜ํƒ€๋‚œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  SELF JOIN์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋™์ผํ•œ ํ…Œ์ด๋ธ”์„ ๋‘ ๋ฒˆ ์ด์ƒ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ FROM ์ ˆ์— ๋ณ„์นญ(Alias)์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

 

42. SQL ์‹คํ–‰ ์ˆœ์„œ

- FROM ์ ˆ์—์„œ ํ…Œ์ด๋ธ”์˜ ๋ชฉ๋ก์„ ๊ฐ€์ ธ์˜จ๋‹ค.

- WHERE ์ ˆ์—์„œ ๊ฒ€์ƒ‰ ์กฐ๊ฑด์— ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ํ–‰์„ ์ œ์™ธํ•œ๋‹ค.

- GROUP BY ์ ˆ์— ๋ช…์‹œ๋œ ํ–‰์˜ ๊ฐ’์„ ๊ทธ๋ฃนํ™”ํ•œ๋‹ค.

- HAVING ์ ˆ์€ GROUP BY ์ ˆ๋กœ ๊ทธ๋ฃนํ™”๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋Œ€์ƒ์œผ๋กœ ์กฐ๊ฑด์„ ์ •์˜ํ•œ๋‹ค.

- SELECT ์ ˆ์—์„œ ๋ช…์‹œํ•œ ์นผ๋Ÿผ๋“ค์„ ์กฐํšŒํ•œ๋‹ค.

- ORDER BY ์ ˆ์—์„œ ๋ช…์‹œํ•œ ์นผ๋Ÿผ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•œ ํ›„ ์ถœ๋ ฅํ•œ๋‹ค.

 

43. ์ˆœ์ˆ˜ ๊ด€๊ณ„ ์—ฐ์‚ฐ์ž

- SELECT ( σ )

- PROJECT ( π )

- JOIN ( โ‹ˆ )

- DIVISION ( ÷ )

 

50. CROSS JOIN

CROSS JOIN์˜ ๊ฒฐ๊ณผ ๊ฐœ์ˆ˜๋Š” ๋‘ ํ…Œ์ด๋ธ”์˜ ํ–‰์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ณฑํ•œ ๊ฐœ์ˆ˜๊ฐ€ ๋œ๋‹ค.

CROSS JOIN์€ ์ƒํ˜ธ ์กฐ์ธ์ด๋ผ๊ณ ๋„ ๋ถˆ๋ฆฌ๋ฉฐ, ํ•œ ์ชฝ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ํ–‰๋“ค๊ณผ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ํ–‰์„ ์กฐ์ธ์‹œํ‚ค๋Š” ๊ธฐ๋Šฅ์„ ํ•œ๋‹ค. ์ด๋Ÿฌํ•œ CROSS JOIN์„ ์นดํ…Œ์‹œ์•ˆ ๊ณฑ(Cartesian Product)๋ผ๊ณ ๋„ ํ•œ๋‹ค.

 


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

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

 

 

[SQLD] 38ํšŒ ๊ธฐ์ถœ ๋ฌธ์ œ ( 50๋ฌธ์ œ / ์ •๋‹ต ) + ํ•ด์„ค์ถ”๊ฐ€

โณ๋‚จ์€์‹œ๊ฐ„ : 87๋ถ„27์ดˆ ๐Ÿ“–SQLD. ์ œ 38 ํšŒ ๊ธฐ์ถœ ๋ฌธ์ œ ๋ฌธ์ œ 1. ๋‹ค์Œ์˜ ERD์— ๋Œ€ํ•œ ์„ค๋ช…์œผ๋กœ ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์€ ๊ฒƒ์€? ์ •๋‹ตํ™•์ธ๐ŸŒผ 1) ์ƒ๊ธ‰์ข…ํ•ฉ๋ณ‘์›์—๋Š” ์˜์‚ฌ๊ฐ€ ๊ทผ๋ฌดํ•˜์ง€ ์•Š์„์ˆ˜๊ฐ€ ์žˆ๋‹ค. 2) ํ•œ ๊ฐœ์˜ ์ƒ๊ธ‰์ข…ํ•ฉ

yunamom.tistory.com