Specialty/Oracle

뷰 (View) 란 무엇인가~??

cailisin 2015. 3. 18. 11:07


뷰 (View) 란 무엇인가~??



-- Last Update : 2015.03.18



-- 단순 뷰 (Simple View), 복합 뷰 (Complex View), 인라인 뷰 (Inline View) 에 대해서만 기술

-- 구체화된 뷰 (Materialized View) 는 간단한 소개만 (추후 별도 포스팅)

-- 잘못된 내용은 댓글 달아 주시면 수정 하도록 하겠습니다 ^^



간단히 말해서 필요한 내용만 뽑아서 사용하는것을 뷰 (View) 라고 볼 수 있다.

주로 데이터를 조회하는데 가장 많이 사용한다.

그런데 뷰 (View) 는 Read Only 명령을 주지 않을 경우 Insert 도 가능하다~(!!)

(나도 공부하기 전에는 몰랐던 생각하지 않던(?) 단순한 사실;)


■ 문법 (Syntax)

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

AS sub-query

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

[ WITH READ ONLY ]


-- OR REPLACE  :  같은 이름의 View가 존재하면 새로 만드는 옵션

-- FORCE  :  테이블 (Table) 가 없어도 뷰 (View) 를 만드는 옵션

-- NOFORCE  :  테이블 (Table) 가 있으면 뷰 (View) 를 만드는 옵션

-- ALIAS  :  뷰 (View) 의 컬럼 이름을 정하는 옵션

-- WITH CHECK OPTION  :  제약조건에 맞는것만 수정을 할 수 있도록 하는 옵션

-- WITH READ ONLY  :  SELECT 만 가능하도록 하는 옵션



■ 뷰 (View) 생성 권한 주기 - / as sysdba 로 권한 부여 할 것~!

SQL> GRANT CREATE VIEW TO scott;


■ M 뷰 (M View) 생성 권한 주기 - / as sysdba 로 권한 부여 할 것~!

SQL> GRANT query rewrite TO scott;

SQL> GRANT create materialized view TO scott;




1. 단순 뷰 (Simple View)




테이블 (Table) 에서 필요한 부분만 뽑아온(?)것을 단순 뷰 (Simple View) 라고 한다.


■ 예제 테이블 (Table) 생성

CREATE TABLE a_table ( a1 NUMBER, a2 NUMBER, a3 NUMBER);


INSERT INTO a_table VALUES (1, 1, 1);

INSERT INTO a_table VALUES (2, 2, 2);

INSERT INTO a_table VALUES (3, 3, 3);





■ 단순 뷰 (Simple View) 생성

CREATE OR REPLACE VIEW a_view1

AS

SELECT a1, a2

FROM a_table;


■ 단순 뷰 (Simple View) 조회

SELECT * FROM a_view1;






2. 복합 뷰 (Complex View)




여러 테이블 (Table) 이 조인 (Join) 되어 만든 뷰 (View) 를 복합 뷰 라고한다.


■ 예제 테이블 (Table) 생성

CREATE TABLE b_table(b1 NUMBER, b2 VARCHAR2(10));


INSERT INTO b_table VALUES (1, 'one');

INSERT INTO b_table VALUES (2, 'two');

INSERT INTO b_table VALUES (3, 'three');





■ 복합 뷰 (Complex View) 생성

CREATE OR REPLACE VIEW a_view2

AS

SELECT a.a1, b.b2

FROM a_table a, b_table b

WHERE a.a1 = b.b1;


■ 복합 뷰 (Complex View) 조회

SELECT * FROM a_view2;






3. 인라인 뷰 (Inline View)




일반적으로 가장 많이 사용한다.

쉽게 설명하면 FROM 절 안에 SQL 문장이 들어가는 것을 인라인 뷰 (Inline View) 라고 볼 수 있다.



ps. 실제로 아래처럼 SQL 짜진 않겠지만 인라인 뷰의 예를 위해서 작성하였습니다.

    아직 공부하는 학생(?) 입니다~ ㅋ


■ 인라인 뷰 (Inline View) 조회

SELECT a.a1, b.b2

FROM a_table a, (SELECT b1, b2

                    FROM b_table) b

WHERE a.a1 = b.b1;






4. 구체화된 뷰 (Materialized View)  /  (M View)




구체화된 뷰는 이번 포스팅에서 간단히 소개만 하겠다. (추후 별도 포스팅~!!)

M View 는 구현보다도 구조적인면의 이해가 필요하다.


대부분의 뷰 (View) 가 원본 테이블 (Table) 에서 정보를 보여준다.

하지만 M 뷰 (M View) 는 하나의 테이블 (Table) 처럼 동작을 한다.


그래서 원본 테이블 (Table) 이 변경되었을 때 M View 는 별도의 공간(?)을 사용하기 때문에 참조하는 테이블 (Table) 과 각각 별도의 정보를 보관하게 되는 것이다.

그렇기 때문에 M 뷰 (M View) 는 참조하는 테이블 (Table) 과 동기화 시키는 것이 관건인(?) 뷰 (View) 이다.

대용량DB (몇 천 or 몇 억 건??) 의 경우에는 M 뷰 (M View) 를 매우 많이 사용한다고 한다.