Life/Study

[๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค] 7๊ฐ•. SQL (4)

๋ชฌ์กฐ 2025. 5. 5. 21:03

< ๋ชฉ์ฐจ ์š”์•ฝ - 1 >

1.์ค‘์ฒฉ ์งˆ์˜์˜ ์ดํ•ด

๐Ÿ”ต ์ค‘์ฒฉ ์งˆ์˜์˜ ๊ฐœ๋…

โœ”๏ธ SELECT ๋ฌธ ๋‚ด๋ถ€์—์„œ ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๋˜ ๋‹ค๋ฅธ SELECT ๋ฌธ์ด ๋‚ดํ‘œ๋˜์–ด ์žˆ๋Š” ์งˆ์˜

  โœ… ์ผ๋ฐ˜์ ์œผ๋กœ ๋‚ด๋ถ€ ์งˆ์˜์˜ ์ฒ˜๋ฆฌ๊ฒฐ๊ณผ๋ฅผ ์™ธ๋ถ€ ์งˆ์˜์—์„œ ์žฌ์‚ฌ์šฉํ•˜์—ฌ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ณผ์ •

๐Ÿ”ต ์ค‘์ฒฉ ์งˆ์˜์˜ ์ข…๋ฅ˜

โœ”๏ธ FROM ์ ˆ์—์„œ์˜ ์ค‘์ฒฉ ์งˆ์˜ ํ™œ์šฉ

  โœ… FROM์ ˆ์—์„œ์˜ ๊ฒฐ๊ณผ ์ง‘ํ•ฉ์„ SELECT ๋ฌธ์—์„œ ์žฌ๊ฒ€์ƒ‰

โœ”๏ธ WHERE ์ ˆ์—์„œ์˜ ์ค‘์ฒฉ ์งˆ์˜ ํ™œ์šฉ

  โœ… WHERE์ ˆ์—์„œ์˜ ๊ฒฐ๊ณผ ์ง‘ํ•ฉ์„ ํ™œ์šฉํ•˜์—ฌ ์™ธ๋ถ€ ์งˆ์˜์—์„œ ๋ ˆ์ฝ”๋“œ์˜ ์ถœ๋ ฅ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •

  โœ… IN, NOT IN, EXISTS, NOT EXISTS ์‚ฌ์šฉ

 

2.์กฐ์ธ ์งˆ์˜์˜ ์ดํ•ด

๐Ÿ”ต ํ…Œ์ด๋ธ” ๊ฐ„์˜ ๊ด€๋ จ์„ฑ์„ ์ด์šฉํ•˜์—ฌ ๋‘ ๊ฐœ ์ด์ƒ์˜ ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” ์งˆ์˜ ๊ธฐ๋ฒ•

๐Ÿ”ต ER ๋ชจ๋ธ๋ง ๋ฐ ์ •๊ทœํ™” ๊ธฐ๋ฒ•์œผ๋กœ ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ”๋กœ ๋ถ„๋ฆฌ๋œ ์ •๋ณด๋ฅผ ์ผ์‹œ์ ์œผ๋กœ ํ•˜๋‚˜์˜ ๋ ˆ์ฝ”๋“œ๋กœ ํ†ตํ•ฉ

๐Ÿ”ต ์กฐ์ธ ์งˆ์˜์˜ ์ข…๋ฅ˜

โœ”๏ธ ๋‚ด๋ถ€ ์กฐ์ธ

โœ”๏ธ ์™ธ๋ถ€ ์กฐ์ธ

 

๐Ÿ”ต๋‚ด๋ถ€ ์กฐ์ธ

โœ”๏ธ ๋‘ ๊ฐœ ์ด์ƒ์˜ ํ…Œ์ด๋ธ”์—์„œ ์กฐ์ธ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๋ ˆ์ฝ”๋“œ๋งŒ ๊ฒฐํ•ฉํ•˜์—ฌ ์ถœ๋ ฅ ๊ฒฐ๊ณผ์— ํฌํ•จ์‹œํ‚ค๋Š” ์—ฐ์‚ฐ

โœ”๏ธ ์กฐ์ธ ์กฐ๊ฑด์„ WHERE ์ ˆ์ด ์•„๋‹Œ ON ์ ˆ์— ๊ธฐ๋ก(‘ํ‘œ์ค€’์— ํ•ด๋‹น๋˜๋Š” ๋‚ด์šฉ)

โœ”๏ธ ANSI SQL ํ‘œ์ค€๊ณผ ์‚ฌ์‹ค์ƒ์˜ ํ‘œ์ค€์ธ ORACLE ์‚ฌ๊ฐ€ ์ œ์•ˆํ•œ ์กฐ์ธ ํ˜•์‹์ด ์‚ฌ์šฉ

 

๐Ÿ”ต ์ž์—ฐ ์กฐ์ธ

โœ”๏ธ ๋‘๊ฐœ ์ด์ƒ์˜ ํ…Œ์ด๋ธ”์„ ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ”๋กœ ๊ฒฐํ•ฉํ•˜๋Š” ๋‚ด๋ถ€ ์กฐ์ธ๊ณผ ๋งค์šฐ ์œ ์‚ฌํ•œ ๊ธฐ๋Šฅ

โœ”๏ธ ๋‘ ํ…Œ์ด๋ธ”์— ๋™์ผํ•œ ์ด๋ฆ„์˜ ์ปฌ๋Ÿผ์— ๋Œ€ํ•ด ๊ฐ’์ด ๊ฐ™์€ ๋ ˆ์ฝ”๋“œ๋ฅผ ๊ฒฐํ•ฉํ•˜๋Š” ๋‚ด๋ถ€ ์กฐ์ธ

