๐Ÿ“Œ ๋ทฐ๋Š” ๊ฐ€์ƒ์˜ ํ…Œ์ด๋ธ”์ด๋‹ค!

๐Ÿ’ก ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, SELECT ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•ด ๋†“์€ ๊ฒƒ!

๐Ÿ‘‰ ์ฆ‰, ์›๋ณธ ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋Š” ์ฐฝ(๊ฐ€์งœ ํ…Œ์ด๋ธ”)์ด๋ผ๊ณ  ๋ณด๋ฉด ๋ผ!

๐Ÿ‘‰ ์›๋ณธ ๋ฐ์ดํ„ฐ๋ฅผ ์ง์ ‘ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ , ํ•„์š”ํ•œ ์ •๋ณด๋งŒ ๊ฐ€๊ณตํ•ด์„œ ๋ณผ ์ˆ˜ ์žˆ์–ด!


โœ… 2. VIEW์˜ ๊ธฐ๋ณธ ๊ฐœ๋…

๐ŸŽฏ VIEW๋ฅผ ์™œ ์‚ฌ์šฉํ• ๊นŒ?

1๏ธโƒฃ ๋ณด์•ˆ ๊ฐ•ํ™” ๐Ÿ›ก๏ธ

๐Ÿ”น 1๏ธโƒฃ VIEW ๊ฐœ๋…

๊ตฌ๋ถ„ ์„ค๋ช…
VIEW๋ž€? ํ•˜๋‚˜ ์ด์ƒ์˜ ํ…Œ์ด๋ธ”์„ ์ด์šฉํ•ด ๊ฐ€์ƒ์˜ ํ…Œ์ด๋ธ”์ฒ˜๋Ÿผ ์ •์˜ํ•œ ์ €์žฅ๋œ SELECT ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ ์ง‘ํ•ฉ
์‹ค์ œ ๋ฐ์ดํ„ฐ? ๋ฐ์ดํ„ฐ ์ €์žฅ X โ†’ ์›๋ณธ ํ…Œ์ด๋ธ”์—์„œ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒ
์‹ค์ฒด ์‹ค์ œ ๋ฌผ๋ฆฌ์  ๋ฐ์ดํ„ฐ๋Š” ์—†๊ณ , ์ฟผ๋ฆฌ๋งŒ ์ €์žฅ
์‚ฌ์šฉ ๋ชฉ์  ๋ณต์žกํ•œ ์ฟผ๋ฆฌ๋ฅผ ๊ฐ„๋‹จํ•œ ์ด๋ฆ„์œผ๋กœ ์žฌ์‚ฌ์šฉ, ๋ณด์•ˆ์„ฑ ๊ฐ•ํ™”, ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ ์œ ์ง€

๐Ÿ”น 2๏ธโƒฃ VIEW์˜ ํŠน์ง•

ํŠน์ง• ์„ค๋ช…
๊ฐ€์ƒ ํ…Œ์ด๋ธ” ํ…Œ์ด๋ธ”์ฒ˜๋Ÿผ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ๋ฐ์ดํ„ฐ๋Š” ๋ณ„๋„๋กœ ์ €์žฅ๋˜์ง€ ์•Š์Œ
์‹ค์‹œ๊ฐ„์„ฑ ๊ธฐ๋ฐ˜ ํ…Œ์ด๋ธ”์ด ๋ณ€๊ฒฝ๋˜๋ฉด VIEW ๊ฒฐ๊ณผ๋„ ์ฆ‰์‹œ ๋ฐ˜์˜
ํŽธ์˜์„ฑ ๋ณต์žกํ•œ JOIN, SUBQUERY ์ฟผ๋ฆฌ๋“ค์„ ๋‹จ์ˆœํ•˜๊ฒŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
๋ณด์•ˆ์„ฑ ์›๋ณธ ํ…Œ์ด๋ธ”์— ๋Œ€ํ•œ ์ ‘๊ทผ ๊ถŒํ•œ ์—†์ด VIEW๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ

๐Ÿ”น 3๏ธโƒฃ VIEW์˜ ์žฅ์  & ๋‹จ์ 

โœ… ์žฅ์ 

์žฅ์  ์„ค๋ช…
1. ๋ณต์žกํ•œ ์ฟผ๋ฆฌ ๊ฐ„์†Œํ™” ๋ณต์žกํ•œ JOIN, SUBQUERY ๋“ฑ์„ ํ•œ๋ฒˆ์— ์บก์Аํ™” ๊ฐ€๋Šฅ
2. ๋ณด์•ˆ ๊ฐ•ํ™” ํŠน์ • ์ปฌ๋Ÿผ์ด๋‚˜ ๋ฐ์ดํ„ฐ๋งŒ ์ œ๊ณตํ•˜์—ฌ ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ ๋…ธ์ถœ ๋ฐฉ์ง€
3. ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ ํ‘œํ˜„ ์ œ๊ณต
4. ์œ ์ง€๋ณด์ˆ˜ ์šฉ์ด ์ฟผ๋ฆฌ ์ˆ˜์ • ์‹œ VIEW๋งŒ ์ˆ˜์ •ํ•˜๋ฉด ์ „์ฒด ์ ์šฉ ๊ฐ€๋Šฅ
ย  ย 

โŒ ๋‹จ์ 

