더북(TheBook)

뷰 생성

    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개의 행이 선택됨

이렇게 단순한 뷰도 있지만 현장에서는 여러 개의 테이블에서 필요한 정보를 뽑아 사용할 때가 많은데 이때 선택할 수 있는 최선책이 바로 뷰다. 또한 뷰는 데이터 보안 측면에서 유리하다. 즉 뷰를 보면 컬럼과 데이터만 공개되므로(뷰 생성시 컬럼명도 변경 가능), 원천 테이블을 감출 수 있다. 특히 뷰가 참조하는 테이블 소유자가 아닌 다른 사용자가 해당 뷰를 사용해야 할 경우, 그 사용자는 원천 테이블에 대한 정보를 전혀 볼 수 없다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.