SELECT 쿼리의 실행 결과를 화면에 저장한 논리적 가상 테이블
실제 테이블과는 다르게 실질적 데이터를 저장하고 있진 않지만
사용자는 테이블을 사용하는 것과 동일하게 사용 가능

- 뷰 정의에 포함되지 않은 컬럼을 조작하는 경우
- 뷰에 포함되지 않은 컬럼 중에 베이스가 되는 컬럼이 NOT NULL 제약조건이 지정된 경우
- 산술 표현식으로 정의된 경우
- 그룹함수나 GROUP BY절을 포함한 경우
- DISTINCT를 포함한 경우
- JOIN을 이용해 여러 테이블을 연결한 경우
- 뷰 정의에 포함되지 않은 컬럼을 조작하는 경우
CREATE OR REPLACE VIEW V_JOB2
AS SELECT JOB_CODE
FROM JOB;
INSERT INTO V_JOB2 VALUES(‘J8’, ‘인턴’);
- 뷰 정의에 포함되지 않은 컬럼을 INSERT/UPDATE/DELETE하는 경우 에러 발생
- 뷰에 포함되지 않은 컬럼 중에 베이스가 되는 테이블 컬럼이 NOT NULL제약조건이 지정된 경우
CREATE OR REPLACE VIEW V_JOB3
AS SELECT JOB_NAME
FROM JOB;
INSERT INTO V_JOB3 VALUES(‘인턴’);
- 산술 표현식으로 정의된 경우
CREATE OR REPLACE VIEW EMP_SAL
AS SELECT EMP_ID, EMP_NAME, SALARY,
(SALARY + (SALARYNVL(BONUS, 0)))12 연봉
FROM EMPLOYEE;
INSERT INTO EMP_SAL VALUES(800, ‘정진훈’, 3000000, 36000000);
- 그룹함수 또는 GROUP BY절을 포함한 경우
CREATE OR REPLACE VIEW V_GROUPDEPT
AS SELECT DEPT_CODE, SUM(SALARY) 합계, AVG(SALARY) 평균
FROM EMPLOYEE
GROUP BY DEPT_CODE;
INSERT INTO V_GROUPDEPT VALUES(‘D10’, 6000000, 4000000);
DELETE FROM V_GROUPDEPT WHERE DEPT_CODE = ‘D1’;
- DISTINCT를 포함한 경우
CREATE OR REPLACE VIEW V_DT_EMP
AS SELECT DISTINCT JOB_CODE
FROM EMPLOYEE;
INSERT INTO V_DT_EMP VALUES(‘J9’);
DELETE FROM V_DT_EMP WHERE JOB_CODE = ‘J1’;
- JOIN을 이용해 여러 테이블을 연결한 경우
CREATE OR REPLACE VIEW V_JOINEMP
AS SELECT EMP_ID, EMP_NAME, DEPT_TITLE
FROM EMPLOYEE
JOIN DEPARTMENT ON (DEPT_CODE = DEPT_ID);
INSERT INTO V_JOINEMP VALUES(888, ‘조세오’, ‘인사관리부’);
뷰 정의 시 사용한 쿼리 문장이 TEXT컬럼에 저장되어 있으며
뷰가 실행될 때는 TEXT에 기록된 SELECT에 문장이 다시 실행되면서 결과를 보여주는 구조임
SELECT * FROM USER_VIEWS;
- OR REPLACE 옵션
생성한 뷰가 존재하면 뷰를 갱신함- FORCE/NOFORCE 옵션
FORCE옵션은 기본 테이블이 존재하지 않더라도 뷰 생성
NOFORCE 옵션이 기본 값으로 지정되어 있음- WITH CHECK OPTION 옵션
옵션을 설정한 컬럼의 값을 수정 불가능하게 함(삭제는 가능)- WITH READ ONLY 옵션
뷰에 대해 조회만 가능하고 삽입, 수정, 삭제 등은 불가능하게 함
일반적으로 FROM절에 사용된 서브쿼리의 결과 화면에 별칭을 붙인 것을 말함
FROM절에 서브쿼리를 직접 사용해도 되고 따로 뷰를 생성 후 FROM절에 생성한 뷰를 사용해도 됨