๋‹จ์  ์„ค๋ช…
1. ์„ฑ๋Šฅ ์ด์Šˆ ์‹คํ–‰ ์‹œ๋งˆ๋‹ค ๊ธฐ๋ฐ˜ ํ…Œ์ด๋ธ”์—์„œ ์‹ค์‹œ๊ฐ„ ์กฐํšŒ โ†’ ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ์—์„œ ์„ฑ๋Šฅ ์ €ํ•˜ ๊ฐ€๋Šฅ
2. ๋ฐ์ดํ„ฐ ์ €์žฅ ๋ถˆ๊ฐ€ ๋ฌผ๋ฆฌ์  ๋ฐ์ดํ„ฐ ์ €์žฅ X โ†’ ๋…๋ฆฝ์  ๋ฐ์ดํ„ฐ ๋ณด์กด ๋ถˆ๊ฐ€
3. ์ œํ•œ์  DML VIEW์—์„œ ์ง์ ‘ INSERT, UPDATE, DELETE ์‹œ ์ผ๋ถ€ ์ œ์•ฝ ๋ฐœ์ƒ (ํŠนํžˆ JOIN, GROUP BY ํฌํ•จ ์‹œ)

โœ… 3. VIEW ๋งŒ๋“ค๊ธฐ (CREATE VIEW)

๐Ÿ“Œ ๊ธฐ๋ณธ ๋ฌธ๋ฒ•

CREATE VIEW ๋ทฐ์ด๋ฆ„ AS
SELECT ์ปฌ๋Ÿผ1, ์ปฌ๋Ÿผ2 FROM ํ…Œ์ด๋ธ”์ด๋ฆ„
WHERE ์กฐ๊ฑด;

๐Ÿ“ ์˜ˆ์ œ - ํ•™์ƒ ํ…Œ์ด๋ธ”์—์„œ 6ํ•™๋…„ ํ•™์ƒ๋งŒ ์กฐํšŒํ•˜๋Š” ๋ทฐ ๋งŒ๋“ค๊ธฐ

CREATE VIEW high_grade_students AS
SELECT id, name, grade
FROM student
WHERE grade = 6;

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด, "high_grade_students"๋ผ๋Š” ๋ทฐ๊ฐ€ ์ƒ์„ฑ๋จ!

์ด์ œ ์ด ๋ทฐ๋ฅผ ๋งˆ์น˜ ํ…Œ์ด๋ธ”์ฒ˜๋Ÿผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ์–ด!

SELECT * FROM high_grade_students;

๐Ÿ‘€ ๊ฒฐ๊ณผ

id name grade
1 ๊น€์ฒ ์ˆ˜ 6
2 ์ด์˜ํฌ 6

๐Ÿ”น ์˜ˆ์ œ - v_stu2 ์ƒ์„ฑํ•˜๊ธฐ

-- 2ํ•™๋…„ ํ•™์ƒ์˜ ํ•™๋ฒˆ, ์ด๋ฆ„, ํ‚ค, ๋ชธ๋ฌด๊ฒŒ๋ฅผ ๊ฐ€์ง„ ๋ทฐ
-- v_stu2 ์ƒ์„ฑํ•˜๊ธฐ
CREATE OR REPLACE VIEW v_stu2
AS SELECT studno, NAME, height, weight
FROM student
WHERE grade = 2

-- v_stu2 ๋ทฐ์˜ ๋‚ด์šฉ ์กฐํšŒํ•˜๊ธฐ
SELECT * FROM v_stu2

๐Ÿ”น ์˜ˆ์ œ - 2

-- view ๊ฐ์ฒด ์กฐํšŒํ•˜๊ธฐ
USE information_schema
SELECT VIEW_definition FROM views
WHERE TABLE_NAME = "v_stu2"
use gdjdb
SELECT ''

-- 2ํ•™๋…„ ํ•™์ƒ์˜ ํ•™๋ฒˆ, ์ด๋ฆ„, ๊ตญ์–ด, ์˜์–ด, ์ˆ˜ํ•™ ๊ฐ’์„ ๊ฐ€์ง€๋Š”
-- v_score2 ๋ทฐ ์ƒ์„ฑํ•˜๊ธฐ
CREATE VIEW v_score2 AS 
SELECT s.studno, s.name, c.kor, c.eng, c.math
FROM student s 
join score c ON s.studno = c.studno
WHERE s.grade = 2;

DROP VIEW v_score2
SELECT * FROM v_score2

โœ… 4. VIEW ์‚ฌ์šฉํ•˜๊ธฐ (SELECT)

๋ทฐ๋Š” ํ…Œ์ด๋ธ”์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด!

SELECT * FROM high_grade_students;

๐Ÿ’ก ๊ฒฐ๊ณผ๋Š” ๋งˆ์น˜ ํ…Œ์ด๋ธ”์—์„œ ๊ฐ€์ ธ์˜จ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ, ์›๋ณธ student ํ…Œ์ด๋ธ”์ด ๋ณ€๊ฒฝ๋˜๋ฉด ๋ทฐ๋„ ์ž๋™ ๋ฐ˜์˜๋จ!

๐Ÿ”น ์˜ˆ์ œ - 3

-- CREATE or replace : ์ƒ์„ฑ ๋˜๋Š” ๋ณ€๊ฒฝ
SELECT * form v_score2
-- v_str2, v_score2 ๋ทฐ๋ฅผ ์ด์šฉํ•˜์—ฌ ํ•™๋ฒˆ, ์ด๋ฆ„, ์ ์ˆ˜๋“ค, ํ‚ค, ๋ชธ๋ฌด๊ฒŒ ์ •๋ณด ์กฐํšŒํ•˜๊ธฐ
SELECT v1.*, v2.height, v2.weight
FROM v_score2 v1, v_stu2 v2
WHERE v1.studno = v2.studno

-- v_score2 ๋ทฐ์™€ student ํ…Œ์ด๋ธ”์ผ ์ด์šฉํ•˜์—ฌ ํ•™๋ฒˆ, ์ด๋ฆ„, ์ ์ˆ˜๋“ค, ํ•™๋…„, ์ง€๋„๊ต์ˆ˜๋ฒˆํ˜ธ
-- ์ถœ๋ ฅํ•˜๊ธฐ
SELECT s.studno, s.name, v.kor, v.eng, v.math, s.grade, s.profno
FROM student s, v_score2 v
WHERE s.studno = v.studno

