데이터베이스/Oracle

view (뷰)

backend dev 2024. 4. 4.

뷰(View)

뷰(View)는 하나 이상의 테이블이나 다른 뷰의 데이터를 볼 수 있게 하는 데이터베이스 객체입니다. 

실제 데이터는 뷰를 구성하는 테이블에 담겨 있지만 마치 테이블처럼 사용할 수 있습니다.

 또한 테이블 뿐만 아니라 다른 뷰를 참조해 새로운 뷰를 만들어 사용할 수 있습니다.

 

뷰는 실제로 데이터를 저장하고 있지는 않지만 DML 작업이 가능한 가상의 테이블이라고 생각하면 된다.

뷰(View)의 사용 목적

여러개의 테이블에서 필요한 정보를 뽑아 사용할때가 많습니다. 

이때 좀 더 편리하게 사용할 수 있는 방법중의 하나가 바로 뷰입니다. 

뷰를 사용하면 복잡한 질의를 쉽게 만들어 줍니다.

여러테이블의 JOIN과 GROUP BY 같은 같은 복잡한 쿼리를 view로 저장시켜놓으면

다음부터는 저장한 view의 정보만 가져오면 되므로 쉽게 좀 더 편리하게 사용할 수 있습니다.

일종의 함수라고도 생각하셔도 될듯 합니다.

또한 뷰는 데이터 보안에서도 유리한데요.

뷰를 보면 컬럼과 데이터만 공개되므로 원천 테이블은 알 수 없습니다.

 

 

사용방법

CREATE  [OR  REPLACE]  [FORCE | NOFORCE]  VIEW view_name [(alias[,alias,...])]
AS Subquery
[WITH  CHECK  OPTION  [CONSTRAINT  constraint ]]
[WITH  READ  ONLY]

OR REPLACE                  이미 존재한다면 다시 생성한다.
FORCE                       Base Table 유무에 관계없이 VIEW을 만든다
NOFORCE                     기본 테이블이 존재할 경우에만 VIEW를 생성한다.
view_name                   VIEW 의 이름
Alias                       Subquery 를 통해 선택된 값에 대한 Column명이 된다.
Subquery                    SELECT 문장을 기술한다.
WITH CHECK OPTION           VIEW 에 의해 액세스 될 수 있는 행만이 입력,갱신될 수 있다.
Constraint                  CHECK OPTON 제약 조건에 대해 지정된 이름이다.
WITH READ ONLY              이VIEW 에서 DML이 수행될 수 없게 한다.

 

 

 

예시

create view view001
as
    select * from emp;

 

create view vvv
as
select e.*,d.DEPTNO as "d.DEPTNO", DNAME, LOC
from emp e
         join DEPT d on e.DEPTNO = d.DEPTNO
where e.DEPTNO != 10
order by e.EMPNO;

join을 하는 등 복잡한 뷰를 생성가능.

create view v_003
as
    select deptno, trunc(avg(sal)) as avgsal
from EMP
group by deptno;
create or replace view vvv
as select * from dept

OR REPLACE                  이미 존재한다면 다시 생성한다.   [위에 이미 만들었던 vvv가 재생성된다.]

 

 

OR REPLACE를 이용해서 뷰의 수정을 할 수있다.  [ 수정 == 재생성]

 

 

삭제는 drop view 뷰이름으로 삭제가능하다.

 

select *
from emp e join v_003 s
on e.DEPTNO = s.deptno
where e.sal > s.avgsal;

당연히 뷰와 조인가능

 

 

 

DML

뷰는 DML을 사용하는것을 권장하지않지만

create view view001
as
    select * from emp;

뷰가 다음과 같이 하나의 테이블로 만들어진 것이라면 ( 다른 테이블과 join하지않았다면 )

뷰를 수정하는것은 기준 테이블(view001을 만들기위해 사용된 emp테이블)이 수정되는것이다.

뷰는 실제 데이터를 저장하고있지않기 때문에 기준 테이블이 수정된다.

 

수정전

update view001
set ename = 'hi'
where sal < 3000;

결과

 

뷰는 select를 할때만 사용하고 데이터의 수정이 필요하면 원본(기준)테이블에 직접가서 수정을 한다.

댓글