oracle

데이터베이스 객체 _뷰 (생성)

꽃솜이 2021. 4. 1. 15:24

뷰 View 는 하나 이상의 테이블이나 다른 뷰의 데이터를 볼 수 있게 하는 데이터베이스 객체다.

실제 데이터는 뷰를 구성하는 테이블에 담겨 있지만 마치 테이블처럼 사용할 수 있다.

또한 테이블 뿐만 아니라 다른 뷰를 참조해 새로운 뷰를 만들어 사용할 수 있다.

데이터를 본다는 의미가 있으므로 뷰의 정의는 데이터를 조회하는 SELECT문으로 구성된다.

 

CREATE OR REPLACE VIEW [스키마.]뷰명 AS
SELECT 문장;

뷰는 테이블이나 또 다른 뷰를 참조하는 객체이므로

뷰 생성 스크립트는 다른 테이블이나 뷰를 SELECT 하는 구문으로 구성된다.

 

사원 테이블에는 부서번호만 존재하고 부서명은 없다.

따라서 해당 사원이 속한 부서명을 보려면 다음과 같이 부서 테이블을 참조해야 한다.

SELECT a.employee_id, a.emp_name, a.department_id,
	b.department_name   -- 부서명 컬럼
FROM employees a,
	departments b
WHERE a.department_id = b.department_id;

그런데 위 정보를 여러 사람이 자주 사용해야 한다면,

사용할 때마다 이 SQL문을 매번 작성해야 하는데 너무 비효율적이지 않을까?

 

이럴 때는 사원번호, 사원명, 부서번호, 부서명을 볼 수 있는 뷰를 만들어 놓고 이 뷰를 참조하면 매우 편리하다.

CREATE OR REPLACE VIEW emp_dept_v1 AS
SELECT a.employee_id, a.emp_name, a.department_id,
	b.department_name
FROM employees a,
	departments b
WHERE a.department_id = b.department_id;


결과
    view EMP_DEPT_V1이(가) 생성되었습니다.

뷰 객체가 만들어졌으니 이젠 EMP_DEPT_V1 뷰만 참조하면 원하는 결과를 얻을 수 있다.

 

SELECT *
FROM emp_dept_v1;
      
      
결과
    EMPLOYEE_ID EMP_NAME                  DEPARTMENT_ID  DEPARTMENT_NAME
    ----------- ------------------------- -------------- ---------------------
            200 Jennifer Whalen           10             총무기획부
            201 Michael Hartstein         20             마케팅
            202 Pat Fay                   20             마케팅
         ...
         
    106개의 행이 선택됨

이렇게 단순한 뷰도 있지만 현장에서는 여러 개의 테이블에서 필요한 정보를 뽑아 사용할 때가 많은데

이때 선택할 수 있는 최선책이 바로 뷰다.

 

또한 뷰는 데이터 보안 측면에서 유리하다.

즉 뷰를 보면 컬럼과 데이터만 공개되므로(뷰 생성시 컬럼명도 변경 가능)

원천 테이블을 감출 수 있다.

 

특히 뷰가 참조하는 테이블 소유자가 아닌 다른 사용자가 해당 뷰를 사용해야 할 경우,

그 사용자는 원천 테이블에 대한 정보를 전혀 볼 수 없다.