Backend/Oracle DB

19. 가상의 테이블, 뷰(View)

개발개발빈이 2022. 5. 23. 20:34

○ 뷰(View)

    ① 정의
        - 테이블에 대한 가상의 테이블로서 테이블처럼 직접 데이터를 소유하지 않고
          검색시에 이용할 수 있도록 정보를 담고 있는 객체 테이블 정보의 부분집합
          
    사용목적
        - 테이블에 대한 보안기능을 설정해야 하는 경우
        - 복잡하고, 자주 사용하는 질의 SQL문을 보다 쉽고 간단하게 사용해야 하는 경우
        
      사용자 계정에 뷰 생성 권한 부여
        - 형식) grant create view to 아이디;

--java200202 계정에 대해서 뷰 생성 권한 부여
GRANT CREATE VIEW TO java200202;

 

 뷰 사용하기

    ① 테이블, 뷰 목록 확인

select * from tab;                          -- 모든 객체 종류 확인
select * from tab where tabtype='TABLE';    -- 테이블 목록
select * from tab where tabtype='VIEW';     -- 뷰 목록

뷰 목록 확인

     뷰 생성/수정

        - 형식) create or replace view 뷰이름
                  as [실제로 실행할 SQL문]

        - replace : 이미 존재하는 뷰의 내용을 수정함

create or replace view test_view	--두번째 실행부터는 뷰 수정
as select uname, kor, eng, mat, addr
   from sungjuk
   where addr in ('Seoul', 'Jeju');
   
create or replace view test2_view
as select uname as 이름, 
		  kor as 국어, 
          eng as 영어, 
          mat as 수학, 
          addr as 주소  --(alias, 별칭부여) as 생략가능
   from sungjuk
   where addr in ('Seoul', 'Jeju');

 

      뷰 조회

        - 생성된 뷰는 테이블처럼 사용가능하다

select * from test_view;
select * from test2_view;

      뷰 세부 정보 확인

        - 데이터 사전(user_views 테이블)에서 뷰의 세부 정보 확인

select * from user_views;
select text from user_views where view_name='TEST_VIEW';

          
     뷰 삭제하기
        - 형식) drop view 뷰이름

drop view test_view;

 

● PRACTICE 연습문제

    Q) 뷰(view)를 이용해서 수강신청한 학생들의 학번, 총학점 구하기

-- 1) 수강신청 과목의 학점을 가져와서 학번별 총학점 구하기    
select SU.hakno as 학번, sum(GW.ghakjum) || '학점' as 총학점
from tb_sugang SU join tb_gwamok GW
on SU.gcode=GW.gcode
group by SU.hakno;
    
-- 2) 1)의 결과를 test3_view 뷰 생성하기    
create or replace view test3_view
as     
    select SU.hakno as 학번, sum(GW.ghakjum) || '학점' as 총학점
    from tb_sugang SU join tb_gwamok GW
    on SU.gcode=GW.gcode
    group by SU.hakno;

-- 3) 2)의 뷰와 학생테이블을 조인해서 학번, 이름 총학점 출력하기
select uname, 학번, 총학점
from tb_student ST join test3_view TV
on ST.hakno=TV.학번
order by ST.hakno;