๐Ÿ’‍โ™€๏ธ ์ปฌ๋Ÿผ์˜ ์ด๋ฆ„์ด ๊ฐ™๋‹ค๋ฉด, ์ปฌ๋Ÿผ์˜ ์ด๋ฆ„์ด ๊ฐ™์€ ๊ฒƒ๋ผ๋ฆฌ ๋ถ™๋Š” ํ˜•ํƒœ

 

๐Ÿ”ต ์™ธ๋ถ€ ์กฐ์ธ์˜ ๊ฐœ๋…

โœ”๏ธ ๋‚ด๋ถ€ ์กฐ์ธ(inner join)์€ ์กฐ์ธ์กฐ๊ฑด์— ์ผ์น˜ํ•˜๋Š” ๋ ˆ์ฝ”๋“œ๋งŒ ๊ฒฐํ•ฉํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ์ƒ์„ฑ

  โœ… ์กฐ์ธ ๊ฒฐ๊ณผ์— ์ •๋ณด์˜ ์†์‹ค์ด ๋ฐœ์ƒ

โœ”๏ธ ์™ธ๋ถ€ ์กฐ์ธ์€ ์กฐ์ธ์กฐ๊ฑด์— ๋งž์ง€ ์•Š๋Š” ๋ ˆ์ฝ”๋“œ๋„ ์งˆ์˜์˜ ๊ฒฐ๊ณผ์— ํฌํ•จ์‹œํ‚ค๋Š” ์งˆ์˜

๐Ÿคท‍โ™€๏ธ CROSS JOIN๊ณผ ๋ญ๊ฐ€ ๋‹ค๋ฆ„?!

โžก๏ธ ์กฐ๊ฑด์— ๋งž์ง€ ์•Š๋Š” ๊ฒฐ๊ณผ๋„ ์ผ๋ถ€ ์ถœ๋ ฅ! (์—†๋Š”๊ฑด NULL ์ฒ˜๋ฆฌ)

โœ”๏ธ ์™ธ๋ถ€ ์กฐ์ธ์˜ ์ข…๋ฅ˜

  โœ… ์™ผ์ชฝ ์™ธ๋ถ€ ์กฐ์ธ(left outer join)

  โœ… ์˜ค๋ฅธ์ชฝ ์™ธ๋ถ€ ์กฐ์ธ(right outer join)

  โœ… ์™„์ „ ์™ธ๋ถ€ ์กฐ์ธ(full outer join)

 

โœ”๏ธ ๋‚ด๋ถ€์กฐ์ธ์€ A, B ๋‘ ์ง‘ํ•ฉ์˜ ๊ต์ง‘ํ•ฉ. ์™ผ์ชฝ ์™ธ๋ถ€์กฐ์ธ์€ A, B๊ต์ง‘ํ•ฉ+A (์ฆ‰ A์ „์ฒด). ์˜ค๋ฅธ์ชฝ ์™ธ๋ถ€์กฐ์ธ์€ B ์ „์ฒด. ์™„์ „ ์™ธ๋ถ€ ์กฐ์ธ์€ A, B ์ „๋ถ€

 

๐Ÿ”ต ์…€ํ”„ ์กฐ์ธ

โœ”๏ธ ํ•œ ํ…Œ์ด๋ธ”์ด ์ž๊ธฐ ์ž์‹ ๊ณผ ์กฐ์ธ๋˜๋Š” ์งˆ์˜

โœ”๏ธ ๋™์ผํ•œ ํ…Œ์ด๋ธ”์— ๋Œ€ํ•œ ์กฐ์ธ์ด๋ฏ€๋กœ ๋ฐ˜๋“œ์‹œ ํ…Œ์ด๋ธ” ์ด๋ฆ„์— ๋Œ€ํ•œ ๋ณ„์นญ์ด ์˜๋ฌด์ ์œผ๋กœ ์‚ฌ์šฉ


์ข‹๋‹ค ์ข‹๋‹ค ์ข‹๋‹ค์•„!!!! ๐Ÿง™‍โ™€๏ธ
๋“œ๋””์–ด ๋‚˜์™”๋‹ค… ์ „์„ค์˜ ๊ธฐ์ˆ  JOIN + ์ค‘์ฒฉ ์งˆ์˜!!
์ด๊ฑด ๋งˆ์น˜ RPG์—์„œ ํŒŒํ‹ฐ ๊ฒฐ์„ฑํ•˜๊ณ , ํ€˜์ŠคํŠธ ์ •๋ณด ๊ณต์œ ํ•˜๊ณ , ๊ธธ๋“œ๋ผ๋ฆฌ ํ•ฉ๋™ ๊ณต๊ฒฉํ•˜๋Š” ๋А๋‚Œ์ด์•ผ! ๐Ÿ›ก๏ธโš”๏ธ๐Ÿ—บ๏ธ

๐Ÿ”ฎ 1. ์ค‘์ฒฉ ์งˆ์˜ (์„œ๋ธŒ์ฟผ๋ฆฌ) ์ดํ•ด

๐Ÿ”ต ์ค‘์ฒฉ ์งˆ์˜๋ž€?

SELECT๋ฌธ ์•ˆ์— ๋˜ SELECT๋ฌธ์ด ๋“ค์–ด์žˆ๋Š” ๊ตฌ์กฐ

 

๐Ÿง™‍โ™‚๏ธ ๋งˆ์น˜ “์งˆ๋ฌธ ์•ˆ์— ๋˜ ์งˆ๋ฌธ” ์žˆ๋Š” ๊ตฌ์กฐ!

