하나 이상의 테이블이나 다른 뷰를 이용하여 생성되는 가상 테이블
create [or replace] [force | noforce(기본값)] view 뷰이름 [(컬럼명, 컬럼명1...)] as 서브쿼리 [with check option [constraint 제약조건명]] [with read only];
[ ] 항목은 생략 가능
: 하나의 기본 테이블로 생성한 뷰
: 두 개 이상의 기본 테이블로 생성한 뷰
뷰를 사용하는 이유 : 보안 , 사용의 편의성
일반 사용자에게 해당 뷰만 접근 가능하도록 허용하여 중요한 데이터가 외부에 공개되는 것을 방지
정보 접근을 편리하게 하기 위해 뷰를 통해 사용자에게 필요한 정보만 선택적으로 제공
user_views
데이터 사전에 사용자가 생성한 모든 뷰에 대한 정의 저장함수를 사용하여 뷰 생성 가능
그룹함수는 물리적인 컬럼이 존재하지 않고 결과를 가상 컬럼처럼 사용 👉 가상 컬럼은 기본 테이블에서 컬럼명 상속 불가 👉 컬럼 별칭 필수
그룹함수를 가상 컬럼으로 갖는 뷰는 DML문 사용 불가
drop view 뷰이름;
이미 존재하는 뷰 - 내용을 새롭게 변경
존재하지 않은 뷰 - 뷰 새롭게 생성
create view
: 뷰를 새롭게 생성할 때만 사용
👉 create or replace view
를 사용하여 융통성 있게 뷰 생성
NOFORCE
: 반드시 기존 테이블이 존재할 경우에만 뷰 생성ex) '담당 업무가 manager'인 사원들을 조회하는 뷰 생성
create or replace view
as
select eno, ename, dno, job
from emp11
where job like 'MANAGER'; 👈 조건
// '담당 업무가 SALESMAN'인 사원 추가
insert into veiw values(1000, '이순신', 30, 'SALESMAN');
//조회
select * from veiw;
select * from emp;
👉 뷰에는 없으나 기본 테이블에는 추가가 됨
👉 이를 방지하기 위해
with check option 사용하여 기본 테이블에도 추가될 수 없게 한다
======================================================
create or replace view2
as
select eno, ename, dno, job
from emp
where job like 'MANAGER' with check option; 👈 체크 옵션 추가
// '담당 업무가 SALESMAN'인 사원 추가 👉 실패
insert into view2 values(1000, '이순신', 30, 'SALESMAN');
// '담당 업무가 MANAGER'인 사원 추가 👉 성공
insert into view2 values(1100, '김유신', 30, 'MANAGER');
💡 with check option
: 조건 제시를 위해 사용한 컬럼 값이 아닌 값에 대해서는
뷰를 통해서 추가/변경하지 못하도록 막음