본문 바로가기
DB

[DB / Oracle] Chapter 9. 뷰(VIEW)

by nyeoo 2023. 11. 28.

1. 뷰(VIEW)

  • 뷰(VIEW)란 이미 특정한 데이터베이스 내에서 존재하는 하나 이상의 테이블에서 사용자가 얻기 원하는 데이터만을 정확하고 편하게 가져오기 위하여 사전에 원하는 컬럼들만을 모아서 만들어놓은 가상의 테이블로 편의성 및 보안에 목적이 있음
  • 즉, 한 테이블에 민감한 컬럼, 민감하지 않은 컬럼이 섞여 있을 때, 민감하지 않은 컬럼으로만 뷰를 생성하면 사용자에게 민감한 컬럼을 노출시키지 않고 감춰둘 수 있으며 사용자가 뷰만 사용하게 하면 테이블 내부의 민감정보에 대해 알 수가 없고, 임의로 데이터를 변경시킬 수도 없음
  • 가상의 테이블이란 뷰가 실제로 존재하는 테이블(객체)이 아니라 하나 이상의 테이블에서 파생된 또 다른 정보를 볼 수 있는 방법이라는 의미이며, 그 정보를 추출해내는 SQL 문장이라고 볼 수 있음
  • 실제 물리적인 공간(하드디스크) 안에는 테이블만 들어있으며, 실제 데이터는 테이블에만 적재되는 것이고, 뷰(VIEW)는 그 테이블의 데이터들을 투영하여 보여주는 것. 뷰(VIEW)를 생성할 때 작성된 쿼리가 뷰를 조회하는 때마다 실행이 되는 것이므로 테이블의 데이터가 변경되면 뷰가 데이터 변경 전에 생성되었다고 해도 뷰를 조회해보면 변경된 데이터가 반영된 형태로 조회됨

2. 형식 및 구조

CREATE [OR REPLACE] VIEW 뷰이름
[(ALIAS[, ALIAS, ...])]
AS
서브쿼리(SUBQUERY)
[WITH CHECK OPTION]      
[WITH READ ONLY]

3. 뷰(VIEW) 생성 예시

CREATE OR REPLACE VIEW VIEW_EMPLOYEES
AS
SELECT E.FIRST_NAME, E.LAST_NAME, D.DEPARTMENT_NAME, L.CITY
        ,C.COUNTRY_NAME, R.REGION_NAME
FROM EMPLOYEES E, DEPARTMENTS D, LOCATIONS L, COUNTRIES C, REGIONS R
WHERE E.DEPARTMENT_ID = D.DEPARTMENT_ID(+)
  AND D.LOCATION_ID = L.LOCATION_ID
  AND L.COUNTRY_ID = C.COUNTRY_ID
  AND C.REGION_ID = R.REGION_ID;

4. 뷰(VIEW) 조회 예시

SELECT *
FROM VIEW_EMPLOYEES;

5. 뷰(VIEW)의 구조 조회 예시

DESC VIEW_EMPLOYEES;

→ 뷰는 실제 원본테이블들의 해당 컬럼의 데이터타입이 구성된 방식에 의존함

6. 뷰(VIEW) 소스 확인예시 (★TIP★)

· TEXT 컬럼 : 뷰를 작성할 때의 소스 부분이 보여짐 (뷰를 CREATE OR REPLACE 할 때 추가하거나 뺄 부분을 쉽게 파악 가능)

SELECT VIEW_NAME, TEXT
FROM USER_VIEWS
WHERE VIEW_NAME ='VIEW_EMPLOYEES';
--==>>
/*
"SELECT E.FIRST_NAME, E.LAST_NAME, D.DEPARTMENT_NAME, L.CITY
        ,C.COUNTRY_NAME, R.REGION_NAME
FROM EMPLOYEES E, DEPARTMENTS D, LOCATIONS L, COUNTRIES C, REGIONS R
WHERE E.DEPARTMENT_ID = D.DEPARTMENT_ID(+)
  AND D.LOCATION_ID = L.LOCATION_ID
  AND L.COUNTRY_ID = C.COUNTRY_ID
  AND C.REGION_ID = R.REGION_ID"
*/