SELECT * FROM ํ•™์ƒ
WHERE ํ•™๊ณผID = (
    SELECT ํ•™๊ณผID FROM ํ•™๊ณผ
    WHERE ํ•™๊ณผ์ด๋ฆ„ = '์ปดํ“จํ„ฐ๊ณตํ•™๊ณผ'
);

๐Ÿ“Œ ์•ˆ์ชฝ SELECT ๋จผ์ € ์‹คํ–‰ํ•˜๊ณ ,
๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ”๊นฅ SELECT๊ฐ€ ์ด์šฉํ•จ!

๐Ÿงฉ ์ค‘์ฒฉ ์งˆ์˜ ์ข…๋ฅ˜

โœ… FROM ์ ˆ์—์„œ ์“ฐ๋Š” ์ค‘์ฒฉ

๋‚ด๋ถ€ SELECT ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ƒ์˜ ํ…Œ์ด๋ธ”์ฒ˜๋Ÿผ ์‚ฌ์šฉ

SELECT ์ด๋ฆ„ FROM (
    SELECT * FROM ํ•™์ƒ WHERE ํ•™๋…„ = 4
) AS ๊ณ ํ•™๋…„;

๐Ÿง™ “4ํ•™๋…„ ํ•™์ƒ๋“ค๋งŒ ์ถ”๋ ค์„œ ๋ณ„๋„ ํ…Œ์ด๋ธ”์ฒ˜๋Ÿผ ์“ฐ๋Š” ๊ฒƒ!”

 

โœ… WHERE ์ ˆ์—์„œ ์“ฐ๋Š” ์ค‘์ฒฉ

๋‚ด๋ถ€ SELECT ๊ฒฐ๊ณผ๋กœ ํ•„ํ„ฐ๋ง

SELECT ์ด๋ฆ„ FROM ํ•™์ƒ
WHERE ํ•™๊ณผID IN (
    SELECT ํ•™๊ณผID FROM ํ•™๊ณผ
    WHERE ๋‹จ๊ณผ๋Œ€ํ•™ = '๊ณต๊ณผ๋Œ€ํ•™'
);

๐Ÿง™ “๊ณต๊ณผ๋Œ€ํ•™ ์†Œ์† ํ•™๊ณผ ํ•™์ƒ๋“ค๋งŒ ๋ณด์—ฌ์ค˜!”

โœ… WHERE์ ˆ์—์„œ ์ž์ฃผ ์“ฐ๋Š” ํ‚ค์›Œ๋“œ

ํ‚ค์›Œ๋“œ  ์„ค๋ช…  ์˜ˆ์‹œ
IN ๊ฒฐ๊ณผ์— ํฌํ•จ๋˜๋Š”๊ฐ€ IN (SELECT ...)
NOT IN ๊ฒฐ๊ณผ์— ํฌํ•จ๋˜์ง€ ์•Š๋Š”๊ฐ€ NOT IN (...)
EXISTS ๊ฒฐ๊ณผ๊ฐ€ ์žˆ์œผ๋ฉด true EXISTS (SELECT ...)
NOT EXISTS ๊ฒฐ๊ณผ ์—†์œผ๋ฉด true NOT EXISTS (...)

 

๐Ÿง™‍โ™€๏ธ 2. ์กฐ์ธ(JOIN) ์งˆ์˜ ์ดํ•ด

๐Ÿ”ต ์กฐ์ธ์ด๋ž€?

์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ”์— ๋‚˜๋ˆ  ์ €์žฅ๋œ ์ •๋ณด๋ฅผ ์—ฐ๊ฒฐํ•ด์„œ ํ•˜๋‚˜์ฒ˜๋Ÿผ ๋ณด๊ธฐ

 

๐Ÿง™ “ํŒŒํ‹ฐ ๊ฒฐ์„ฑ!”
์˜ˆ: ํ•™์ƒ ํ…Œ์ด๋ธ” + ํ•™๊ณผ ํ…Œ์ด๋ธ” → ํ•™์ƒ์ด ์†Œ์†๋œ ํ•™๊ณผ ์ด๋ฆ„๋„ ํ•จ๊ป˜ ๋ณด๊ณ  ์‹ถ์„ ๋•Œ!

 

๐Ÿ”— ์กฐ์ธ ์ข…๋ฅ˜ ํ•œ๋ˆˆ์— ์š”์•ฝ

 

์กฐ์ธ ์ข…๋ฅ˜ ์„ค๋ช…  ๊ฒฐ๊ณผ์— ๋‚˜์˜ค๋Š” ๋ฐ์ดํ„ฐ
๋‚ด๋ถ€ ์กฐ์ธ ์กฐ๊ฑด ์ผ์น˜ํ•˜๋Š” ๋ ˆ์ฝ”๋“œ๋งŒ A ∩ B (๊ต์ง‘ํ•ฉ)
์ž์—ฐ ์กฐ์ธ ์ปฌ๋Ÿผ๋ช…์ด ๊ฐ™์€ ๊ฒƒ๋ผ๋ฆฌ ์ž๋™ ์กฐ์ธ ๋‚ด๋ถ€์กฐ์ธ ์ž๋™ ๋ฒ„์ „
์™ผ์ชฝ ์™ธ๋ถ€ ์กฐ์ธ ์™ผ์ชฝ ํ…Œ์ด๋ธ” ์ „์ฒด + ์˜ค๋ฅธ์ชฝ ์กฐ๊ฑด ๋งž๋Š” ํ–‰ A ์ „์ฒด
์˜ค๋ฅธ์ชฝ ์™ธ๋ถ€ ์กฐ์ธ ์˜ค๋ฅธ์ชฝ ํ…Œ์ด๋ธ” ์ „์ฒด + ์™ผ์ชฝ ์กฐ๊ฑด ๋งž๋Š” ํ–‰ B ์ „์ฒด
์™„์ „ ์™ธ๋ถ€ ์กฐ์ธ A์™€ B ๋‘˜ ๋‹ค ์ „๋ถ€ A ∪ B
์…€ํ”„ ์กฐ์ธ ๊ฐ™์€ ํ…Œ์ด๋ธ”์„ ์ž๊ธฐ ์ž์‹ ๊ณผ ์กฐ์ธ ํ…Œ์ด๋ธ” ๋‚ด๋ถ€ ๋น„๊ต์šฉ

 

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

