오라클

뷰(View)

웹개발자준비 2018. 9. 3. 19:01

뷰,View

- DB Object 중 하나(테이블, 시퀸스,뷰)

- 가상 테이블

- 진짜 테이블의 복사본 -> 복사 테이블, 뷰테이블, 가상 테이블


뷰 관리

1. create

2. drop


뷰 생성

create view vwInsa --머리

as --목

select * from tblInsa;--몸통(*****)


뷰사용

select * from vwInsa; --구조 생성?, 데이터 insert?

select * from copyInsa; --복사된 테이블


ex)직원 정보 : (영업부&기획부) + 남자직원 x 1년 내내 + 하루 수십번

select * from tblInsa

    where buseo in('영업부','기획부') and substr(ssn,8,1) ='1';


뷰의 특징

1. 자주 반복하는 쿼리를 간단하게 줄일 수 있따.

2. 

a.복사 테이블 : 원본테이블의 깊은 복사. 완전한 복사본을 만들어서 분리시킨다. 원본 테이블 수정 > 복사테이블 반영X

b.뷰 : 원본 테이블의 얕은 복사. 뷰는 데이터 저장 객체가 아닌 SQL 저장 객체. 원본 테이블 수정 > 뷰 반영O

3. 뷰는 주로 원본 테이블과는 독립적으로 업무에 필요한 임시 테이블이 필요할 때 만들어서 사용한다.

4. 사용 형태

a.자주 반복되는 질의를 저장

b. 반복과 상관없이 해당 질의에 의미를 부여하여 가독성을 높히고 싶을때

c 보안 : 권한 중 하나 > 자원(테이블,뷰)에 대한 접근 권한


ex)테이프 목록과 반납여부를 가져오시오.        

-inner join : 두 테이블에 모두 존재하는 레코드만 반환. 테이프들 중에서 대여기록이 있는 테이프만 가져온다.

select 

    v.name,

    case

        when r.retdate is null then '미반납'

        when r.retdate is not null then '반납완료'

    end as 반납유무

    from tblVideo v

    inner join tblRent r

        on v.seq = r.video;


ex)테이프 목록과 반납여부를 가져오시오.(+ 한번도 대여기록이 없는 테이프들도 가져오시오.)

-outer join : inner join + 참조되지 않았던 부모 테이블의 나머지 레코드도 함께 가져오기. 대여기록이 없는 테이프

select 

    v.name,

    case

        when r.retdate is null and r.rentdate is not null then '미반납'

        when r.retdate is not null then '반납완료'

        when r.retdate is null and r.rentdate is null then '악성재고'

    end as 반납유무

    from tblVideo v

        left outer join tblRent r --부모테이블을 가르킴

            on v.seq = r.video;



뷰 수정하는 방법

- DB Object 수정하는 명령어 -> alter

- 뷰는 다른 방법을 사용

1.drop -> create

2.수정


ex)

select * from tblTodo;


-- 새로운 할일 추가하기

insert into tblTodo (seq,title,adddate, completedate) values (21,'오라클 공부하기',sysdate,null);


--뷰생성

create or replace view vwTodo

as

--select * from tblTodo;

select title,completedate from tblTodo;


--읽기 

select * from vwTodo;


--쓰기

--insert into vwTodo (seq,title,adddate, completedate) values (22,'뷰 공부하기',sysdate,null);


--수정하기

update vwTodo set title = 'View 공부하기' where seq = 22;



--삭제하기

delete from vwTodo where seq=22;



**뷰는 읽기 전용이다. 뷰는 읽기 전용으로만 사용해야 한다.

**뷰 사용시 DML 적용할 일이 생긴다면 테이블을 사용한다.