뷰(View)

1.가상의 테이블 : 사용시는 테이블과 동일하게..

2.장점

 1) 편리성 : 여러번 반복되는 긴 명령어를 간단히 사용할 수 있다.

 2) 보안성 : 주민번호등 특정한 정보가 노출되지 않게 할 수 있다.

3.뷰 : SQL 명령이 저장된다.  

       cf) batch화일과 유사

4.조회목적으로만 사용(select)       

5.inline view : select문내에 포함된 뷰(임시뷰)


desc user_views

--뷰내용 확인하기

select text from user_views where view_name='GOGEK_VIEW_BIRTHDAY'


--남자직원출력

select * from sawon where sasex='남자'


--뷰로 생성

create or replace view sawon_view_man

as

  select * from sawon where sasex='남자'


--뷰사용

select * from sawon_view_man


--여자만 뷰로 생성

create or replace view sawon_view_women

as

  select * from sawon where sasex='여자'

--뷰사용

select * from sawon_view_women



--사원테이블

create or replace view sawon_view_sahire

as

  select 

     sabun,saname,sasex,deptno,sajob,sahire,samgr,sapay,

     to_char(sahire,'YYYY') 입사년도,

     to_char(sahire,'MM') 입사월,

     to_char(sahire,'DD') 입사일

  from sawon


--편리성

select * from sawon_view_sahire


--고객테이블

select * from gogek

update gogek set gojumin='021212-3123456' where gobun=15;


create or replace view gogek_view_birthday

as

  select gobun,goname,goaddr,godam,

         case

            when substr(gojumin,8,1) in(1,3) then '남자'

            else '여자'

         end as gosex,

         to_number(substr(gojumin,1,2)) + 

         ( 

           case 

             when substr(gojumin,8,1) in(1,2) then  1900

             else 2000

           end

         ) 

         as 출생년도,

         to_number(substr(gojumin,3,2)) 월,

         to_number(substr(gojumin,5,2)) 일

  from gogek


--보안성 : 주민번호정보가 노출되지 않는다..

select * from gogek_view_birthday


--test1에게는 gogek_view_birthday에 대한 select권한만 부여


grant select on gogek_view_birthday to test1


-- inline view

--case 1

select sabun,saname,sapay,(select max(sapay) from sawon) 최대급여 from sawon;


--case 2 : inline

create or replace view sawon_view_rank

as

  select sabun,saname,rank() over(order by sapay desc) as rank,sapay from sawon

--급여순위 5위출력

select * from sawon_view_rank where rank <=5


select * from 

  (select sabun,saname,rank() over(order by sapay desc) as rank,sapay from sawon)--inline view

where rank<=5  


--case 2

select * from 

(select s.* ,rank() over(order by sapay desc) as rank 

  from

   (select * from sawon) s -- alias명 :임시테이블(뷰)명 

 )

where rank between 1 and 10



--고객테이블에서 나이순 번호를 매기기

select * from gogek_view_birthday

order by 출생년도



+ Recent posts