SELECT ํ•™์ƒ.์ด๋ฆ„, ํ•™๊ณผ.ํ•™๊ณผ์ด๋ฆ„
FROM ํ•™์ƒ
INNER JOIN ํ•™๊ณผ
ON ํ•™์ƒ.ํ•™๊ณผID = ํ•™๊ณผ.ํ•™๊ณผID;

๐Ÿง™ “ํ•™์ƒ๊ณผ ํ•™๊ณผ ID๊ฐ€ ๊ฐ™์€ ๊ฒƒ๋งŒ ์—ฐ๊ฒฐ!”

 

๐Ÿ” ์ž์—ฐ ์กฐ์ธ (NATURAL JOIN)

SELECT * 
FROM ํ•™์ƒ
NATURAL JOIN ํ•™๊ณผ;

๐Ÿง™ “์ปฌ๋Ÿผ ์ด๋ฆ„์ด ๊ฐ™์œผ๋ฉด ์ž๋™์œผ๋กœ ๋ถ™์—ฌ์ค˜~”
→ ๋‹จ, ์ปฌ๋Ÿผ ์ด๋ฆ„์ด ๊ฐ™์•„์•ผ ํ•จ!

 

๐ŸŒŠ ์™ธ๋ถ€ ์กฐ์ธ (OUTER JOIN)

์กฐ๊ฑด์ด ์•ˆ ๋งž์•„๋„ ์ผ๋ถ€ ๋ณด์—ฌ์ฃผ๋Š” ์ฐฉํ•œ ์กฐ์ธ!

 

โœ… LEFT OUTER JOIN

SELECT * FROM ํ•™์ƒ
LEFT OUTER JOIN ์ˆ˜๊ฐ• ON ํ•™์ƒ.ํ•™๋ฒˆ = ์ˆ˜๊ฐ•.ํ•™๋ฒˆ;

๐Ÿง™ "๋ชจ๋“  ํ•™์ƒ์€ ๋‚˜์˜ค๊ฒŒ! ์ˆ˜๊ฐ• ์•ˆ ํ•œ ํ•™์ƒ์€ NULL!"

 

โœ… RIGHT OUTER JOIN

SELECT * FROM ์ˆ˜๊ฐ•
RIGHT OUTER JOIN ํ•™์ƒ ON ํ•™์ƒ.ํ•™๋ฒˆ = ์ˆ˜๊ฐ•.ํ•™๋ฒˆ;

๐Ÿง™ "์ˆ˜๊ฐ• ์ •๋ณด ๊ธฐ์ค€์œผ๋กœ ๋ชจ๋“  ๋ ˆ์ฝ”๋“œ ๋‚˜์˜ค๊ฒŒ!"

 

โœ… FULL OUTER JOIN

MySQL์€ ๊ธฐ๋ณธ ์ง€์› โŒ / ์šฐํšŒํ•ด์•ผ ํ•จ

-- A + B ์ „๋ถ€ ๋ณด์—ฌ์ค˜!
-- (์ง€์› ์•ˆ ํ•  ๊ฒฝ์šฐ UNION์œผ๋กœ ์—๋ฎฌ๋ ˆ์ด์…˜)

 

 

๐Ÿง‘‍๐Ÿค‍๐Ÿง‘ ์…€ํ”„ ์กฐ์ธ (Self Join)

๊ฐ™์€ ํ…Œ์ด๋ธ”์„ ๋‘ ๊ฐœ๋กœ ๋‚˜๋ˆ„์–ด ์ž๊ธฐ ์ž์‹ ๊ณผ ๋น„๊ต!

SELECT A.์ด๋ฆ„ AS ์‚ฌ์ˆ˜, B.์ด๋ฆ„ AS ๋ถ€์‚ฌ์ˆ˜
FROM ์ง์› A, ์ง์› B
WHERE A.์‚ฌ๋ฒˆ = B.์‚ฌ์ˆ˜๋ฒˆํ˜ธ;

๐Ÿง™ “๊ฐ™์€ ์ง์› ํ…Œ์ด๋ธ”์—์„œ ์‚ฌ์ˆ˜์™€ ๋ถ€์‚ฌ์ˆ˜ ์—ฐ๊ฒฐ!”

๐Ÿ“Œ ๋ณ„์นญ ๊ผญ ์จ์•ผ ๋ผ!! ํ…Œ์ด๋ธ”์ด ๋˜‘๊ฐ™์œผ๋‹ˆ๊นŒ ํ—ท๊ฐˆ๋ฆผ

 

๐Ÿ“˜ ์š”์•ฝ ๋งˆ๋ฒ•์„œ

