- 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 테이블을 사용하여 학과별로 학생들의 최대키와 최대 몸무게, 학과이름 출력.
- 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 |
댓글