SQL의 OBJECT종류 : 뷰(View)

코드블록상에 [] 대괄호는 생략가능하다는 의미이다.

SQL의 OBJECT 종류

  • 지금까지 테이블(table) object에 관한 것을 배웠다.
  • 이제 다른 object들을 배워보자.
Object 특징 사용방법 정의방법
테이블(Table) 행과 열의 조합으로 구성된 기본 저장단위 select, insert, update, delete create table, alter table, drop table, truncate table
뷰(View) 하나 또는 그 이상의 base테이블로부터 논리적으로 데이터를 추출한 부분집합으로 가상의 논리적인 테이블 select, insert, update, delete create [or replace] view, drop view
시퀀스(Sequence) 자동으로 고유한 숫자값을 생성해주며 주로 기본키 값을 생성하기 위해 사용 시퀀스명.nextval, 시퀀스명.currval create sequence, alter sequence, drop sequence
인덱스(Index) 쿼리(Query) 속도를 향상시키기 위해 사용 X create index, alter index, drop index
시노님(Synonym) object에 대한 또다른 이름의 alias역할 X create synonym, drop synonym




View

  • 하나 이상의 base table을 기반으로 생성은 되었으나 물리적으로 존재하지 않고 data dictionary에 select 구문 형태로 정의만 되어 있는 가상의 논리적인 테이블

  • 테이블도 아무나 만들 수 없듯이 뷰도 뷰권한을 가진 유저만이 사용할 수 있다.

    • create biew 권한을 가진 유저만이 뷰를 생성할 수 있다.
  • 가상테이블도 테이블이므로 사용방법은 테이블과 동일하다. (insert, update, select, delete가능)

  • 사용방법 : select, insert, update, delete

  • 정의방법 : create [or replace] view, drop view

  • DDL이라 오토커밋발생하기에 rollback안됨.

  • 뷰 장점 :

    • 보안성 좋음
      • 보안성이 좋아서 table대신 table컬럼의 필요한 컬럼을 모아 view를 사용
    • 공간적 효율성이 좋음
    • 편의성이 높음
      • 두 테이블을 join해서 자주 보는 경우 귀찮기때문에 아예 두 테이블에 자주 보는 정보를 join한 채로 view를 만들어서 편리하게 사용할 수 있다.
  • 쿼리를 save하는 것과의 차이점은

    • save는 스크립트파일을 운영체제안에 저장.
    • view는 DB안에 저장.
    • 따라서 다른 개발자들과 함께 save쿼리를 사용하려면 스크립트파일을 서버컴퓨터에 저장하거나 USB로 공유해야하는 번거로움이 있다. 이럴때 VIEW를 사용하면 권한을 가진 모든 개발자들이 누군가가 만들어놓은 VIEW를 사용할 수 있다.

뷰 생성

  • 옵션 [force|noforce]

    • force : VIEW를 생성할 때 쿼리 컴파일하지 않고 생성. subquery 조건만족여부와 관계없이 무조건 만들어라는 명령.
      • view가 만들어지지만 만들어진 뷰를 볼수는 없다.
      • 사용도 안되는 옵션이 왜 필요할까?
      • 사용예시1 : base테이블을 곧 만들 예정이고 일단 view먼저 만들어놓을때 사용.
      • 사용예시2 : 설계를하는 사람과 테이블을 만드는 사람은 실제 분리되어있기 때문에 설계를 하는 쪽에서 미리 테이블 정의서를 확인하고 VIEW를 만들어 놓기 위해 FORCE 옵션을 사용해서 테이블이 구축되기 이전에 생성시 사용
    • noforce : VIEW를 생성할 때 쿼리 컴파일을 진행. (기본값)
  • 참고링크 : oracle view 사용법 및 정리

1
2
3
4
5
6
7
8
9
10
11
12
13
//기본
create view 뷰명 [(alias[, alias ...])]
as subquery형태로_정의;

//예시
create view empvu80
as select employee_id, last_name, salary
from employees
where department_id = 80;

desc empvu80;

select * from empvu80;

뷰 수정

  • 뷰는 alter구문이 없다. 대신 or replace라는 옵션이 있다.
  • 뷰명이 동일하면 수정해서 교체.
  • 뷰명이 다르면 새롭게 생성.
1
2
create or replace view 뷰명 [(alias[, alias ...])] 
as subquery형태로_정의;

뷰 삭제

  • 뷰를 삭제하면? => base테이블의 데이터가 이전으로 돌아가지않는다. 이미 오토커밋했기때문에.
  • 뷰를 rollback하는 방법은 없다.
  • 뷰를 잘못삭제하면 돌릴 방법은 없다. 다시 만들어야한다.
1
drop view 뷰명

만든 뷰 전체 목록 조회

  • 가지고 있는 테이블 전체를 조회하는 명령어가 있는 것처럼 가지고 있는 뷰 목록을 조회하는 명령어가 있다.
  • 뷰의 경우 컬럼이 많기때문에 desc로 먼저 원하는 컬럼을 설정한 뒤 목록을 조회하는 것을 추천한다.
1
2
3
4
5
6
7
8
9
10
//가지고 있는 테이블전체를 조회하는 명령어
select * from tab;

//가지고 있는 뷰전체를 조회하는 명령어
select * from user_views;

//뷰가 가지고 있는 컬럼이 많기때문에 원하는 컬럼만 골라서 뷰리스트보는 것을 추천
//예시 : view_name으로 전체 뷰 목록 조회
desc user_views;
select view_name from user_views;