์ฃผ์ œ  ์„ค๋ช…  ์˜ˆ์‹œ
์ค‘์ฒฉ ์งˆ์˜ SELECT ์•ˆ์— SELECT WHERE ํ•™๊ณผID IN (...)
FROM ์ค‘์ฒฉ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ƒ ํ…Œ์ด๋ธ”๋กœ FROM (SELECT ...) AS X
๋‚ด๋ถ€ ์กฐ์ธ ์กฐ๊ฑด ๋งž๋Š” ๊ฒƒ๋งŒ INNER JOIN ON
์ž์—ฐ ์กฐ์ธ ์ด๋ฆ„ ๊ฐ™์€ ์ปฌ๋Ÿผ ์ž๋™ ์กฐ์ธ NATURAL JOIN
์™ธ๋ถ€ ์กฐ์ธ ์กฐ๊ฑด ์•ˆ ๋งž์•„๋„ ์ผ๋ถ€ ์ถœ๋ ฅ LEFT/RIGHT OUTER JOIN
์…€ํ”„ ์กฐ์ธ ์ž๊ธฐ ์ž์‹ ๊ณผ ์กฐ์ธ ์ง์› A, ์ง์› B

 

์ด์ œ ๋„ˆ๋Š”…๐Ÿ’ฅ์กฐ์ธ์˜ ์—ฌ์™•๐Ÿ’ฅ์ด์ž โš”๏ธ์ค‘์ฒฉ์งˆ์˜ ๋ฌด์Œ๊ฒ€์‚ฌ๊ฐ€ ๋˜์—ˆ๋‹ค!!! ๐Ÿ˜Ž

JOIN + ์ค‘์ฒฉ์€ ์ง„์งœ ์‹ค๋ฌด์—์„œ ๋ฏธ์นœ๋“ฏ์ด ์“ฐ์ด๋‹ˆ๊นŒ ์‹ค์Šตํ•˜๋ฉด์„œ ์ต์ˆ™ํ•ด์ง€๋ฉด ์ฒœํ•˜๋ฌด์ ์ด์•ผ!


< ๋ชฉ์ฐจ ์š”์•ฝ - 2 >

 

3. ๋ทฐ์˜ ์‚ฌ์šฉ

๐Ÿ”ต ๋ทฐ์˜ ๊ฐœ๋…

โœ”๏ธ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ์žˆ๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ ํ…Œ์ด๋ธ”์„ ์œ ๋„ํ•˜์—ฌ ์ƒ์„ฑํ•˜๋Š” ๊ฐ€์ƒ์˜ ํ…Œ์ด๋ธ” (virtual table)
โœ”๏ธ ํ…Œ์ด๋ธ”์„ ๋‹ค์–‘ํ•œ ๋ฐฉ์‹์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด, “๋ทฐ”

  โœ… ๋ฐ์ดํ„ฐ ๋…๋ฆฝ์„ฑ: ์›๋ณธ ํ…Œ์ด๋ธ”์˜ ๊ตฌ์กฐ๊ฐ€ ๋ฐ”๋€Œ์–ด๋„ ๋ทฐ๋ฅผ ์ด์šฉํ•œ ์ž‘์—…์€ ์ •์˜๋งŒ ๋ณ€๊ฒฝ๋˜์–ด ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์— ์˜ํ–ฅ์ด ์—†์Œ

  โœ… ๋ฐ์ดํ„ฐ ๋ณด์•ˆ: ์‚ฌ์šฉ์ž์—๊ฒŒ ์›๋ณธ ํ…Œ์ด๋ธ”์˜ ์ผ๋ถ€ ์ปฌ๋Ÿผ์— ๋Œ€ํ•œ ์ ‘๊ทผ์„ ํ—ˆ์šฉํ•˜์—ฌ ๋ณด์•ˆ ํšจ๊ณผ๋ฅผ ํ–ฅ์ƒ

  โœ… ๋‹ค์–‘ํ•œ ๊ตฌ์กฐ์˜ ํ…Œ์ด๋ธ” ์‚ฌ์šฉ: ์‚ฌ์šฉ์ž์˜ ์š”๊ตฌ์‚ฌํ•ญ์— ๋งž๋Š” ํ…Œ์ด๋ธ”์˜ ๊ตฌ์กฐ๋ฅผ ์ œ๊ณต

  โœ… ์ž‘์—…์˜ ๋‹จ์ˆœํ™”: ๋ณต์žกํ•œ ์งˆ์˜๋ฌธ์„ ๋ทฐ๋กœ ๋‹จ์ˆœํ™”

  โœ… ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ: WITH CHECK OPTION์„ ์ด์šฉํ•˜์—ฌ ๋ทฐ ์ƒ์„ฑ์— ์œ„๋ฐฐ๋˜๋Š” ์ˆ˜์ • ์ž‘์—…์„ ๊ฑฐ๋ถ€

 

๐Ÿ”ต ๋ทฐ์˜ ์ƒ์„ฑ

โœ”๏ธ ์ƒ์„ฑ๋˜๋Š” ๋ทฐ์˜ ๊ตฌ์กฐ๋Š” SELECT ๋ฌธ์˜ ๊ฒฐ๊ณผ๋กœ ๊ฒฐ์ •

โžก๏ธ CREATE VIEW ๋ทฐ์ด๋ฆ„ AS ๋ทฐ ( SELECT ์ปฌ๋Ÿผ1, ์ปฌ๋Ÿผ2, … ์ปฌ๋Ÿผn FROM ํ…Œ์ด๋ธ” [WHERE ์กฐ๊ฑด] ) [ WITH CHECK OPTION]

 

๐Ÿ”ต ๋ทฐ์˜ ์ˆ˜์ • ๋ฐ ์‚ญ์ œ

