DB

뷰(View)

꾸주니12 2022. 5. 6. 23:15

뷰(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