뷰(View)
뷰(view)란?
- 여러 테이블을 모아서 만든 하나의 가상테이블
- 복잡한 쿼리의 경우 한번만 사용하여 뷰를 만들어두면 이후에는 간단하게 사용 가능하다.
- 한 개의 뷰로 여러 테이블에 대한 데이터를 검색 할 수 있다.
- 뷰의 데이터가 어느 테이블에서 왔는지 사용자는 알 수 없어서 보안에 유리
- 뷰는 자신만의 인덱스를 가질 수 없다. / 실제 테이블이 아니라서. 조각조각데이터를 모아온거라서.
예를 들어 Emp 테이블 과 dept 테이블을 조인하고 또 salary 테이블과 조인하고 두번 조인해야함 그런데 뷰를 만들면 쿼리문으로 간결하게 딱 하나만 만들어서 확인 가능 !
(1) 뷰 생성
- create [or replace] view [view name] as [query];
- create or replace : 기존 뷰를 수정할 때 쓴다
(2) 뷰 사용 법 (뷰는 가상테이블이니까 테이블과 똑같다. )
select * from [뷰 이름];
(3) 뷰의 데이터를 수정하면 원본도 수정이 된다.
- 수정이되지만 읽기전용으로 생각하기
- 하지만 왠만하면 수정하지 않는 것이 좋다. 연관된 테이블에 데이터에 어떤 영향을 끼칠지 모름 조심?
update vw_emp set ename = 'oh' where ename = 'kim';
(4) 뷰 수정 (뷰를 생성하는 쿼리의 수정)
-- 테이블 수정은 alter 인데? 뷰도 alter 로 수정안되나?
-- 써도 되지만 create or replace를 사용하면 만약 뷰가 없을 경우 생성 된다./ 있는지 알고 수정할때? 없으면 에러안나게
create or replace view vw_emp as
select e.ename ,d.deptname ,d.loc from emp e ,dept d where e.deptno = d.deptno;
(5) with check option
: 뷰를 생성한 조건식을 만족하는 컬럼은 update 불가하도록 하는 옵션
(그 조건을 만족하는 뷰 를 만든건데 그게 update 가 되면 뷰가 내용이 없어져버리는거잖아 조건에안맞는 데이터는 없어져버림 )
create view vw_chk_option as
select ename,job,deptno from emp where deptno =1 with check option;
- 뷰를 만드는 조건은 deptno =1 이다.
- with check option 을 걸어두면 deptno 는 수정 불가하다.
(6) 뷰 내용 조회
(7) 뷰삭제
- create 로 만들었으니까 drop으로 삭제
- drop view [뷰 이름];
13_view