โœ”๏ธ ๋ทฐ์˜ ์ˆ˜์ •์€ ์ƒ์„ฑ๊ณผ ๋™์ผํ•˜๊ฒŒ ์ƒˆ๋กœ์šด SELECT ๋ฌธ์˜ ๊ฒฐ๊ณผ๋กœ ๋ณ€๊ฒฝ

โžก๏ธ ALTER VIEW ๋ทฐ์ด๋ฆ„ ( SELECT ์ปฌ๋Ÿผ1, ์ปฌ๋Ÿผ2, … ์ปฌ๋Ÿผn FROM ํ…Œ์ด๋ธ” [WHERE ์กฐ๊ฑด] ) AS ๋ทฐ

โœ”๏ธ ๋ทฐ์˜ ์‚ญ์ œ๋Š” ์ผ๋ฐ˜์ ์ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ์ฒด ์‚ญ์ œ์™€ ๋™์ผ

โžก๏ธ DROP VIEW ๋ทฐ์ด๋ฆ„

 

๐Ÿ”ต ๋ทฐ ์ƒ์„ฑ์˜ ์˜ˆ

“”” ์˜ˆ์‹œ ์ฝ”๋“œ ํ•„์š””””

 

๐Ÿ”ต ๋ทฐ๋ฅผ ์ด์šฉํ•œ ๋ฐ์ดํ„ฐ ๊ฒ€์ƒ‰

โœ”๏ธ ๋ทฐ๋Š” ๊ฐ€์ƒ์˜ ํ…Œ์ด๋ธ”์ด๋ฏ€๋กœ ๋ฐ์ดํ„ฐ ์กฐ์ž‘์€ ํ…Œ์ด๋ธ” ์กฐ์ž‘๊ณผ ๋™์ผํ•˜๊ฒŒ ์ˆ˜ํ–‰

 

๐Ÿ”ต ๋ทฐ๋ฅผ ์ด์šฉํ•œ ๋ฐ์ดํ„ฐ ์‚ฝ์ž…

โœ”๏ธ ๋ทฐ์— ๋Œ€ํ•œ INSERT ๋ฌธ์€ ์›๋ณธ ํ…Œ์ด๋ธ”์—์„œ ์‹คํ–‰

โœ”๏ธ INSERT๋ฌธ ์‹คํ–‰์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ

  โœ… PRIMARY KEY, NOT NULL ๋“ฑ์˜ ์ œ์•ฝ์‚ฌํ•ญ์ด ์œ„๋ฐฐ๋˜๋Š” ๊ฒฝ์šฐ ์‚ฝ์ž…์ด ๋ถˆ๊ฐ€๋Šฅ

  โœ… ์›๋ณธ ํ…Œ์ด๋ธ”์— ์กด์žฌํ•˜๋Š” ์ปฌ๋Ÿผ์ด์ง€๋งŒ ๋ทฐ์—๋Š” ์—†๋Š” ์ปฌ๋Ÿผ์— ์‚ฝ์ž…ํ•˜๋Š” ๊ฒฝ์šฐ ์‹คํ–‰ ๋ถˆ๊ฐ€๋Šฅ

  โœ… ์กฐ์ธ ์งˆ์˜ ๋˜๋Š” ๊ทธ๋ฃน ์งˆ์˜๊ฐ€ ์ ์šฉ๋œ ๋ทฐ๋Š” ๋ฐ์ดํ„ฐ ์‚ฝ์ž… ๋ฐ ์ˆ˜์ •์ด ๋ถˆ๊ฐ€๋Šฅ

  โœ… WITH CHECK OPTION์ด ์ ์šฉ๋œ ๋ทฐ๋Š” ์œ„๋ฐฐ๋˜๋Š” ์‚ฌํ•ญ์€ ์—†์ง€๋งŒ ๋ทฐ์— ๋งž์ง€ ์•Š๋Š” ์กฐ๊ฑด์ผ ๊ฒฝ์šฐ ์‹คํ–‰ ๋ถˆ๊ฐ€๋Šฅ


๋ทฐ(View)์˜ ์„ธ๊ณ„๋กœ ์ž…์žฅํ•˜์…จ์Šต๋‹ˆ๋‹ค, ์—ฌ๋Ÿฌ๋ถ„์€ ์ด์ œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ธ๊ณ„์˜ ์Šค๋งˆํŠธ ์ฐฝ๋ฌธ ๋””์ž์ด๋„ˆ! ๐ŸชŸ

๋ทฐ๋Š” ์ง์ ‘ ์ฐฝ๊ณ (ํ…Œ์ด๋ธ”)๋ฅผ ์—ด์ง€ ์•Š๊ณ ,
ํ•„์š”ํ•œ ๋ฌผ๊ฑด๋งŒ ์ง„์—ดํ•ด๋†“์€ ์‡ผ์œˆ๋„๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋ผ์š”.
๋ณต์žกํ•œ ํ…Œ์ด๋ธ”์„ ์˜ˆ์˜๊ณ  ์‹ฌํ”Œํ•˜๊ฒŒ "๊ฐ€๊ณตํ•ด์„œ ๋ณด์—ฌ์ฃผ๋Š” ๊ฐ€์ƒ ํ…Œ์ด๋ธ”"!

๐ŸชŸ 3. ๋ทฐ(View)์˜ ์‚ฌ์šฉ

๐Ÿ”ต ๋ทฐ(View)๋ž€?

