SQL/ORACLE SQL

VIEW : 뷰

HicKee 2022. 11. 10. 16:22

VIEW (뷰)


하나 이상의 물리적인 테이블을 근거한 논리적인 가상 테이블 (메모리)
저장 장치 내에 물리적으로 존재하지 않는 다 (디스크 저장 공간이 할당되지 않음)

 

사용법

CREATE OR REPLACE  VIEW [VIEWNAME] AS [SUBQUERY]
[WITH CHECK OPTION]
[WITH READ ONLY]

VIEW를 사용하기 위해서는 권한이 필요하다 
VIEW 권한 부여 (SYSTEM(관리자) 계정으로 부여)

GRANT CREATE VIEW TO [사용자 계정];

VIEW는 테이블 수에 따라 단순 뷰(simple view), 복합 뷰(complex view)로 나뉨

VIEW는 보안과 사용의 편의성 때문 사용됨

보안을 위한 뷰 (예제)

CREATE VIEW V_EMP_SAMPLE
AS
SELECT ENO,ENAME,JOB,MANAGER,DNO
FROM EMPLOYEE;

정보를 손쉽게 얻기 위한 뷰 (예제)

CREATE VIEW V_EMP_COMPLEX2
AS
SELECT E.ENO,E.ENAME,E.SALARY,DNO,D.DNAME,D.LOC
FROM EMPLOYEE E NATURAL JOIN DEPARTMENT D;

 

VIEW는 데이터를 저장하고 있지 않은 가상 테이블 실체가 없음
VIEW를 정의할 때 CREAT VIEW 명령어 다음 AS절에 기술한 쿼리 문장 자체를 저장했다가 이를 실행

(CASH와 흡사함 >> CASH는 물리적으로 저장 VIEW는 메모리에 저장 )

 

뷰에 그룹 함수 사용 (별칭 사용)
별칭을 칼럼명처럼 사용할 수 있음

CREATE VIEW V_EMP_SALARY2
AS
SELECT DNO AS "부서명" ,SUM(SALARY) AS "SAL_SUM", AVG(SALARY) AS "SAL_AVG"
FROM EMPLOYEE
GROUP BY DNO;
SELECT 부서명,SAL_SUM,SAL_AVG
FROM V_EMP_SALARY2;
CREATE VIEW V_EMP_SALARY
AS
SELECT DNO 부서명 ,SUM(SALARY) AS "급여합계", ROUND(AVG(SALARY)) AS "급여평균"
FROM EMPLOYEE
GROUP BY DNO;
SELECT 부서명,급여합계,급여평균
FROM V_EMP_SALARY;

뷰를 이용해 정보 보기

SELECT * FROM V_EMP_SALARY ORDER BY DNO;
SELECT DNO,급여합계,급여평균 FROM V_EMP_SALARY ORDER BY DNO;

뷰가 더 이상 필요 없을 때는 삭제

DROP VIEW [뷰 이름]

뷰는 가상 테이블이기 때문에 뷰를 삭제한다는 것은 USER_VIEWS 데이터 딕셔너리에 저장된 것을 삭제한다는 뜻이다
뷰를 삭제해도 실제 테이블에 영향을 주지 않는 다

CREATE OR REPLACE VIEW 

 - 이미 존재하는 뷰에 대해서 그 내용을 새롭게 변경하여 생성

FORCE

 - 기본 테이블의 존재 여부와 상관없이 뷰 생성

WITH CHECK OPTION

- 해당 뷰를 통해서 볼 수 있는 범위 내에서만 UPDATE, INSERT가 가능

WITH READ ONLY

 - 해당 뷰를 통해서는 SELECT만 가능 INSERT, UPDATE , DELETE 할 수 없음
 - 이것을 생략한다면 INSERT, UPDATE , DELETE 모두 가능