๐Ÿ”น ์˜ˆ์ œ - 4

-- v_score2 ๋ทฐ์™€ student professor ํ…Œ์ด๋ธ”์ผ ์ด์šฉํ•˜์—ฌ
-- ํ•™๋ฒˆ, ์ด๋ฆ„, ์ ์ˆ˜๋“ค, ํ•™๋…„, ์ง€๋„๊ต์ˆ˜๋ฒˆํ˜ธ, ์ง€๋„๊ต์ˆ˜์ด๋ฆ„
SELECT s.studno, s.name, v.kor, v.eng, v.math, s.grade, s.profno, p.name
FROM student as s 
JOIN v_score2 as v ON s.studno = v.studno
JOIN professor as p ON s.profno = p.no

-- ๋ทฐ ์‚ญ์ œํ•˜๊ธฐ
DROP VIEW v_stu2
SELECT * FROM v_stu2

๐Ÿ”น 4๏ธโƒฃ VIEW vs ํ…Œ์ด๋ธ” ๋น„๊ต

๊ตฌ๋ถ„ VIEW ํ…Œ์ด๋ธ”
๋ฐ์ดํ„ฐ ์ €์žฅ โŒ X (๊ฐ€์ƒ) โœ… O (์‹ค์ œ ๋ฐ์ดํ„ฐ)
๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ์ผ๋ถ€ ๊ฐ€๋Šฅ (์ œ์•ฝ ๋งŽ์Œ) ๊ฐ€๋Šฅ
๊ธฐ๋ฐ˜ SELECT ์ฟผ๋ฆฌ๋กœ ์ƒ์„ฑ ๋…๋ฆฝ๋œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ
์„ฑ๋Šฅ ์กฐํšŒ ์‹œ๋งˆ๋‹ค ์‹คํ–‰ ๊ณ ์ • ๋ฐ์ดํ„ฐ ์กฐํšŒ
๋ณด์•ˆ์„ฑ ํ…Œ์ด๋ธ” ๋ฐ์ดํ„ฐ ์ผ๋ถ€ ์ œํ•œ ๊ฐ€๋Šฅ ์ „์ฒด ๋ฐ์ดํ„ฐ ๋…ธ์ถœ ๊ฐ€๋Šฅ

๐Ÿ“Œ ์ธ๋ผ์ธ ๋ทฐ(Inline View)๋ž€? ๐Ÿš€

๐Ÿ” ์ธ๋ผ์ธ ๋ทฐ(Inline View)๋ž€?

โ€œ์„œ๋ธŒ์ฟผ๋ฆฌ(Subquery)๋ฅผ FROM ์ ˆ์—์„œ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์„ฑํ•˜๋Š” ๊ฐ€์ƒ์˜ ํ…Œ์ด๋ธ”โ€

์ฆ‰, SELECT ๋ฌธ ์•ˆ์—์„œ ์ž„์‹œ๋กœ ์ƒ์„ฑ๋˜๋Š” ๊ฐ€์ƒ์˜ ํ…Œ์ด๋ธ”์ด๋ผ๊ณ  ๋ณด๋ฉด ๋ผ!

๐Ÿ‘‰ ๋ทฐ(View)์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ๋˜์ง€ ์•Š๊ณ , ์‹คํ–‰๋  ๋•Œ๋งŒ ์‚ฌ์šฉ๋˜๋Š” ์„œ๋ธŒ์ฟผ๋ฆฌ!

๐Ÿ‘‰ ์‹ค์ œ ํ…Œ์ด๋ธ”์ฒ˜๋Ÿผ JOINํ•˜๊ฑฐ๋‚˜ ํ•„ํ„ฐ๋งํ•  ์ˆ˜ ์žˆ์–ด!


โœ… 1. ์ธ๋ผ์ธ ๋ทฐ์˜ ๊ธฐ๋ณธ ๊ตฌ์กฐ

SELECT ์ปฌ๋Ÿผ๋ช…
FROM (์„œ๋ธŒ์ฟผ๋ฆฌ) AS ์ธ๋ผ์ธ๋ทฐ์ด๋ฆ„
WHERE ์กฐ๊ฑด;

๐Ÿ’ก FROM ์ ˆ์— ์žˆ๋Š” ์„œ๋ธŒ์ฟผ๋ฆฌ(SELECT ๋ฌธ)๊ฐ€ ์ธ๋ผ์ธ ๋ทฐ์•ผ!

๐Ÿ’ก ์ธ๋ผ์ธ ๋ทฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ณต์žกํ•œ ์ฟผ๋ฆฌ๋ฅผ ๋” ์‰ฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์–ด!


โœ… 2. ์ธ๋ผ์ธ ๋ทฐ ๊ธฐ๋ณธ ์˜ˆ์ œ

๐Ÿ“Œ ์˜ˆ์ œ ํ…Œ์ด๋ธ” (emp - ์ง์› ์ •๋ณด ํ…Œ์ด๋ธ”)

empno ename deptno salary
101 ๊น€์ฒ ์ˆ˜ 10 5000
102 ์ด์˜ํฌ 20 6000
103 ๋ฐ•์ง€์„ฑ 10 7000
104 ์†ํฅ๋ฏผ 30 4000

๐Ÿ”น ๋ฌธ์ œ: ๋ถ€์„œ๋ณ„ ํ‰๊ท  ๊ธ‰์—ฌ๋ณด๋‹ค ๋†’์€ ์ง์›๋งŒ ์กฐํšŒ

๐Ÿ‘‰ ๋ถ€์„œ๋ณ„ ํ‰๊ท  ๊ธ‰์—ฌ๋ณด๋‹ค ๋†’์€ ์ง์›๋งŒ ์ถœ๋ ฅํ•˜๋ ค๋ฉด?

