뷰의 정의


물리적인 테이블을 근거한 논리적인 가상 테이블


뷰를 왜 쓰는가? 


특정 중요 데이터를 뽑으려고 할때 기존에 있는 테이블을 복사 하는게 아니라 가상테이블 뷰 VIEW를 이용하면 됨


테이블은 데이터가 있지만 뷰는 데이터가 없음(SQL만 저장)


사용자가 해당 VIEW에 접근하면, 그때 VIEW에 들어 있던 SQL이 수행되어 결과를 가져오는 것.


CREATE OR REPLACE VIEW 같은 이름의 VIEW가 있을 경우 삭제 후 다시 생성
FORCE 기본 테이블의 존재 여부에 상관없이 VIEW 생성
WITH CHECK OPTION 주어진 제약 조건에 맞는 데이터만 입력 및 수정
FOREIGN KEY SELECT만 가능한 읽기 전용 뷰를 생성


뷰의 장점


복잡하고 긴 쿼리문을 뷰로 정의하면 접근 단순화 가능


뷰는 물리적으로 데이터를 저장하지 않고 CREATE VIEW명령어로 뷰를 정의할때 AS절 다음에 기술한 쿼리 문장 자체를 저장함


단순 뷰 , 복합 뷰


 단순 뷰 

 복합 뷰 

 하나의 테이블로 생성

 여러개의 테이블로 생성

 그룹함수 사용이 불가능

 그룹 함수의 사용이 가능

 DISTINCT 사용 불가능

 DISTINCT 사용이 가능

 DML(INSERT,UPDATE,DELETE) 사용이 가능

 DML사용이 불가능



단순 뷰에서 DML명령어 사용이 불가능한 경우 : 뷰 정의에 포함되지 않은 컬럼 중에 기본 테이블의 칼럼이 NOT NULL 제약조건이 지정되어 있는 경우
 INSERT문 사용 불가능

-> 뷰에 대한 INSERT문은 기본 테이블에 NULL값을 입력하는 형태가 되기 때문

단순 뷰에서 DISTINCT를 포함한 경우에도 DML 명령 사용이 불가능, 그룹함수나 GROUP BY 절을 포함한 경우 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; 



+ Recent posts