Oracle/개념

9장. VIEW(뷰)

2024. 6. 14. 15:42
728x90

VIEW란?

 말 그대로 내가 보는 입장에서 데이터를 활용하는 방법을 뷰라고 한다. table 개념으로 활용한다.

 

 

 

 

 

 


 

 

 

 

 

1. 단순 뷰 (Simple View)

 

 뷰를 만드려면 'CREATE VIEW' 형태로 만든다. 이때 권한이 필요하다. 그 전에 SCOTT에 뷰 권한을 줘야 한다.

SCOTT> CONN / AS SYSDBA;
SYS> GRAND CREATE VIEW TO scott;

 

 

기본적인 것들은 'READ'만 하는 것이 일반적이지만, 아주 예외적인 경우에 'WRITE + READ'를 할 수 있다.

CREATE [OR REPLACE] [FORCE | NOFORCE] VIEW 뷰 [(별칭, 별칭, ···)]
AS 서브쿼리
[WITH CHECK OPTION [CONSTRAINT 제약조건]]
[WITH READ ONLY]
  • OR REPLACE: 같은 이름의 View가 있을 경우 삭제 후 다시 생성한다.
    CREATE OR REPLACE할 경우 보통 에러가 나지만, VIEW는 삭제 후 다시 생성한다.
  • FORCE : 기본 테이블의 존재 여부에 상관없이 View를 생성한다. 강제로 생성한다.
  • NOFORCE : 기본 테이블이 존재할 경우에만 View를 생성한다. 정석이다.
    일반적으로 기본 테이블이 존재한다. VIEW 앞의 내용을 생략했을 경우 NOFORCE가 기본 값이다.
  • ALIAS : 기본 테이블의 칼럼 이름과 다르게 지정한 View의 칼럼 이름을 지정한다.
  • WITH CHECK OPTION : 주어진 제약조건에 맞는 데이터만 입력 및 수정한다.
  • WITH READ ONLY : SELECT만 가능한 읽기 전용 뷰를 생성한다.

 

 

 

1) 일반 단순 뷰 생성하기

# 단순 뷰 생성
CREATE OR REPLACE VIEW view1
AS
    SELECT col1, col2, col3
    FROM table1;

SELECT * FROM view1;

# 인덱스는 생성이 되지 않는다.
# 생성 시 오류가 나타난다.
CREATE INDEX idx_view
ON view1(col1);
# ORA-01702: a view is not appropriate here

 

 

2) View를 통한 데이터 변경하기

 

 뷰는 원본을 link를 걸어서 사용한다. 카피 개념으로 생각하면 된다. 뷰에서 수정하면 원본의 내용도 수정되어야 한다. 그래서 대부분 View는 읽기 전용으로 써야 한다.

 

 

 

 

 


 

 

 

 

 

2. 복합 뷰 (Complex View)

 

CREATE OR REPLACE VIEW view1
AS
    SELECT t1.col1, t2.col2
    FROM table1 t1, table2 t2
    WHERE t1.col3 = t2.col3;

 

 

 그냥 View는 하나의 인덱스에서 데이터를 가져왔지만, 복합 뷰는 여러 인덱스를 조인해서 데이터를 가져온다.

 

 

 

 


 

 

 

 

 

3. Inline View (인라인 뷰)

 

인라인 뷰(Inline View)는 SQL에서 사용하는 서브쿼리(subquery)의 한 형태로, 주로 FROM 절 안에 사용되어 테이블처럼 동작한다. 일반적인 코드에서는 종속적인 함수 선언하지 않고 어떤 프로그램 안에 코드를 삽입해서 내장시킨다. 자주 호출이 된다 가정하고 선언하기 때문에 함수를 선언하지 않고 코드를 바로 적용시킨다.

 

SELECT 열1, 열2, ...
FROM (
    SELECT 서브쿼리_열1, 서브쿼리_열2, ···
    FROM 테이블
    WHERE 조건
) 인라인뷰_이름
WHERE 외부_조건;

 

 

 

 

 


 

 

 

 

 

4. View 조회 및 삭제하기

 

# 최대 문자 수 설정
SET line 숫자

# 컬럼의 출력 너비 설정
COL view_name for a숫자
COL text for a숫자
COL read_only for a숫자

# 뷰 조회
SELECT 컬럼1, 컬럼2, ···
FROM user_view;

# 뷰 삭제
DROP VIEW user_view;

 

 

 

 

 


 

 

 

 

 

5. Materialized View (MVIEW) - 구체화된 뷰

 

 실체화(materizlize)뷰라고 한다. 가상 뷰를 Data화한다. 실체화된 뷰도 가상 뷰의 데이터를 카피한 것이다. 가상 뷰는 데이터를 땡겨와서 사용 후 삭제하는 것이다.

 

 일반적인 뷰는 select 문을 사용하여 양이 줄어든 뷰이다. 가상적인 뷰이기 때문에 사용자의 요청에 따라 나타났다가 요청이 끝나면 사라진다. 사용자가 들어올 때 똑같은 요청을 하면 다시 뷰를 처리해서 값을 돌려준다. 이 작업을 똑같이 반복하기 때문에 비효율적이다.

 

 이때 해결 방법은 캐시를 사용하는 것이다. 한 번 읽어들인 값을 잘 보관해둔다. 자동으로 동기화시켜준다. 가상의 뷰가 메모리 상에 존재하게 된다.

 매번 뷰를 만들었다가는 지우는 작업을 하지 않고 똑같이 sql을 돌렸을 때 값을 돌려준다. 이때는 가상의 뷰를 만드는 것을 거치지 않고 마치 테이블에 바로 접근하는 것처럼 보인다. 그래서 여러 번의 반복적인 작업이 한 번의 작업으로 보인다.

 

 

 

일반 뷰의 경우

 

MVIEW의 경우

 

 

 

2) MVIEW 생성하기

 

MVIEW를 생성하기 위해서는 권한을 부여해야 한다.

CONN / AS SYSDBA;
GRANT query rewrite to scott;
GRANT create materialized view TO scott;
CONN scott/tiger;

 

CREATE MATERIALIZED VIEW 뷰
BUILD IMMEDIATE
REFRESH ON dEMAND
COMPLETE
ENABLE QUERY REWRITE
AS
SELECT 컬럼1, 컬럼2, ···
FROM 테이블;

# 인덱스 생성 가능함
CREATE INDEX idx_뷰
FROM 테이블;

'Oracle > 개념' 카테고리의 다른 글

11장. SEQUENCE(시퀀스)와 SYNONYM(동의어)  (0) 2024.06.15
10장. Sub Query (서브 쿼리)  (0) 2024.06.14
8장. INDEX (인덱스)  (1) 2024.06.14
7장. Constraint(제약조건)  (0) 2024.06.13
6장. DML 데이터 관리  (0) 2024.06.13