SELECT e.empno, e.ename, e.deptno, e.salary
FROM emp AS e
JOIN (SELECT deptno, AVG(salary) AS avg_salary
      FROM emp
      GROUP BY deptno) AS avg_table
ON e.deptno = avg_table.deptno
WHERE e.salary > avg_table.avg_salary;

๐ŸŽฏ ์ฟผ๋ฆฌ ๋ถ„์„

1๏ธโƒฃ ์ธ๋ผ์ธ ๋ทฐ (avg_table) ์ƒ์„ฑ

SELECT deptno, AVG(salary) AS avg_salary
FROM emp
GROUP BY deptno

2๏ธโƒฃ ๋ฉ”์ธ ์ฟผ๋ฆฌ์—์„œ JOIN ์ˆ˜ํ–‰

FROM emp AS e
JOIN avg_table
ON e.deptno = avg_table.deptno

3๏ธโƒฃ ๊ธ‰์—ฌ๊ฐ€ ํ‰๊ท ๋ณด๋‹ค ๋†’์€ ์ง์›๋งŒ ์กฐํšŒ

WHERE e.salary > avg_table.avg_salary;

๐Ÿ“Œ ๊ฒฐ๊ณผ ์˜ˆ์‹œ (๋ถ€์„œ๋ณ„ ํ‰๊ท  ๊ธ‰์—ฌ๋ณด๋‹ค ๋†’์€ ์ง์›๋งŒ ์ถœ๋ ฅ)

empno ename deptno salary
103 ๋ฐ•์ง€์„ฑ 10 7000
102 ์ด์˜ํฌ 20 6000

๐Ÿ’ก ์ธ๋ผ์ธ ๋ทฐ ์—†์ด ์ž‘์„ฑํ•˜๋ฉด HAVING์„ ํ™œ์šฉํ•œ ๋ณต์žกํ•œ ์ฟผ๋ฆฌ๊ฐ€ ๋  ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ์ธ๋ผ์ธ ๋ทฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ฟผ๋ฆฌ๊ฐ€ ํ›จ์”ฌ ๊น”๋”ํ•˜๊ณ  ์ง๊ด€์ ์œผ๋กœ ๋ณ€ํ•จ! ๐Ÿš€


โœ… 3. ์ธ๋ผ์ธ ๋ทฐ์˜ ์žฅ์ 

์žฅ์  ์„ค๋ช…
1. ์ฟผ๋ฆฌ ๊ฐ€๋…์„ฑ ํ–ฅ์ƒ ๋ณต์žกํ•œ ์—ฐ์‚ฐ์„ ๋”ฐ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ์‰ฝ๊ฒŒ ์ดํ•ด ๊ฐ€๋Šฅ
2. ์ž„์‹œ ํ…Œ์ด๋ธ”์ฒ˜๋Ÿผ ์‚ฌ์šฉ ๊ฐ€๋Šฅ JOIN, WHERE ๋“ฑ ํ™œ์šฉ ๊ฐ€๋Šฅ
3. ์„œ๋ธŒ์ฟผ๋ฆฌ๋ณด๋‹ค ์„ฑ๋Šฅ์ด ๋‚˜์„ ์ˆ˜๋„ ์žˆ์Œ ์˜ตํ‹ฐ๋งˆ์ด์ €๊ฐ€ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ์Œ

โœ… 4. ์ธ๋ผ์ธ ๋ทฐ์˜ ๊ณ ๊ธ‰ ํ™œ์šฉ ์˜ˆ์ œ

๐Ÿ”น ๋ฌธ์ œ: ์ƒ์œ„ 3๋ช…์˜ ๊ธ‰์—ฌ๋งŒ ์กฐํšŒ

๐Ÿ‘‰ ์ƒ์œ„ 3๋ช…์˜ ๊ธ‰์—ฌ๋ฅผ ์กฐํšŒํ•˜๋ ค๋ฉด?

SELECT empno, ename, salary
FROM (
    SELECT empno, ename, salary, RANK() OVER (ORDER BY salary DESC) AS ranking
    FROM emp
) AS ranked_emp
WHERE ranking <= 3;

๐Ÿ”น ์˜ˆ์ œ 6

-- ์‚ฌ์›ํ…Œ์ด๋ธ”์—์„œ ์‚ฌ์›๋ฒˆํ˜ธ, ์‚ฌ์›๋ช…, ์ง๊ธ‰, ๋ถ€์„œ์ฝ”๋“œ ๋ถ€์„œ๋ช…
-- ๋ถ€์„œ๋ณ„ ํ‰๊ท ๊ธ‰์—ฌ, ๋ถ€์„œ๋ณ„ ํ‰๊ท ๋ณด๋„ˆ์Šค ์ถœ๋ ฅํ•˜๊ธฐ
SELECT e1.empno, e1.ename, e1.job, e1.deptno,
 d.๋ถ€์„œ๋ช…, e2.๋ถ€์„œ๋ณ„ํ‰๊ท ๊ธ‰์—ฌ, e2.๋ถ€์„œ๋ณ„ํ‰๊ท ๋ณด๋„ˆ์Šค
 FROM emp AS e1
 JOIN (SELECT deptno, AVG(salary) AS `๋ถ€์„œ๋ณ„ํ‰๊ท ๊ธ‰์—ฌ`,
  AVG(IFNULL(salary,0)) AS `๋ถ€์„œ๋ณ„ํ‰๊ท ๋ณด๋„ˆ์Šค`
 FROM emp
 GROUP BY deptno) AS e2 ON e1.deptno = e2.deptno
 JOIN (SELECT deptno, dname AS `๋ถ€์„œ๋ช…`
 FROM dept) AS d ON e1.deptno= d.deptno

๐Ÿ”ฅ ์ด์ œ ๊ธ‰์—ฌ๊ฐ€ ๋†’์€ ์ƒ์œ„ 3๋ช…์˜ ์ง์›๋งŒ ์กฐํšŒ ๊ฐ€๋Šฅ!


