CREATE VIEW 뷰이름 [(애트리뷰트(들))]
AS SELECT문
[WITH CHECK OPTION];
뷰의 이름 다음에 애트리뷰트들을 생략하면 뷰르를 정의하는데 사용된 SELECT문의 SELECT절에 열거된 애트리뷰트들의 이름과 동일한 애트리뷰트들이 뷰에 포함됨
뷰를 정의하는 SELECT절에 산술식 또는 집단 함수에 사용된 애트리뷰트가 있는 경우, 뷰의 정의에 조인이 포함되어 있고 뷰에서 두 개 이상의 애트리뷰트의 이름이 같게 되는 경우에는 뷰를 정의할 때 모든 애트리뷰트들의 이름을 지정해야 함
예: 한 릴레이션 위에서 뷰를 정의
EMPLOYEE 릴레이션에 대해서 "3번 부서에 근무하는 사원들의 사원번호, 사원이름, 직책으로 이루어진 뷰"를 정의해보자. 아래의 뷰의 정의에는 뷰의 애트리뷰트들을 별도로 명시했기 때문에 뷰에는 EMPNO, EMPNAME, TITLE의 세 애트리뷰트가 포함된다.
CREATE VIEW EMP_DNO3 (ENO, ENAME, TITLE)
AS SELECT EMPNO, EMPNAME, TITLE
FROM EMPLOYEE
WHERE DNO=3;
CREATE VIEW EMP_PLANNING
AS SELECT E.EMPNAME, E.TITLE, E.SALARY
FROM EMPLOYEE E, DEPARTMENT D
WHERE E.DNO = D.DEPTNO
AND D.DEPTNAME = '기획';
SELECT * SELECT EMPNO, EMPNAME, TITLE
FROM EMP_DNO3 → FROM EMPLOYEE
WHERE TITLE='사원'; WHERE TITLE = '사원'
AND DNO = 3;
뷰에 대한 갱신도 기본 릴레이션에 대한 갱신으로 변환됨
INSERT INTO EMP_DNO3
VALUES (4293, '김정수', '사원');
→ INSERT INTO EMPLOYEE
VALUES (4293, '김정수', '사원',,,);
INSERT INTO EMP_PLANNING
VALUES ('박지선, '대리', 2500000);
→ INSERT INTO EMPLOYEE
VALUES ( '박지선, '대리', 2500000,); // 기본키인 사원번호가 널값 가지므로 삽입 거절
CREATE VIEW EMP_AVGSAL (DNO, AVGSAL)
AS SELECT DNO, AVG(SALARY)
FROM EMPLOYEE
GROUP BY DNO;
UPDATE EMP_AVGSAL
SET AVGSAL = 3000000
WHERE DNO = 2;
INSERT INTO EMP_AVGSAL
VALUES (3, 3200000);
SELECT EMPNAME, SALARY, SALARY*1.1
FROM EMPLOYEE
WHERE TITLE = '과장' AND DNO = 2;
-SELECT문이 문법적으로 정확한가를 검사함
-SELECT문에서 참조하는 EMPLOYEE 릴레이션이 데이터베이스에 존재하는가를 검사함
-EMPLOYEE 릴레이션에 SELECT절에 열거된 애트리뷰트와 WHERE절에서 조건이 사용된 애트리뷰트가 존재하는가를 확인함
-SALARY 애트리뷰트가 수식에 사용되었으므로 이 애트리뷰트의 데이터 타입이 숫자형(정수형이나 실수형)인가를 검사하고, TITLE이 문자열과 비교되었으므로 이 이애트리뷰트의 데이터 타입이 문자형(CHAR(n) 또는 VARCHAR(n) 등)인가 등을 검사함
-이 질의를 입력한 사용자가 권한이 있는가를 확인함
-TITLE 애트리뷰트와 DNO 애트리뷰트에 인덱스가 정의되어 있는지 확인함
-두 애트리뷰트에 각각 인덱스가 존재한다고 가정하자. DBMS가 두 인덱스 중에서 조건을 만족하는 투플 수가 적은 것을 선택하기 위해서는 관계 데이터베이스 시스템에 데이터베이스 외에 추가로 정보를 유지해야 함
-어느 인덱스를 사용하는 것이 유리한가를 예상할 수 있음
ALTER TABLE EMPLOYEE DROP COLUMN MANAGER;
투플의 크기, 투플 수, 각 블록의 채우기 비율, 블록킹 인수, 릴레이션의 크기(블록 수)
뷰의 이름과 정의
애트리뷰트의 데이터 타입과 크기, 애트리뷰트 내의 상이한 값들의 수, 애트리뷰트 값의 범위, 선택율(조건을 만족하는 투플 수/전체 투플 수)
접근할 수 있는 릴레이션과 권한
인덱스된 애트리뷰트(키 애트리뷰트 또는 비 키 애트리뷰트), 클러스터링 인덱스/비 클러스터링 인덱스 여부, 밀집/희소 인덱스 여부, 인덱스의 높이, 1단계 인덱스의 블록 수