콘텐츠로 이동

CREATE VIEW

CREATE VIEW#

구문#

create_view ::=#

create_view_image156

query_restriction_clause ::=#

query_restriction_clause_image157

전제 조건#

아래의 조건 중 하나 이상을 만족해야 사용할 수 있다.

  • SYS 사용자이다.
  • 사용자 자신의 스키마에 테이블을 생성하려면, CREATE TABLE 또는 CREATE ANY TABLE 시스템 권한을 가지고 있어야 한다.
  • 다른 사용자의 스키마에 테이블을 생성하려면, CREATE ANY TABLE 시스템 권한을 가지고 있어야 한다.

설명#

명시된 이름으로 새로운 뷰를 생성한다. 뷰(view)란 하나 이상의 테이블 또는 뷰를 기반으로 하는 논리적인 테이블(logical table)이다. 뷰는 실제 데이터를 가지고 있지 않다. 뷰의 기반이 된 테이블을 베이스 테이블(base table)이라 한다.

OR REPLACE#

이 절은 뷰가 이미 존재한다면 같은 이름의 뷰로 교체할 때 사용된다. 즉, 이 절은 존재하는 뷰를 제거한 후 재 생성하는 대신에 기존 뷰의 정의를 변경하는 기능을 제공한다.

FORCE#

뷰의 베이스 테이블 존재 여부와 뷰를 내포하고 있는 스키마 소유자의 권한 유무에 상관없이 뷰가 생성되도록 하는 옵션이다.

이는 의미상으로 오류를 내포한 무효한 상태의 뷰가 생성될 수 있음을 의미한다. 이런 경우, 뷰에 대해 SELECT 문 수행 시 오류가 발생할 것이기 때문에, FORCE 옵션을 사용해 뷰를 생성한 후에는 뷰를 SELECT 해보거나 SYS_VIEWS_ 메타 테이블을 조회해 뷰의 상태를 확인해야 한다.

NO FORCE#

이 옵션을 사용하면 뷰의 베이스 테이블이 존재하고 뷰를 내포하고 있는 스키마 소유자가 권한을 가지고 있을 때만 뷰가 생성된다. 이 옵션이 기본값이다.

user_name#

생성될 뷰의 소유자 이름을 명시한다. 생략하면 Altibase는 현재 세션에 연결된 사용자의 스키마에 뷰를 생성한다.

view_name#

생성될 뷰의 이름을 명시한다. 뷰의 이름은 2장 "객체 이름 규칙"을 따라야 한다.

alias_name#

베이스 테이블로부터 검색하는 대상이 표현식인 경우 표현식을 위한 별칭을 명시해야 한다. 이 별칭이 뷰의 칼럼 명이 된다. 별칭의 개수는 subquery의 검색 대상(표현식과 칼럼)의 총 개수와 동일해야 한다.

subquery#

베이스 테이블로부터 조회하는 열과 행을 식별하는 부질의를 명시한다.

WITH READ ONLY#

뷰가 읽기 전용임을 지정할 수 있다. 이 옵션을 명시하지 않으면, INSERT, UPDATE, DELETE 같은 변경 연산을 수행할 수 있는 Updatable View가 생성된다.

주의 사항#

  • 뷰가 저장된 스키마의 소유자는 뷰의 기반이 되는 테이블 또는 뷰로부터 SELECT 문을 수행하는데 필요한 권한을 가지고 있어야 한다.
  • 베이스 테이블에 대한 SELECT문의 검색 대상에 명시할 수 있는 표현식의 개수는 최대 1024개이다.
  • CURRVAL과 NEXTVAL 의사열을 베이스 테이블에 대한 SELECT문의 검색 대상에 사용할 수 없다.

예제#

뷰 생성하기#

<질의> 다음 예제는 employees 테이블을 기반으로 한 이름이 avg_sal인 뷰를 생성한다. 뷰는 각 부서의 평균 월급을 부서별로 보여준다.

iSQL> CREATE VIEW avg_sal AS
  SELECT dno, AVG(salary) emp_avg_sal
FROM employees
  GROUP BY dno;
Create success.
iSQL> SELECT * FROM avg_sal;
AVG_SAL.DNO  AVG_SAL.EMP_AVG_SAL 
------------------------------------
A001  2066.66667  
C001  1576.66667  
C002  1660     
D001  2075.75   
F001  1845     

6 rows selected.

부질의 내에서 표현식 AVG(salary)에 대한 별칭으로 emp_avg_sal이 제공되어 있기 때문에, 뷰의 칼럼을 위한 별칭은 명시할 필요가 없다.

조인 뷰1 생성하기#

<질의> 다음 뷰는 주문된 상품을 담당하고 있는 사원 이름과 상품을 주문한 고객의 이름을 보여준다.

iSQL> CREATE VIEW emp_cus AS 
 SELECT DISTINCT e.e_firstname, e.e_lastname, 
  c.c_firstname, c.c_lastname 
 FROM employees e, customers c, orders o 
 WHERE e.eno = o.eno AND o.cno = c.cno;
Create success.
iSQL> SELECT * FROM emp_cus;
E_FIRSTNAME           E_LASTNAME            C_FIRSTNAME           C_LASTNAME
---------------------------------------------------------------------------------------------
Alvar                 Marquez               Estevan               Sanchez
Sandra                Hammond               Pierre                Martin
.
William               Blake                 Saeed                 Pahlavi
Sandra                Hammond               Saeed                 Pahlavi
22 rows selected.

  1. 조인 뷰는 뷰의 부질의에 조인을 내포하는 것을 의미한다.