ORACLE VIEW
뷰의 정의
물리적인 테이블을 근거한 논리적인 가상 테이블
뷰를 왜 쓰는가?
특정 중요 데이터를 뽑으려고 할때 기존에 있는 테이블을 복사 하는게 아니라 가상테이블 뷰 VIEW를 이용하면 됨
테이블은 데이터가 있지만 뷰는 데이터가 없음(SQL만 저장)
뷰의 장점
복잡하고 긴 쿼리문을 뷰로 정의하면 접근 단순화 가능
뷰는 물리적으로 데이터를 저장하지 않고 CREATE VIEW명령어로 뷰를 정의할때 AS절 다음에 기술한 쿼리 문장 자체를 저장함
단순 뷰 , 복합 뷰
단순 뷰 |
복합 뷰 |
하나의 테이블로 생성 |
여러개의 테이블로 생성 |
그룹함수 사용이 불가능 |
그룹 함수의 사용이 가능 |
DISTINCT 사용 불가능 |
DISTINCT 사용이 가능 |
DML(INSERT,UPDATE,DELETE) 사용이 가능 | DML사용이 불가능 |
예 1) 뷰를 생성할 수 있는 권한을 부여한다.
SQL> CONN system/[사용자 암호]
SQL> GRANT CREATE VIEW TO scott;
SQL> CONN scott/[사용자 암호]
SQL> CREATE VIEW EMP_VIEW30 AS SELECT EMPNO, ENAME, DEPTNO FROM EMP_COPY WHERE DEPTNO=30;
예 2) 뷰의 생성을 확인한다.
SQL> SELECT * FROM EMP_VIEW30;
예 3) USER_VIEWS 데이터 딕셔너리를 확인한다.
SQL> COLUMN VIEW_NAME FORMAT A15
SQL> COLUMN TEXT FORMAT A50
SQL> SELECT VIEW_NAME, TEXT FROM USER_VIEWS;
예 4) EMP_VIEW30 뷰에 데이터를 추가
SQL> INSERT INTO EMP_VIEW30 VALUES(8000, 'ANGEL', 30);
SQL> SELECT * FROM EMP_VIEW30;
예 5) EMP_VIEW30 뷰의 기본 테이블인 EMP_COPY 테이블을 확인
SQL> SELECT * FROM EMP_COPY;
복합 뷰
예 1) 사원 테이블과 부서 테이블을 조인하여 복합 뷰를 생성한다
CREATE VIEW EMP_VIEW_DEPT AS SELECT E.EMPNO, E.ENAME, E.SAL, E.DEPTNO, D.DNAME, D.LOC FROM EMP E, DEPT D WHERE E.DEPTNO=D.DEPTNO ORDER BY EMPNO DESC;
예 2) 뷰를 생성한 후, 아래의 명령문을 활용하면, 복잡한 질의를 쉽게 처리 할 수 있다.
SELECT * FROM EMP_VIEW_DEPT;