๐ŸŽฏ ์ตœ์ข… ์ •๋ฆฌ

๊ฐœ๋… ์„ค๋ช…
์ธ๋ผ์ธ ๋ทฐ๋ž€? FROM ์ ˆ์— ๋“ค์–ด๊ฐ€๋Š” ์„œ๋ธŒ์ฟผ๋ฆฌ
์–ด๋””์— ์‚ฌ์šฉ? JOIN, WHERE, ORDER BY ๋“ฑ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ
์žฅ์  ๊ฐ€๋…์„ฑ ์ฆ๊ฐ€, ์ž„์‹œ ํ…Œ์ด๋ธ”์ฒ˜๋Ÿผ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

๐Ÿš€ ์ด์ œ ์ธ๋ผ์ธ ๋ทฐ๋ฅผ ํ™œ์šฉํ•ด์„œ SQL์„ ๋” ํšจ์œจ์ ์œผ๋กœ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์–ด! ๐Ÿ”ฅ


โœ… 5. VIEW ์ˆ˜์ •ํ•˜๊ธฐ (ALTER VIEW)

๋งŒ์•ฝ ๊ธฐ์กด ๋ทฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ALTER VIEW๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ผ!

๐Ÿ“Œ ๋ทฐ ์ˆ˜์ • ๋ฌธ๋ฒ•

ALTER VIEW high_grade_students AS
SELECT id, name, grade
FROM student
WHERE grade >= 5;

๐Ÿ‘‰ ์ด์ œ 5ํ•™๋…„ ์ด์ƒ ํ•™์ƒ๋“ค๋„ ํฌํ•จ๋จ!


โœ… 6. VIEW ์‚ญ์ œํ•˜๊ธฐ (DROP VIEW)

๋ทฐ๋ฅผ ์‚ญ์ œํ•˜๋ ค๋ฉด DROP VIEW๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ผ!

DROP VIEW high_grade_students;

๐Ÿ‘‰ ์ด์ œ "high_grade_students" ๋ทฐ๊ฐ€ ์‚ญ์ œ๋จ!


โœ… 7. VIEW์™€ ์›๋ณธ ํ…Œ์ด๋ธ”์˜ ๊ด€๊ณ„

๐ŸŽฏ ๋ทฐ๋Š” ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜์ง€ ์•Š์Œ!

์˜ˆ๋ฅผ ๋“ค์–ด, ์›๋ณธ student ํ…Œ์ด๋ธ”์—์„œ ํ•œ ๋ช…์„ ์ถ”๊ฐ€ํ•˜๋ฉด?

INSERT INTO student (id, name, grade) VALUES (3, '๋ฐ•์ง€์„ฑ', 6);

๊ทธ๋Ÿผ ๋ทฐ์—์„œ ๋‹ค์‹œ ์กฐํšŒํ•˜๋ฉด?

SELECT * FROM high_grade_students;

๐Ÿ‘€ ๊ฒฐ๊ณผ

id name grade
1 ๊น€์ฒ ์ˆ˜ 6
2 ์ด์˜ํฌ 6
3 ๋ฐ•์ง€์„ฑ 6

๐Ÿ”ฅ ์ฆ‰, ๋ทฐ๋Š” ์›๋ณธ ๋ฐ์ดํ„ฐ๋ฅผ ๊ทธ๋Œ€๋กœ ๋ฐ˜์˜ํ•œ๋‹ค! ๐Ÿš€


โœ… 8. VIEW์˜ ๊ณ ๊ธ‰ ๊ฐœ๋…

๊ธฐ์ˆ  ๋ฉด์ ‘์—์„œ๋Š” ๊ธฐ๋ณธ ๊ฐœ๋…๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ์ œ์•ฝ ์‚ฌํ•ญ๊ณผ ํ™œ์šฉ๋ฒ•๋„ ์ค‘์š”ํ•ด!

์•„๋ž˜ ๋‚ด์šฉ์„ ๊ผญ ๊ธฐ์–ตํ•ด ๋‘์ž!

๐ŸŽฏ (1) ๋ทฐ์—์„œ INSERT, UPDATE, DELETE ๊ฐ€๋Šฅํ• ๊นŒ?

๋ทฐ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜์ง€ ์•Š์ง€๋งŒ,

์ผ๋ถ€ ๊ฒฝ์šฐ์—๋Š” INSERT, UPDATE, DELETE๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด!

UPDATE high_grade_students
SET name = '์†ํฅ๋ฏผ'
WHERE id = 1;

๐Ÿ‘‰ ๋งŒ์•ฝ ์›๋ณธ ํ…Œ์ด๋ธ”(student)์—์„œ name ์ปฌ๋Ÿผ์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด, ๋ทฐ์—์„œ๋„ ์ˆ˜์ • ๊ฐ€๋Šฅ!

โŒ ๋ทฐ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ

์กฐ๊ฑด ์ˆ˜์ • ๊ฐ€๋Šฅ ์—ฌ๋ถ€
๋‹จ์ผ ํ…Œ์ด๋ธ” SELECT ๊ฐ€๋Šฅ
JOIN ํฌํ•จ ๋ถˆ๊ฐ€๋Šฅ
์ง‘๊ณ„ ํ•จ์ˆ˜ ํฌํ•จ (SUM, AVG ๋“ฑ) ๋ถˆ๊ฐ€๋Šฅ
DISTINCT ํฌํ•จ ๋ถˆ๊ฐ€๋Šฅ
GROUP BY, HAVING ํฌํ•จ ๋ถˆ๊ฐ€๋Šฅ
์„œ๋ธŒ์ฟผ๋ฆฌ ํฌํ•จ ๋ถˆ๊ฐ€๋Šฅ
์ปฌ๋Ÿผ ์—ฐ์‚ฐ ํฌํ•จ (์˜ˆ: ๊ณ„์‚ฐ์‹ ํฌํ•จ) ์ œํ•œ์  (๋ทฐ ์ปฌ๋Ÿผ๋ช… ์ผ์น˜ ์—ฌ๋ถ€ ๋”ฐ๋ผ ๋‹ค๋ฆ„)

