View생성
만약 아래와 같은 쿼리가 있다고 가정해보자.
select a.student_no
, b.평균
from ted_Score a
, (select student_no
, round(nvl(kor,0) + nvl(math,0) + nvl(eng,0)) as 평균
from ted_score
where year_mon = '2017/07') b
where a.year_mon = '2017/07'
and a.student_no = b.student_no
;
업무상 위의 쿼리의 결과를 자주 반복 조회해야한다면, 9줄이 되는 쿼리를 항상 작성하는 것이 번거롭다.
이때, 위의 쿼리 전체를 임의의 이름 'test'로 지정해버리고
select *
from test;
이렇게 했을때 위의 쿼리와 동일한 결과가 나오게 하는 법이 있는데, 바로 그것이 View이다. 작성법은 아래와 같다.
-----------------------------------------------------------------------------------------------------------------------------------
create or replace View test as -- View생성법: create or replace View 원하는이름지정 as 쿼리작성;
select a.student_no
, b.평균
from ted_Score a
, (select student_no
, round(nvl(kor,0) + nvl(math,0) + nvl(eng,0)) as 평균
from ted_score
where year_mon = '2017/07') b
where a.year_mon = '2017/07'
and a.student_no = b.student_no
;
-----------------------------------------------------------------------------------------------------------------------------------
이제, test라는 뷰가 생성되었다. 따라서 이제
select *
from test;
를 해주면, 항상 9줄의 코딩을 작성할 필요없이 같은 결과를 얻을 수 있다. 그리고, View는 프로그램 종료해도 자동 commit되어 있으니 삭제되지 않는다.
만약 생성한 뷰를 삭제하고 싶으면 drop view 뷰이름 ; 해주면 삭제된다.
View의 간략한 사용법은 이러하고 조금 더 구체적으로 정리해보면 아래와 같다.
--뷰(View)란 무엇인가?
/*뷰(View)는 하나 이상의 테이블이나 다른 뷰의 데이터를 볼 수 있게 하는 데이터베이스 객체이다.
실제 데이터는 뷰를 구성하는 테이블에 담겨 있지만 마치 테이블처럼 사용할 수 있습니다.
또한 테이블 뿐만 아니라 다른 뷰를 참조해 새로운 뷰를 만들어 사용할 수 있습니다. */
--뷰(View)의 사용 목적
/*코딩을 하다보면 여러개의 테이블에서 필요한 정보를 뽑아 사용할때가 많습니다.
이때 좀 더 편리하게 사용할 수 있는 방법중의 하나가 바로 뷰이다. 뷰를 사용하면 복잡한 질의를 쉽게 만들어 준다.
여러테이블의 JOIN과 GROUP BY 같은 같은 복잡한 쿼리를 view로 저장시켜놓으면 다음부터는
저장한 view의 정보만 가져오면 되므로 쉽게 좀 더 편리하게 사용할 수 있습니다. 일종의 함수라고도 생각하셔도 됩니다.
또한 뷰는 데이터 보안에서도 유리한데요. 뷰를 보면 컬럼과 데이터만 공개되므로 원천 테이블은 알 수 없다. */