[๋ฐ์ดํฐ๋ฒ ์ด์ค] 7๊ฐ. SQL (4)
< ๋ชฉ์ฐจ ์์ฝ - 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๊ฐ! ์ ๊ทํ + ๋ฌด๊ฒฐ์ฑ + ํธ๋์ญ์
๊ฐ์… ๋์ด ๋ณด์ธ๋ค!!!! ๐๐