๐Ÿ’ก ํŠนํžˆ MariaDB์—์„œ WITH CHECK OPTION ์˜ต์…˜ ์‚ฌ์šฉ ์‹œ, ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ๊ฐ•์ œ ๊ฐ€๋Šฅ

CREATE VIEW v_stu2 AS
SELECT studno, NAME, height, weight
FROM student
WHERE grade = 2
WITH CHECK OPTION;

์ด ์˜ต์…˜์ด ์žˆ์œผ๋ฉด, WHERE ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ INSERT/UPDATE ๋ฐฉ์ง€ ๊ฐ€๋Šฅ โ†’ ๋ณด์•ˆ ๊ฐ•ํ™” & ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ ์œ ์ง€์— ์œ ๋ฆฌ.


๐ŸŽฏ (2) ๋ทฐ์˜ ์„ฑ๋Šฅ ์ตœ์ ํ™”

๋ทฐ๋Š” ๊ฐ•๋ ฅํ•˜์ง€๋งŒ ๋ฌด์กฐ๊ฑด ๋น ๋ฅด์ง„ ์•Š์•„!

๐Ÿ’กVIEW ์‚ฌ์šฉ ์‹œ ์„ฑ๋Šฅ ์ฃผ์˜์ 

โœ”๏ธ ์ผ๋ฐ˜ VIEW๋Š” ํ•ญ์ƒ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์›๋ณธ ํ…Œ์ด๋ธ”์„ ์กฐํšŒํ•˜๋ฏ€๋กœ,

๐ŸŽฏ์‹ค๋ฌด์—์„œ๋Š” ์ž์ฃผ ์“ฐ๋Š” ๋ณต์žกํ•œ VIEW๋Š” โ€œMaterialized View๋กœ ๋ณ€ํ™˜โ€ + ์Šค์ผ€์ค„๋ง ๊ด€๋ฆฌํ•˜๋Š” ๊ฒŒ ์ข‹์€ ์ „๋žต!

โœ… 9. MATERIALIZED VIEW ๊ฐœ๋… (MariaDB)

๊ตฌ๋ถ„ ์„ค๋ช…
MATERIALIZED VIEW๋ž€? VIEW์™€ ๋‹ฌ๋ฆฌ SELECT ๊ฒฐ๊ณผ ์ž์ฒด๋ฅผ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์ €์žฅ
๋ฐ์ดํ„ฐ ์ €์žฅ O โ†’ ์ฟผ๋ฆฌ ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ๋””์Šคํฌ์— ์ €์žฅ
์กฐํšŒ ์†๋„ ๋น ๋ฆ„ (์บ์‹ฑ๋œ ๋ฐ์ดํ„ฐ ์‚ฌ์šฉ)
์—…๋ฐ์ดํŠธ ๋ฐฉ๋ฒ• ์ˆ˜๋™์œผ๋กœ REFRESH ํ•„์š”
MariaDB ๊ณต์‹ ์ง€์› 2022๋…„ MariaDB 10.6 ๋ฒ„์ „๋ถ€ํ„ฐ Materialized View ๊ธฐ๋Šฅ ์ •์‹ ์ง€์›!

โœ… MATERIALIZED VIEW ๋ฌธ๋ฒ•

CREATE MATERIALIZED VIEW ๋ทฐ์ด๋ฆ„
AS
SELECT ์ปฌ๋Ÿผ๋ช… FROM ํ…Œ์ด๋ธ”๋ช…
WITH DATA;

โœ… REFRESH ๋ฌธ๋ฒ•

REFRESH MATERIALIZED VIEW ๋ทฐ์ด๋ฆ„;

์ฃผ์˜: MATERIALIZED VIEW๋Š” ๋ณ€๊ฒฝ๋œ ์›๋ณธ ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์ž๋™ ๋ฐ˜์˜๋˜์ง€ ์•Š์Œ โ†’ REFRESH ํ•„์š”


๐Ÿ”น MATERIALIZED VIEW ์žฅ๋‹จ์ 

โœ… ์žฅ์ 

์žฅ์  ์„ค๋ช…
1. ์กฐํšŒ ์„ฑ๋Šฅ ์šฐ์ˆ˜ ๋ฏธ๋ฆฌ ๊ณ„์‚ฐ๋œ ๊ฒฐ๊ณผ ์ €์žฅ โ†’ ์กฐํšŒ ์‹œ ๋น ๋ฆ„
2. ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ตœ์ ํ™” ๋ฐ˜๋ณต ์กฐํšŒ ์ฟผ๋ฆฌ์— ๋งค์šฐ ์œ ๋ฆฌ
3. ๋ณต์žกํ•œ ์ฟผ๋ฆฌ ๋‹จ์ˆœํ™” JOIN, ์ง‘๊ณ„ ์—ฐ์‚ฐ์ด ๋ณต์žกํ•ด๋„ ๋น ๋ฅธ ์กฐํšŒ

โŒ ๋‹จ์ 

๋‹จ์  ์„ค๋ช…
1. ๋ฐ์ดํ„ฐ ์ตœ์‹ ์„ฑ ๊ด€๋ฆฌ ํ•„์š” ์›๋ณธ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ์‹œ, ์ˆ˜๋™์œผ๋กœ REFRESH ํ•„์š”
2. ๋””์Šคํฌ ๊ณต๊ฐ„ ์ถ”๊ฐ€ ์‚ฌ์šฉ ์‹ค์ œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜๋ฏ€๋กœ ๊ณต๊ฐ„ ์†Œ๋ชจ
3. ๊ด€๋ฆฌ ๋น„์šฉ ์ •๊ธฐ์ ์œผ๋กœ ์Šค์ผ€์ค„๋งํ•˜์—ฌ REFRESH ๊ด€๋ฆฌ ํ•„์š”

