SQL의 OBJECT종류 : 뷰(View)
코드블록상에 [] 대괄호는 생략가능하다는 의미이다.
SQL의 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를 생성할 때 쿼리 컴파일을 진행. (기본값)
- force : VIEW를 생성할 때 쿼리 컴파일하지 않고 생성. subquery 조건만족여부와 관계없이 무조건 만들어라는 명령.
1 | //기본 |
뷰 수정
- 뷰는 alter구문이 없다. 대신 or replace라는 옵션이 있다.
- 뷰명이 동일하면 수정해서 교체.
- 뷰명이 다르면 새롭게 생성.
1 | create or replace view 뷰명 [(alias[, alias ...])] |
뷰 삭제
- 뷰를 삭제하면? => base테이블의 데이터가 이전으로 돌아가지않는다. 이미 오토커밋했기때문에.
- 뷰를 rollback하는 방법은 없다.
- 뷰를 잘못삭제하면 돌릴 방법은 없다. 다시 만들어야한다.
1 | drop view 뷰명 |
만든 뷰 전체 목록 조회
- 가지고 있는 테이블 전체를 조회하는 명령어가 있는 것처럼 가지고 있는 뷰 목록을 조회하는 명령어가 있다.
- 뷰의 경우 컬럼이 많기때문에 desc로 먼저 원하는 컬럼을 설정한 뒤 목록을 조회하는 것을 추천한다.
1 | //가지고 있는 테이블전체를 조회하는 명령어 |