본문 바로가기
oracle/[SQL] SQL

10장. VIEW

by #moonyz 2014. 10. 7.

- VIEW : 가상의 테이블

- 테이블에는 원래 데이터가 들어있지만 View에는 데이터가 없고 SQL 만 저장되어 있다.

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

- 뷰에는 제약조건이나 인덱스 등을 생성 할 수 없음 (아무런 데이터가 없기 때문에)

- 뷰를 조회하는 쿼리의 성능이 느릴경우 원본 테이블에 인덱스를 점검해야함.

- 조회용으로 많이 사용되지만 데이터를 변경할 수도 있음 


- 사용하는 이유

① 보안

   - 해당 테이블에 접근하면 안되는 컬럼이 있을 경우 직접 접근하지 못하도록.

   - 사용자가 뷰에 접근하는 순간에 원본 테이블에 가서 데이터를 가져오기 때문에 언제나 정확한 데이터에 접근 가능

② 사용자의 편의성

   - 조회를 위해 매번 여러개의 테이블을 조인해야 할 경우 뷰를 만들어 놓고 사용.

   - 뷰의 주요 용도는 조회하는 경우에 주로 사용





1. 단순 View (Simple View)

- 뷰를 생성할 서브쿼리에 조인 조건이 안들어가고 1개의 테이블로 만들어지는 간단한 뷰.

- View를 생성하기 위해서는 CREATE VIEW 라는 권한 필요 (SYS계정으로 권한 할당)


SYS > GRANT CREATE VIEW TO 사용자명


* 생성문법

CREATE [OR REPLACE] [FORCE | NOFORCE] VIEW 뷰이름 [ (alias, alias, ...) ] 

AS

서브쿼리 (select * from ~)

[WITH CHECK OPTION [CONSTRAINT 제약조건] ]

[WITH READ ONLY]


- OR REPLACE : 같은 이름의 뷰가 있을 경우 삭제 후 다시 생성

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

- NOFORCE : 기본 테이블이 존재할 경우에만 뷰 생성 (default)

- ALIAS : 기본 테이블의 칼럼 이름과 다르게 지정한 뷰의 칼럼이름 지정

- WITH CHECK OPTION : 주어진 제약조건에 맞는 데이터만 입력 및 수정을 허용

- WITH READ ONLY : select 만 가능한 읽기 전용 뷰 생성



2. 복합 View (Complex View)

- 서브쿼리 부분에 여러개의 테이블이 조인되어 생성되는 것

- 뷰 안에는 가급적 INTERSECT, MINUS, UNION 같은 집합연산자 사용하지 않아야 성능향상에 도움이 됨.



3. INLINE View (인라인 뷰)

- 해당 SQL에서만 필요한 뷰일 경우 뷰를 번거롭게 생성하지 않고 FROM절에 서브쿼리부분을 적어서 사용.


예제1. student 테이블과 department 테이블을 사용하여 학과별로 학생들의 최대키와 최대 몸무게, 학과이름 출력.



예제2. deptno 컬럼의 중복되는 항목을 제거하고 출력 (LAG함수, Inline view 이용)


- lag 함수를 사용하여 데이터를 한칸씩 뒤로 밀어내고 

- decode 함수를 이용하여 값이 다르면 deptno를 찍고 같으면 null을 찍는다.

  



4. View 조회 및 삭제

- USER_VIEWS : 사용자가 생성한 View 조회

- DBA_VIEWS : 모든 View 조회 (단, DBA 권한을 가지고 있어야 함)



5. Materialized View (MVIEW)

- 구체화 된 뷰 / 실체화 된 뷰

- 뷰에는 원래 데이터가 없지만 대용량 뷰일경우 Mview에 생성하여 내부에 저장하고 사용한다.

- 원본 테이블에 접근하지 않고 Mview에 있는 데이터로 반환하기 때문에 원본테이블과 Mview간의 동기화 문제발생.

- Mview를 생성하기 위해서는 QUERY REWRITE 권한과 CREATE MATERIALIZED VIEW권한 필요.

* 권한 주기 : QUERY REWRITE, CREATE MATERIALIZED VIEW


① MView 생성


② MView 관리







6. 뷰 연습문제

























'oracle > [SQL] SQL' 카테고리의 다른 글

12장. SEQUENCE(시퀀스) / SYNONYM(동의어)  (0) 2014.10.14
11장. Sub Query (서브쿼리)  (0) 2014.10.13
9장. 인덱스(Index)  (1) 2014.10.07
8장. 제약조건  (0) 2014.10.06
7장. DML  (0) 2014.10.06

댓글