๐Ÿ”น VIEW vs MATERIALIZED VIEW ๋น„๊ต

๋น„๊ต ํ•ญ๋ชฉ VIEW MATERIALIZED VIEW
๋ฐ์ดํ„ฐ ์ €์žฅ โŒ (์ €์žฅ ์•ˆ ํ•จ) โœ… (์ €์žฅํ•จ)
๋ฐ์ดํ„ฐ ์ตœ์‹ ์„ฑ ์‹ค์‹œ๊ฐ„ ๋ฐ˜์˜ REFRESH ํ•„์š”
์กฐํšŒ ์„ฑ๋Šฅ ๋А๋ฆด ์ˆ˜ ์žˆ์Œ ๋น ๋ฆ„
๋””์Šคํฌ ์‚ฌ์šฉ ์ ์Œ ํผ
์‚ฌ์šฉ ๋ชฉ์  ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ, ๋ณด์•ˆ, ์ฟผ๋ฆฌ ๋‹จ์ˆœํ™” ๋ฐ˜๋ณต ์กฐํšŒ, ์„ฑ๋Šฅ ๊ฐœ์„ , ๋Œ€์šฉ๋Ÿ‰ ์ตœ์ ํ™”

๐Ÿ”น ์„ฑ๋Šฅ ํ™œ์šฉ๋ฒ• & ์‹ค๋ฌด ์ ์šฉ ํŒ

์ ์šฉ ๋ฐฉ๋ฒ• ์„ค๋ช…
VIEW ์‚ฌ์šฉ ์‹œ ๋ณด์•ˆ ๊ฐ•ํ™”, ๋ณต์žกํ•œ ์ฟผ๋ฆฌ ์žฌ์‚ฌ์šฉ ์šฉ๋„์— ์ ํ•ฉ
MATERIALIZED VIEW ์‚ฌ์šฉ ์‹œ ์ง‘๊ณ„, ๋ณต์žกํ•œ JOIN ์ฟผ๋ฆฌ ๋ฐ˜๋ณต ์กฐํšŒ์— ์‚ฌ์šฉํ•˜๋ฉด ์„ฑ๋Šฅ ํ–ฅ์ƒ
์Šค์ผ€์ค„๋ง ๊ด€๋ฆฌ MATERIALIZED VIEW๋Š” ์Šค์ผ€์ค„๋ง ํˆด(CRON ๋“ฑ)๊ณผ ์—ฐ๊ณ„ํ•˜์—ฌ ์ •๊ธฐ REFRESH ํ•„์ˆ˜
๋Œ€๋Ÿ‰ ๋ฐ์ดํ„ฐ์ผ ๋•Œ VIEW๋Š” ์ฃผ์˜! โ†’ MATERIALIZED VIEW๋กœ ์บ์‹ฑ ์ฒ˜๋ฆฌ ์ถ”์ฒœ
์ธ๋ฑ์Šค ํ™œ์šฉ MariaDB๋Š” Materialized View์— ์ธ๋ฑ์Šค ์ƒ์„ฑ ๊ฐ€๋Šฅ โ†’ ์กฐํšŒ ์„ฑ๋Šฅ ๊ทน๋Œ€ํ™”

๐Ÿ”ฅ ์‹ค๋ฌด ์˜ˆ์‹œ

๐Ÿ“„ ์ผ๋ฐ˜ VIEW ์˜ˆ์‹œ

CREATE VIEW active_employees AS
SELECT emp_id, emp_name, department
FROM employees
WHERE status = 'ACTIVE';

๐Ÿ“„ MATERIALIZED VIEW ์˜ˆ์‹œ

CREATE MATERIALIZED VIEW sales_summary AS
SELECT product_id, SUM(quantity) AS total_qty, SUM(price) AS total_price
FROM sales
GROUP BY product_id
WITH DATA;

-- ๋ฐ์ดํ„ฐ ์—…๋ฐ์ดํŠธ ํ›„
REFRESH MATERIALIZED VIEW sales_summary;

๐Ÿ”Ž ์ฃผ์˜ ํฌ์ธํŠธ

1๏ธโƒฃ MariaDB์—์„œ MATERIALIZED VIEW์˜ ์ง€์›

โœ”๏ธ MariaDB์—์„œ MATERIALIZED VIEW๋Š” 10.6 ๋ฒ„์ „ ์ดํ›„๋ถ€ํ„ฐ ๊ณต์‹ ์ง€์›์€ ๋งž์ง€๋งŒ, Oracle์ด๋‚˜ PostgreSQL์ฒ˜๋Ÿผ โ€œ์ž๋™ REFRESH ์˜ต์…˜โ€์€ ์•„์ง ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค.

MariaDB์—์„œ๋Š” ์ˆ˜๋™์œผ๋กœ REFRESH๋ฅผ ํ•ด์ค˜์•ผ ํ•œ๋‹ค๋Š” ์ ์ด ํ•ญ์ƒ ์ค‘์š”ํ•˜๊ณ , ์‹ค๋ฌด์—์„œ๋Š” ์ด๋ฅผ ์Šค์ผ€์ค„๋Ÿฌ(CRON)๋‚˜ EVENT๋กœ ๊ด€๋ฆฌํ•˜๋Š” ์ผ€์ด์Šค๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.

๐Ÿ’ก์ถ”๊ฐ€ ํŒ

CREATE MATERIALIZED VIEW ๋Š” ์•„์ง ์ผ๋ถ€ MariaDB์—์„œ๋Š”

