[Oracle] 뷰(View) 간단 정리
뷰(View)
- 하나의 가상 테이블이다.
- 데이터를 편하게 보기 위해서 기존의 테이블을 이용해 결과를 묶어 생성한다.
- 실제 저장 되는 것이 아니지만 뷰를 통해서 관리까지 가능하다.
그렇다면 이런 가상 테이블을 만들어서 관리하는 이유는 무엇일까?
1. 보안강화
2. 쿼리 단순화
1. 보안강화의 이유
경리팀에서 급여계산을 하려고 할 때 영업직원들에 대한 실직은 영업팀에서만 갖고있다. 영업팀에서는 모든 정보를 보여 줄 필요가 없으니 경리팀에서 필요한 정보만 모아 보여주기 위해서 뷰(View)를 사용한다.
2. 쿼리 단순화
한방 쿼리(한 줄로 정보를 뽑아내는 것)를 하려고 했지만 되지 않을 때, 기준으로 잡고 있는 테이블의 양이 너무나 방대할 때 정보들을 걸러내고 한 번에 뜰 수 있도록 단순화를 시킨다.
기본문법
CREATE [OR REPLACE] [FORCE | NOFORCE] VIEW 뷰명 AS (SUB QUERY-SELECT문)
[WITH CHECK OPTION [CONSTRAINT 제약조건명]]
[WITH READ ONLY]
- SUB QUERY : 뷰를 생성할 조회(SELECT)문을 나타냄
- WITH CHECK OPTION : 조건식에 만족하는 데이터만 INSERT, UPDATE 가능
- WITH READ ONLY : SELECT만 가능한 뷰를 생성
- FORCE : 뷰를 생성할 기준 테이블이 존재하지 않아도 강제로 뷰를 만듦!
뷰를 위한 데이터 사전 뷰
DBA_VIEWS, USER_VIEWS, ALL_VIEWS
- USER_VIEWS : 현재 사용자가 가지고 있는 뷰의 조회에 사용
- ALL_VIEWS : 현재 사용자가 액세스 할 수 있는 모든 뷰의 조회에 사용
뷰 생성 예시
--뷰(VIEW) 만들어보자
--2021년 급여일인 사원들의 정보들을 뷰 테이블로 옮기는 작업
--사원번호, 사원명, 직급, 급여, 보너스, 부서명
CREATE OR REPLACE VIEW V_EMP
AS
--사원번호, 사원명, 직급, 급여, 보너스, 부서명
SELECT E.EMPNO, E.ENAME, E.JOB, S.SAL, S.COMM, D.DNAME
FROM EMP E, SALARY S, DEPT D
WHERE E.EMPNO = S.EMPNO
AND S.SALDATE = '202110'
AND E.DEPTNO = D.DEPTNO;
SELECT *
FROM V_EMP; --VIEW도 조회 가능
기존 테이블을 이용해서 뷰를 생성하면 아래처럼 뷰 테이블 창에 그대로 복사가 된다