개발 지식/[DBMS] Oracle

[Oracle] DDL(6) - 뷰(VIEW)

devGSP 2022. 6. 20. 08:00
반응형
이 게시물은 Database GUI Oracle SQL Developer의 아래 버전 정보를 기준으로 작성되었습니다.

Java(TM) 플랫폼 : 1.8.0_321
Oracle IDE : 4.1.5.21.78

 

뷰(VIEW)

 

개념

하나 이상의 테이블을 조회하는 SELECT문을 저장한 객체. 물리적 데이터를 따로 저장하지 않음. SELECT문의 FROM절에 사용하면 특정 테이블을 조회하는 것과 같은 효과를 얻을 수 있음.

 

 

장점

1. SELECT문의 복잡도를 완화하는 편리성

2. 테이블의 특정 열을 노출시키지 않는 보안성

 

 

뷰 생성 및 조회

 

뷰 생성 및 세부 문법 설명

 

CREATE [OR REPLACE] [FORCE | NOFORCEVIEW [뷰이름] [열이름1, 열이름2, ... 열이름N(선택)]
AS [저장할 SELECT문]
[WITH CHECK OPTION [CONSTRAINT 제약 조건]]
[WITH READ ONLY [CONSTRAINT 제약 조건]];


OR REPLACE : 같은 이름의 뷰가 이미 존재할 경우에 현재 생성할 뷰로 대체하여 생성(선택). 주로 뷰를 수정할 시 사용한다.


FORCE : 뷰가 저장할 SELECT문의 기반 테이블이 존재하지 않아도 강제로 생성(선택)
NOFORCE : 뷰가 저장할 SELECT문의 기반 테이블이 존재할 경우에만 생성(기본값)(선택)


열이름 : SELECT문에 명시된 이름 대신 사용할 열 이름 지정(생략 가능)(선택)


WITH CHECK OPTION : 지정한 제약 조건을 만족하는 데이터에 한해 DML 작업이 가능하도록 뷰 생성(선택)

제약 조건 포스트 링크 → 링크


WITH READ ONLY : 뷰의 열람, 즉 SELECT만 가능하도록 뷰 생성(선택)

 

 

뷰의 생성과 조회 예시

 

우선 뷰에 사용할 임시 테이블을 생성하고 SELECT문을 작성해 보자.

 

-- 임시 테이블 생성
CREATE TABLE EMP_V
    AS SELECT * FROM EMP WHERE ENAME = 'KING';

-- 데이터 확인
SELECT * FROM EMP_V;

view_1

 

다음은 위 SELECT 쿼리문으로 뷰를 생성해 보자.

 

-- 위의 SELECT문으로 뷰 생성
CREATE VIEW VW_EMP_V
    AS (SELECT * FROM EMP_V);
    
-- 뷰를 통한 조회
SELECT * FROM VW_EMP_V;

view_2

 

위의 SELECT문과 동일한 결과가 나오는 것을 볼 수 있다.

이번엔 테이블에 데이터를 INSERT 한 뒤 뷰를 통회 조회해 보자.

 

-- 임시 테이블에 데이터 삽입    
INSERT INTO EMP_V(EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
     VALUES(7777, '김경완', 'WEB DEV', NULL, TO_DATE('2022/06/20', 'YYYY/MM/DD'), 9999, NULL, 20);

-- 뷰 재조회
SELECT * FROM VW_EMP_V;

view_3

 

뷰 자체에 어떤 수정을 진행하지 않았음에도 임시 테이블에 데이터를 추가하자 추가된 데이터도 조회되는 것을 볼 수 있다. 즉, 뷰는 쉽게 말하면 당시 SELECT문을 실행했을 때의 결과를 저장하는 것이 아니라, SELECT문 자체를 미리 저장해 놓았다가 실행하는 것이라고 볼 수 있다.

 

 

뷰 삭제

 

문법

 

DROP VIEW [뷰 이름];

실제 데이터가 아닌 SELECT문이 저장된 뷰를 삭제하는 것이므로 테이블이나 데이터가 삭제되는 것은 아님

 

 

뷰의 생성과 조회 예시

 

DROP VIEW VW_EMP_V;

SELECT * FROM VW_EMP_V;

view_4

 

뷰를 삭제했기 때문에 뷰가 존재하지 않는다는 오류 메시지가 출력된다.

 

SELECT * FROM EMP_V;

view_5

 

그러나 임시로 제작했던 테이블은 삭제되지 않고 여전히 남아 있다.

반응형