View ๋?
View๋ ์ ์ฅ๋ SELECT ๋ฌธ์ด๋ค.
์ค๋ผํด์๋ ํ ์ด๋ธ๋ง๊ณ ๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด ์ฌ ์ ์๋ ์ค๋ธ์ ํธ๊ฐ ์์ต๋๋ค. FROM์ ์์ ์ฌ์ฉํ ์ ์๋ ๊ฒ์ ํ ์ด๋ธ๋ง์ด ์๋๋ผ๋ ๊ฒ์ ๋๋ค. ๋ํ์ ์ผ๋ก View๋ผ๋ ์ค๋ผํด ์ค๋ธ์ ํธ๋ฅผ ์ด์ฉํด์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ ์ ์๊ณ ์ค์ ๋ก ํ์ ์์๋ ๋ง์ด ์ฌ์ฉ๋๋ ์ค๋ธ์ ํธ์ ๋๋ค. ๊ทธ๋ผ View๋ ๋ฌด์์ด๊ณ ์ ์ฌ์ฉํ๋ ๊ฒ ์ผ๊น์?
"View๋ ์ ์ฅ๋ SELECT ๋ฌธ"์ด๋ผ๊ณ ํํํ์ต๋๋ค. ์ฌ์ ์ ์๋ฏธ๋ก "๋ฐ์ดํฐ์ ๋ ผ๋ฆฌ์ ๋ถ๋ถ์งํฉ"์ด๋ผ๊ณ ํ๋๋ฐ์, ์ค์ง์ ์ผ๋ก View๋ฅผ SELECT๋ฌธ์ ์ด์ฉํด์ ์์ฑํ๊ธฐ ๋๋ฌธ์ ์์ ๊ฐ์ด ํํํ์ต๋๋ค. ๊ทธ๋ผ ๋ฐ์ดํฐ์ ๋ ผ๋ฆฌ์ ๋ถ๋ถ์งํฉ์ด๋ผ๋๊ฒ ๋ฌด์์ผ๊น์?
๋ฐ์ดํฐ์ ๋ ผ๋ฆฌ์ ๋ถ๋ถ์งํฉ?
๋ฐ์ดํฐ์ ๋ ผ๋ฆฌ์ ๋ถ๋ถ์งํฉ์ด๋ ๊ฒ์ ๋ฌผ๋ฆฌ์ ์ผ๋ก ์กด์ฌํ์ง ์๋ ํ ์ด๋ธ์ ๋งํฉ๋๋ค. ํํ์ ํ์๋ฉด ์ฐฝ๋ฌธ์ ํตํด์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ผ๋ณด๋ ๊ฒ์ ๋๋ค. ์ค์ ํ ์ด๋ธ์ด ์๋ค๋ฉด ํ ์ด๋ธ์ SELECT๋ฌธ์ ํตํด์ ํ, ์ด์ ์ ๊ฑฐํ๊ฑฐ๋ ํ ์ด๋ธ๋ค์ JOIN ์์ผ 1์ฐจ๋ก ๊ฐ๊ณต๋ ๋ฐ์ดํฐ๋ฅผ View๋ผ๋ ์ฐฝ๋ฌธ์ ํตํด์ ์กฐํํ๋ ๊ฒ ์ ๋๋ค. ๊ทธ๋ฅ ํ ์ด๋ธ์ ์กฐํํด๋ ๋ ํ ๋ฐ ๊ทธ๋ผ ์ ์ด๋ฐ VIEW๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ผ๊น์?
VIEW ์ ์ฌ์ฉํ ๊น?
๋ณด์๊ฐํ์ Query์ ๋จ์ํ. ๋๊ฐ์ง ์ด์ ๋ก VIEW๋ฅผ ์ฌ์ฉํฉ๋๋ค.
1. ๋ณด์ ๊ฐํ
์๋ฅผ๋ค์ด 20๋ฒ ๋ถ์ ์ฌ์์ ๋ํ ์ ๋ณด๋ฅผ 20๋ฒ ๋ถ์์ฅ์๊ฒ ํ์ธํ ์ ์๋ ๊ถํ์ ์ฃผ๋ ค๊ณ ํฉ๋๋ค. ์ด๋ ํ ์ด๋ธ ์ ์ฒด์ ๋ํ ๊ถํ์ ์ค๋ ์๊ด์์ง๋ง, ๋ค๋ฅธ ๋ถ์์ฌ์๋ค์ ์ ๋ณด๋ฅผ ์ ๊ณตํ๊ฑฐ๋ ๊ธ์ฌ์ฒ๋ผ ๊ฐ์ธ์ ์ธ ์ ๋ณด๋ฅผ ๊ฐ์ด ๋ณด์ฌ์ค ํ์๊ฐ ์์ต๋๋ค. ์ด๋ด๋ ์ฌ์ฉ์์๊ฒ ๊ผญ ํ์ํ ์ ๋ณด๋ง ์ ๊ณตํ๋๋ก ์ฟผ๋ฆฌ๋ฌธ์ ์์ฑํ์ฌ VIEW๋ฅผ ์์ฑํ๊ณ , ํด๋น VIEW์ ๋ํด READ ํ ์ ์๋ ๊ถํ์ ๋ถ์ฌํด ์ค๋ค๋ฉด ๋ณด์์ ์ธ ์ธก๋ฉด์ ๊ฐํ ์ํฌ ์ ์์ต๋๋ค. ๋ฐ์ดํฐ์ Access๋ฅผ ์ ํํ๊ณ ๋์ธํ ๋ฐ์ดํฐ์ ๋ค๋ฅธ ๋ทฐ๋ฅผ ์ ๊ณตํ์ฌ ๋ฐ์ดํฐ์ ๋ ๋ฆฝ์ฑ์ ์ ๊ณตํ ์ ์์ต๋๋ค.
2. Query ๋จ์ํ
๋ณด์์ ์ธ ์ธก๋ฉด์ ๊ฐํํ๋ ๊ฒ ๋ฟ๋ง ์๋๋ผ, Query๋ฅผ ๋จ์ํ ์์ผ ๊ฐ๋ ์ฑ์ ๋์ผ ์ ์์ต๋๋ค. ์์ ์์์์๋ ํ๋์ ํ ์ด๋ธ๊ณผ ์กฐ์ธ์ ์์ผฐ์ง๋ง, ๋ค์์ ํ ์ด๋ธ์ ์กฐ์ธ์ํค๊ณ SubQuery๊น์ง ์จ๊ฐ๋ฉด์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ค์ผํ๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค. ์ฌ๊ธฐ์ ์ฌ์ฉ์๋ ํ๋ฉด์ผ๋ก ์ถ๋ ฅ๋ ๊ฒฐ๊ณผ๋ง ๋ณด๋ ์ฌ์ฉ์๊ฐ ์๋๋ผ ๊ฐ์ด ์ผ์ ํ๋ ๋๋ฃ๋ ํ๋ ฅ์ ์ฒด, ๊ฐ๋ฐ์ ๋ฑ ์ฟผ๋ฆฌ๋ฅผ ์ง์ ๋ณด๊ณ ์์ ์ ํด์ผํ๋ ์ฌ์ฉ์๋ผ๋ฉด ํด๋น ์คํค๋ง์ ํ ์ด๋ธ์ ๋ํ ์ดํด๋ ํ์ํ๊ณ Query ๋ถ์์๋ ์๊ฐ์ ํฌ์ํด์ผํฉ๋๋ค. ์ด๋ฌํ ๊ฒฝ์ฐ ๋ช ์นญ ๋ง์ผ๋ก ์ด๋ค ๋ฐ์ดํฐ์ธ์ง ์ ์ ์๋ VIEW๋ฅผ ์์ฑํ์ฌ ์ ๊ณตํ๋ฉด ๋จ์ํ๋ ์ฟผ๋ฆฌ๋ก ์์ ์๊ฐ๋ ๋จ์ถ ์ํฌ ์ ์์ต๋๋ค.
View Performance
View๋ฅผ ์ฌ์ฉํ๋ฉด ๋ช๊ฐ์ง ์ด์ ์ ์ป์ ์ ์๋๋ฐ ๊ทธ๋ ๋ค๋ฉด Performance์ ์ธ ์ฑ๋ฅ ์ธก๋ฉด์์๋ ์ด๋จ๊น์?
View ์์ฑ์ ์ฌ์ฉ๋ SELECT๋ฌธ์ ๊ทธ๋๋ก ์ด์ฉํ๊ธฐ ๋๋ฌธ์ ํฐ ์ฐจ์ด๋ ์์ต๋๋ค.
๋ค๋ง, View ์์ฑ์ force ์ต์ ์ ์ฌ์ฉํ๋ฉด ์ฟผ๋ฆฌ ์ปดํ์ผํ์ง ์๊ณ View๊ฐ ์์ฑ๋๊ธฐ ๋๋ฌธ์ ์ปดํ์ผ ๋จ๊ณ๋ฅผ ๊ฑด๋๋ฐ์ด ๋ฏธ์ธํ๊ฒ ๋น ๋ฅผ ์๋ ์์ต๋๋ค. View๋ Performance๋ฅผ ๋์ด๊ธฐ ์ํด ์ฌ์ฉ๋์ง ์์ต๋๋ค.
View ์์ฑ
CREATE ์๋ต๊ฐ๋ฅ[OR REPLACE] ์๋ต๊ฐ๋ฅ[FORCE | NOFORCE] VIEW ๋ทฐ๋ช
AS (SELECT๋ฌธ)
์๋ต๊ฐ๋ฅ[WITH CHECK OPTION ์๋ต๊ฐ๋ฅ[CONSTRAINT ์ ์ฝ์กฐ๊ฑด๋ช ]]
์๋ต๊ฐ๋ฅ[WITH READ ONLY ์๋ต๊ฐ๋ฅ[CONSTRAINT ์ ์ฝ์กฐ๊ฑด๋ช ]]
View ์์ฑ ์์ ๋ Oracle Scott ๊ณ์ ์ผ๋ก ์งํํ์ต๋๋ค.
1
|
GRANT CREATE VIEWS TO SCOTT;
|
SCOTT ๊ณ์ ์ VIEW๋ฅผ ์์ฑํ๋ ๊ถํ์ด ์๋ค๋ฉด DBA๊ถํ์ ๊ณ์ ์์ ๊ถํ์ ๋ถ์ฌํด์ค๋๋ค.
20๋ฒ ๋ถ์์ ๋ํ ์ ๋ณด๋ด์ VIEW๋ฅผ ์์ฑํ๊ฒ ์ต๋๋ค.
1
2
3
4
5
6
7
8
9
10
|
CREATE OR REPLACE VIEW EMP_DEPT20
AS
SELECT
EMPNO
,ENAME
,JOB
,SAL
,DEPTNO
FROM EMP
WHERE DEPTNO = 20;
|
1
|
SELECT * FROM EMP_DEPT20;
|
FROM ์ ์์ ํ ์ด๋ธ ๋์ VIEW ๋ช ์นญ์ผ๋ก ๋ฐ์ดํฐ ์กฐํ๊ฐ ๊ฐ๋ฅํฉ๋๋ค. WHERE ์ ์ ์ฌ์ฉํ์ฌ ์ถ๊ฐ์ ์ธ ์กฐ๊ฑด์ ๊ฑธ์ด ์ค ์๋ ์๋ ORDER BY๋ฌธ์ผ๋ก ์ ๋ ฌ๋ ๊ฐ๋ฅํฉ๋๋ค.
DATA DICTIONARY ํ์ธ
1
2
3
4
|
SELECT
VIEW_NAME
,TEXT
FROM USER_VIEWS;
|
Data Dictionary๋ฅผ ํตํด ํ์ธํด๋ณด๋ฉด TEXT ์นผ๋ผ์ View๋ฅผ ์์ฑํ ๋ ์ฌ์ฉํ SELECT๋ฌธ์ด ๊ฐ์ด ์ ์ฅ๋ฉ๋๋ค.
MAIN QUERY์์ SELECT ๋ฌธ์ด ์คํ๋์์๋ FROM์ ์ ํ ์ด๋ธ์ด ์๋๋ผ๋ ๊ฒ์ ํ์ธํ๊ณ VIEW๋ก ๊ฒ์์ ํฉ๋๋ค. ๊ทธ ์ดํ FROM์ ์ ์ ์ฅ๋์ด ์๋ SELECT๋ฌธ์ผ๋ก ์คํ์ด ๋ฉ๋๋ค.
VIEW ์ญ์
VIEW์ ์ญ์ ๋ DROP ๋ช ๋ น์ ํตํด์ ํ ์ ์์ต๋๋ค.
1
|
DROP VIEW EMP_DEPT20;
|
VIEW ์์
VIEW ์ค๋ธ์ ํธ๋ ALTER ๋ช ๋ น์ด ์์ต๋๋ค. ๊ทธ๋์ DROP ์ดํ ๋ค์ ์์ฑํด์ ๋ค์ ๋ง๋ค ์๋ ์๊ฒ ์ง๋ง.... VIEW๋ ์์ฑ์ OR REPLACE ์ต์ ์ ์ถ๊ฐํ์ฌ ์๋ก ๋ณ๊ฒฝํ์ฌ ์์ฑํ๋ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค.
DROP์ ํ๊ฒ ๋๋ฉด ORACLE ๊ฐ์ฒด๊ฐ ์ฌ๋ผ์ง๋๊น ๊ถํ๊น์ง ์ญ์ ๋ฉ๋๋ค. OR REPLACE๋ก ์๋ก ์์ฑํ๋ฉด ๊ถํ ๊ทธ๋๋ก ๋จ์ ์๊ณ ํด๋น SELECT๋ฌธ๋ง ๋ณ๊ฒฝ๋ฉ๋๋ค.
์ค์ ์ด์๋๋ ์๋น์ค์์ VIEW๋ฅผ ์ฌ์ฉํ๊ณ ์๋๋ฐ VIEW์ SELECT ๋ฌธ์ ๋ณ๊ฒฝ์ด ํ์ํ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค. ์ด๋ DROP์ ํตํด ์ญ์ ํ ์์ฑํ๋ฉด ๋ค์ ๊ถํ์ ๋ถ์ฌํด์ผํ๋ ๋ฒ๊ฑฐ๋ก์์ด ์์ต๋๋ค.
VIEW ์์ฑ ์ต์
OR REPLACE
๋ทฐ๊ฐ ์กด์ฌํ๋ฉด ๋ค์ ์์ฑํฉ๋๋ค. ์ด๋ ๋ทฐ์ ๊ถํ์ ์ ์ง๋ฉ๋๋ค.
FORCE | NO FORCE(Default)
FORCE์ NO FORCE ์ต์ ์ ์ค์ ๋ก ํ๋ก์ ํธ์์ ๋ง์ด ์ฌ์ฉ๋๋ ์ต์ ์ ๋๋ค.
์ค๊ณ๋ฅผํ๋ ์ฌ๋๊ณผ ํ ์ด๋ธ์ ๋ง๋๋ ์ฌ๋์ ์ค์ ๋ถ๋ฆฌ๋์ด์๊ธฐ ๋๋ฌธ์ ์ค๊ณ๋ฅผ ํ๋ ์ชฝ์์ ๋ฏธ๋ฆฌ ํ ์ด๋ธ ์ ์์๋ฅผ ํ์ธํ๊ณ VIEW๋ฅผ ๋ง๋ค์ด ๋๊ธฐ ์ํด FORCE ์ต์ ์ ์ฌ์ฉํด์ ํ ์ด๋ธ์ด ๊ตฌ์ถ๋๊ธฐ ์ด์ ์ ์์ฑํฉ๋๋ค.
FORCE
VIEW๋ฅผ ์์ฑํ ๋ ์ฟผ๋ฆฌ ์ปดํ์ผํ์ง ์๊ณ ๋ง๋ญ๋๋ค.
NO FORCE
VIEW๋ฅผ ์์ฑํ ๋ ์ฟผ๋ฆฌ ์ปดํ์ผ์ ์งํํฉ๋๋ค. (๊ธฐ๋ณธ๊ฐ)
WITH CHECK OPTION
DML ์์ ์ด ๋ทฐ ์์ญ์๋ง ์ ์ฉ๋๋๋ก ํ ์ ์์ต๋๋ค. ์ฆ, ํ๋ฒ ์์ฑ๋ ๋ทฐ์์ ๋ฐ์ดํฐ์ ๋ณ๊ฒฝ์ด ์๋๋ก VIEW ๋จ์์ CRUD๊ฐ ๋ถ๊ฐ๋ฅํฉ๋๋ค.
WITH READ ONLY
DML ์์ ์ ๋ชปํ๊ฒํ๋ ์ต์ ์ ๋๋ค.
๋๊ธ