CREATE VIEW
CREATE VIEW#
구문#
create_view ::=#
query_restriction_clause ::=#
전제 조건#
아래의 조건 중 하나 이상을 만족해야 사용할 수 있다.
- 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.
-
조인 뷰는 뷰의 부질의에 조인을 내포하는 것을 의미한다. ↩