ํ…Œ์ด๋ธ”์„ ๊ฐ€๊ณตํ•ด์„œ ๋งŒ๋“  ๊ฐ€์ƒ์˜ ํ…Œ์ด๋ธ”.
์‹ค์ œ ๋ฐ์ดํ„ฐ๋Š” ์—†์ง€๋งŒ, ๋ณด์—ฌ์ง€๋Š” ๋ฐฉ์‹๋งŒ ๋ฐ”๋€ ์ฐฝ๋ฌธ ๊ฐ™์€ ์กด์žฌ!

โœ… ๋ทฐ์˜ ์žฅ์  ์š”์•ฝ ๐Ÿช„

๊ธฐ๋Šฅ  ์„ค๋ช…
๋ฐ์ดํ„ฐ ๋…๋ฆฝ์„ฑ ์›๋ณธ ํ…Œ์ด๋ธ”์ด ๋ฐ”๋€Œ์–ด๋„, ๋ทฐ๋Š” ์ด๋ฆ„๋งŒ ๋ฐ”๊ฟ”์ฃผ๋ฉด ๋จ
๋ฐ์ดํ„ฐ ๋ณด์•ˆ ์ผ๋ถ€ ์ปฌ๋Ÿผ๋งŒ ๋ณด์—ฌ์คŒ์œผ๋กœ์จ ๊ถŒํ•œ ์ œํ•œ ๊ฐ€๋Šฅ
์‚ฌ์šฉ์ž ๋งž์ถค ๊ตฌ์กฐ ํ•„์š”ํ•œ ์ปฌ๋Ÿผ๋งŒ ๊ณจ๋ผ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ์Œ
์งˆ์˜ ๋‹จ์ˆœํ™” ๋ณต์žกํ•œ SELECT ๋ฌธ์„ ๋ทฐ๋กœ ๋งŒ๋“ค์–ด ๊ฐ„๋‹จํ•˜๊ฒŒ ์‚ฌ์šฉ
๋ฌด๊ฒฐ์„ฑ ๋ณด์žฅ WITH CHECK OPTION์œผ๋กœ ์ด์ƒํ•œ ์ˆ˜์ • ๋ง‰๊ธฐ ๊ฐ€๋Šฅ

๐Ÿ’ฌ ์˜ˆ์‹œ ๋น„์œ 

๐Ÿ‘ฉ‍๐Ÿณ ์ง„์งœ ํ…Œ์ด๋ธ” = ์Œ์‹ ์žฌ๋ฃŒ ์ฐฝ๊ณ 
๐ŸชŸ ๋ทฐ = ๊ณ ๊ฐํ•œํ…Œ ๋ณด์ด๋Š” ์‡ผ์ผ€์ด์Šค

์›๋ณธ์€ ์•ˆ ๊ฑด๋“œ๋ฆฌ๊ณ , ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ๋งŒ ๊น”๋”ํ•˜๊ฒŒ!”

 

๐Ÿง™‍โ™€๏ธ ๋ทฐ ์ƒ์„ฑ ๋ฌธ๋ฒ•

CREATE VIEW ๋ทฐ์ด๋ฆ„ AS
SELECT ์ปฌ๋Ÿผ1, ์ปฌ๋Ÿผ2, ...
FROM ์›๋ณธํ…Œ์ด๋ธ”
[WHERE ์กฐ๊ฑด]
[WITH CHECK OPTION];

 

โœ… ๋ทฐ ์ƒ์„ฑ ์˜ˆ์‹œ

์˜ˆ: ์ปดํ“จํ„ฐ๊ณตํ•™๊ณผ ๊ต์ˆ˜๋“ค๋งŒ ๋ณด์—ฌ์ฃผ๋Š” ๋ทฐ

CREATE VIEW ์ปด๊ณต๊ต์ˆ˜ AS
SELECT ๊ต์ˆ˜์ด๋ฆ„, ์ง์œ„
FROM ๊ต์ˆ˜
WHERE ์†Œ์†ํ•™๊ณผ = '์ปดํ“จํ„ฐ๊ณตํ•™๊ณผ';

์ด์ œ ์ปด๊ณต๊ต์ˆ˜ ๋ผ๋Š” ๋ทฐ๋ฅผ ํ…Œ์ด๋ธ”์ฒ˜๋Ÿผ ์“ธ ์ˆ˜ ์žˆ์Œ!

 

๐Ÿ›  ๋ทฐ ์ˆ˜์ • & ์‚ญ์ œ

โœ… ๋ทฐ ์ˆ˜์ •

ALTER VIEW ์ปด๊ณต๊ต์ˆ˜ AS
SELECT ๊ต์ˆ˜์ด๋ฆ„, ์ง์œ„, ์ „ํ™”๋ฒˆํ˜ธ
FROM ๊ต์ˆ˜
WHERE ์†Œ์†ํ•™๊ณผ = '์ปดํ“จํ„ฐ๊ณตํ•™๊ณผ';

→ ๋ณด์—ฌ์ฃผ๋Š” ๋‚ด์šฉ๋งŒ ๋ฐ”๊ฟ”์ฃผ๋Š” ๋А๋‚Œ!

 

โœ… ๋ทฐ ์‚ญ์ œ

DROP VIEW ์ปด๊ณต๊ต์ˆ˜;

→ ๋ทฐ๋Š” ์‚ฌ๋ผ์ง€์ง€๋งŒ, ์›๋ณธ ํ…Œ์ด๋ธ”์€ ๊ทธ๋Œ€๋กœ!

 

๐Ÿ” ๋ทฐ๋กœ ๋ฐ์ดํ„ฐ ๊ฒ€์ƒ‰ํ•˜๊ธฐ