CREATE TABLE + INSERT + ํŠธ๋ฆฌ๊ฑฐ

์กฐํ•ฉ์œผ๋กœ ๋Œ€์ฒดํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์—ฌ์ „ํžˆ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

MariaDB์—์„œ์˜ Materialized View ์‚ฌ์šฉ ์‹œ

์ฃผ์˜ํ•  ์ ์œผ๋กœ ๋ณ„๋„ ํŠธ๋ฆฌ๊ฑฐ ์ž๋™ํ™”๊ฐ€ ์•„์ง ๋ถ€์กฑ

ํ•˜๋‹ค๋Š” ๊ฒƒ, ์‹ค๋ฌด์—์„œ๋Š” ์Šค์ผ€์ค„๋ง ์„ค์ • ํ•„์ˆ˜!

โœ… ์ถ”๊ฐ€์ ์œผ๋กœ ์ถ”์ฒœํ•˜๋Š” ์‹ฌํ™” ๊ฐœ๋…

๐Ÿ“Œ WITH CHECK OPTION & SECURITY ์˜ต์…˜

์‹ค๋ฌด์—์„œ ๋ทฐ์˜ ๋ณด์•ˆ์„ฑ ๊ฐ•ํ™”ํ•  ๋•Œ, MariaDB์—์„œ๋Š” ๋‹ค์Œ ๋‘ ๊ฐ€์ง€ ์˜ต์…˜๋„ ์ž์ฃผ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค:

์˜ต์…˜ ์„ค๋ช…
WITH CHECK OPTION ๋ทฐ์— ์ •์˜๋œ WHERE ์กฐ๊ฑด์„ ๋ฐ˜๋“œ์‹œ ์ง€ํ‚ค๋„๋ก ํ•จ (๋ฌด๊ฒฐ์„ฑ ์œ ์ง€)
SQL SECURITY DEFINER/INVOKER ๋ทฐ ์‹คํ–‰ ์‹œ ๊ถŒํ•œ์„ ๋ทฐ ์†Œ์œ ์ž ๊ธฐ์ค€(Definer) or ์‹คํ–‰์ž ๊ธฐ์ค€(Invoker)์œผ๋กœ ๊ฒฐ์ • ๊ฐ€๋Šฅ โ†’ ๋ฏผ๊ฐ ์ •๋ณด ๋ณดํ˜ธ ์‹œ ์œ ์šฉ

โœ… 9. ๊ธฐ์ˆ  ์งˆ๋ฌธ & ๋‹ต๋ณ€

๊ธฐ์ˆ  ๋ฉด์ ‘์—์„œ๋Š” ์•„๋ž˜ ์งˆ๋ฌธ์ด ๋‚˜์˜ฌ ์ˆ˜ ์žˆ์–ด!

๋ฉด์ ‘์—์„œ ๋Œ€๋‹ตํ•  ์ˆ˜ ์žˆ๋„๋ก ์—ฐ์Šตํ•ด ๋ณด์ž!

Q1. VIEW๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”?

๐Ÿ“Œ ๋ทฐ(View)๋Š” ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜์ง€ ์•Š๊ณ , SELECT ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฐ€์ƒ์˜ ํ…Œ์ด๋ธ”์ž…๋‹ˆ๋‹ค.

์ฆ‰, ์›๋ณธ ํ…Œ์ด๋ธ”์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํŠน์ • ๋ฐ์ดํ„ฐ๋ฅผ ์‰ฝ๊ฒŒ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ค์–ด์ง„ ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.


Q2. VIEW์˜ ์žฅ์ ์€ ๋ฌด์—‡์ธ๊ฐ€์š”?

๐Ÿ“Œ 1๏ธโƒฃ ๋ณด์•ˆ ๊ฐ•ํ™” (๋ฏผ๊ฐํ•œ ์ •๋ณด ๋ณดํ˜ธ)

๐Ÿ“Œ 2๏ธโƒฃ ๋ณต์žกํ•œ ์ฟผ๋ฆฌ ๋‹จ์ˆœํ™” (JOIN, WHERE ์กฐ๊ฑด ๋ฏธ๋ฆฌ ์ •์˜)

๐Ÿ“Œ 3๏ธโƒฃ ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ ํ–ฅ์ƒ (๊ฐ€์งœ ํ…Œ์ด๋ธ”์ฒ˜๋Ÿผ ํ™œ์šฉ)

๐Ÿ“Œ 4๏ธโƒฃ ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ์œ ์ง€ (์›๋ณธ ํ…Œ์ด๋ธ” ๋ณ€๊ฒฝ ์—†์ด ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ)


Q3. VIEW์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

๐Ÿ“Œ ๋‹จ์ˆœํ•œ ๋ทฐ์—์„œ๋Š” INSERT, UPDATE, DELETE๊ฐ€ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ,

JOIN, GROUP BY, HAVING, DISTINCT์ด ํฌํ•จ๋œ ๊ฒฝ์šฐ์—๋Š” ์ฝ๊ธฐ ์ „์šฉ์ด ๋ฉ๋‹ˆ๋‹ค.


๐ŸŽฏ ์ตœ์ข… ์ •๋ฆฌ

๊ฐœ๋… ์„ค๋ช…
VIEW๋ž€? ๊ฐ€์ƒ์˜ ํ…Œ์ด๋ธ” (์‹ค์ œ ๋ฐ์ดํ„ฐ ์ €์žฅ X)
CREATE VIEW ๋ทฐ ์ƒ์„ฑ
SELECT FROM VIEW ๋ทฐ ๋ฐ์ดํ„ฐ ์กฐํšŒ
UPDATE VIEW ์ผ๋ถ€ ๋ทฐ์—์„œ ๊ฐ€๋Šฅ (๋‹จ์ˆœํ•œ ๋ทฐ๋งŒ)
DROP VIEW ๋ทฐ ์‚ญ์ œ