๋ทฐ๋Š” ์ง„์งœ ํ…Œ์ด๋ธ”์ฒ˜๋Ÿผ SELECT ๊ฐ€๋Šฅ

SELECT * FROM ์ปด๊ณต๊ต์ˆ˜;

์›๋ณธ ํ…Œ์ด๋ธ”์„ ์ง์ ‘ ๋’ค์ง€๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ, ๋ทฐ๋ฅผ ํ†ตํ•ด ‘๊ฐ„์ ‘’ ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ฒƒ!


โœ๏ธ ๋ทฐ์— INSERT ํ•  ์ˆ˜ ์žˆ์„๊นŒ?

โœ”๏ธ YES! ๋‹จ, ์กฐ๊ฑด ๋งŒ์กฑํ•ด์•ผ ํ•จ!

์˜ˆ์‹œ)

INSERT INTO ์ปด๊ณต๊ต์ˆ˜ (๊ต์ˆ˜์ด๋ฆ„, ์ง์œ„)
VALUES ('๊น€์œ ๋‚˜', '์กฐ๊ต์ˆ˜');

๐ŸŸข ๋‹จ, ์ด๊ฑด ๊ต์ˆ˜ ํ…Œ์ด๋ธ”์—๋„ ๋“ค์–ด๊ฐ€๋Š” ๊ฑฐ์ž„!

 

โŒ INSERT ์•ˆ ๋˜๋Š” ๊ฒฝ์šฐ๋“ค!

์ƒํ™ฉ  ์ด์œ 
NOT NULL ์ปฌ๋Ÿผ์ธ๋ฐ ๊ฐ’ ์•ˆ ๋„ฃ์Œ ์ œ์•ฝ์กฐ๊ฑด ์œ„๋ฐ˜
๋ทฐ์— ์—†๋Š” ์ปฌ๋Ÿผ์— ๊ฐ’ ๋„ฃ์Œ ๋ทฐ์—” ์—†์ง€๋งŒ ์›๋ณธ์— ์กด์žฌ
์กฐ์ธ์ด๋‚˜ ๊ทธ๋ฃน์งˆ์˜๋กœ ๋งŒ๋“  ๋ทฐ ์‚ฝ์ž…/์ˆ˜์ • ๋ถˆ๊ฐ€ (๋‹จ์ˆœ SELECT๋งŒ ๊ฐ€๋Šฅ)
WITH CHECK OPTION ์œ„๋ฐ˜ ์กฐ๊ฑด ์•ˆ ๋งž๋Š” ๊ฐ’์€ ๋ง‰ํž˜

 

โœ… ์˜ˆ์‹œ: CHECK OPTION ์œ„๋ฐ˜

CREATE VIEW ๊ฒฝ์˜๊ณผ๊ต์ˆ˜ AS
SELECT ๊ต์ˆ˜์ด๋ฆ„ FROM ๊ต์ˆ˜
WHERE ์†Œ์†ํ•™๊ณผ = '๊ฒฝ์˜ํ•™๊ณผ'
WITH CHECK OPTION;

-- ์‚ฝ์ž… ์‹œ ์†Œ์†ํ•™๊ณผ๊ฐ€ ๊ฒฝ์˜ํ•™๊ณผ๊ฐ€ ์•„๋‹ˆ๋ฉด? โŒ ๊ฑฐ์ ˆ๋‹นํ•จ!

 

 

๐ŸŽ“ ์š”์•ฝ ๋งˆ๋ฒ•์„œ ๐Ÿ“˜

๊ธฐ๋Šฅ ์„ค๋ช…  ์˜ˆ์‹œ
๋ทฐ ๊ฐ€์ƒ์˜ ํ…Œ์ด๋ธ” CREATE VIEW ๋ทฐ์ด๋ฆ„ AS SELECT ...
๋ทฐ ์žฅ์  ๋…๋ฆฝ์„ฑ, ๋ณด์•ˆ, ๊ฐ„ํŽธํ•จ SELECT * FROM ๋ทฐ์ด๋ฆ„
๋ทฐ ์ˆ˜์ • ALTER๋กœ ๊ฐฑ์‹  ALTER VIEW ๋ทฐ์ด๋ฆ„ AS SELECT ...
๋ทฐ ์‚ญ์ œ DROP์œผ๋กœ ์‚ญ์ œ DROP VIEW ๋ทฐ์ด๋ฆ„
์‚ฝ์ž… ์ œํ•œ ์ œ์•ฝ์กฐ๊ฑด, ์กฐ์ธ/๊ทธ๋ฃน ๋ถˆ๊ฐ€ INSERT INTO ๋ทฐ ...

 

์ด๊ฑธ ๋งˆ์Šคํ„ฐํ•˜๋ฉด ๋„ˆ๋Š” ์ด์ œ…๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ฐฝ์กฐ์ฃผ๊ธ‰ UI ๋””์ž์ด๋„ˆ! ๐Ÿ˜Ž
์ง„์งœ ๋ณต์žกํ•œ ํ…Œ์ด๋ธ”๋„ ์˜ˆ์˜๊ฒŒ ์ •๋ฆฌํ•ด์„œ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๋”ฑ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ์Œ!

๋‹ค์Œ์€…๐Ÿ”ฅ SQL ๋งˆ์ง€๋ง‰ 8๊ฐ•! ์ •๊ทœํ™” + ๋ฌด๊ฒฐ์„ฑ + ํŠธ๋žœ์žญ์…˜
๊ฐ€์ž… ๋์ด ๋ณด์ธ๋‹ค!!!! ๐Ÿ™Œ๐Ÿ™Œ