티스토리 뷰

DATABASE/SQL

[SQL] VIEW

진심스테이크 2018. 4. 19. 22:56

 

View : 자체적으로 데이터를 포함하거나 저장하지 않은 논리적인 구조로서 기본 테이블의 데이터를 조회하고 변경할 수 있는 창

- 가상 테이블 개념 -> 데이터를 물리적으로 갖지 않음

- 저장 공간이 없음

- 쿼리문을 저장하고 있는 객체

 

 

목적

- 직접적인 테이블 접근을 제한

- 복잡한 질의를 쉽게 만들기 위함

- 보안에 유리

 

 

특징

- 테이블에 대한 제한을 갖고 있음

- 테이블의 일정한 부분만 볼 수 있는 가상 테이블

- 실제 자료를 갖지 않지만, 테이블 관리 가능

- 하나의 테이블에 뷰의 갯수는 제한이 없음

- 데이터를 물리적으로 갖고 있지 않음

 

#테이블과 달리 뷰는 이미 존재하는 테이블을 근거로 한 쿼리문 형태로 저장 -> 기본 테이블이 존재해야 함

 

 

기본 형태

CREATE VIEW 뷰이름 AS 쿼리문;

#AS 뒤에 나오는 쿼리문을 뷰가 저장

 

 

장점

- 논리적 독립성 제공

- 데이터 접근 제어로 보안 가능

- 사용자 데이테 관리가 간편해짐

- 하나이상의 테이블로 각각 다른 결과를 낼 수 있는 수많은 뷰 정의 가능

 

단점

- 독자적 인덱스를 갖을 수 있음

 

 

뷰 종류

 

종류 

단순 뷰 (Simple View) 

복합 뷰 (Complex View) 

테이블수  

1개 

2개이상 

그룹 함수 

사용 불가능 

사용 가능 

DISTINCT  

사용 불가능  

사용 가능 

DML문 

사용 가능 

사용 불가능 

 

 

 


 

 

뷰 생성 전 권한 부여

GRANT CREATE VIEW TO 사용자명;

 

 

 

 

뷰 생성

- CREATE

- 기존에 있는 dept 테이블과 emp 테이블의 회손을 막기 위해 복사해서 사용

 

 

 

 

- 조건 : 30번 부사에 소속된 사원들의 번호, 이름, 부서번호 출력

 

 

 

뷰 데이터 추가

- INSERT

 

데이터가 추가된 것을 확인할 수 있다

 

 

테이블에도 데이터가 추가된것을 확인할 수 있다

#테이블 칼럼이 NOT NULL 제약조건이 지정되어 있으면 데이터 추가 불가

 

 


 

 

뷰에 관련된 데이터 딕셔너리

- 사용자가 생성한 모든 뷰에 대한 정의는 USER_VIEWS라는 이름의 데이터 딕셔너리에 저장되어 있음

 

 

 


 

 

단순 뷰

 

데이터 추가

- INSERT

 

 

그룹 함수 사용

- GROUP BY

 급여의 총액과 평균을 구하는 칼럼에 별칭을 부여해서 생성

DEPTNO 기준

#가상 칼럼을 사용하기 위해서는 사용자가 반드시 별칭을 부여해서 이름을 설정해야 한다

 

 

뷰 삭제

- DROP

 

SAL_VIEW 삭제 후 확인

 

 

뷰 수정

- CREATE OR REPLACE VIEW

  -> 존재하지 않은 뷰면 새로 생성되고, 기존에 존재하면 내용을 변경함

 

 

 

 

기본 테이블 없이 뷰 생성

- FORCE

 

 

 

경고문과 함께 뷰가 생성이 된다

 

Q. 만약 FORCE로 뷰를 생성하고 테이블을 생성하면 어떻게 될까?

 

A. 자동적으로 뷰는 테이블을 참고한다

 

 

뷰의 여러가지 옵션

- UPDATE

 

30번 부서에서 급여가 1000이상인 사원들을 20번 부서로 이동

 

 

- WITH CHECK OPTION

  -> 뷰 생성시 조건으로 지정한 칼럼 값을 변경하지 못하도록함

 

CHECK_VIEW 생성

 

 

 

CHECK_VIEW에서 DEPTNO가 30인 사람을 추가하면 뷰에서 선언한 조건에 맞지 않기 때문에 오류가 난다

 

 

- WITH READ ONLY

  -> 뷰를 통해서는 어떤 테이블의 칼럼의 내용을 변경 할 수 없다

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'DATABASE > SQL' 카테고리의 다른 글

[SQL] SUBQUERY  (0) 2018.04.20
[SQL] JOIN  (0) 2018.04.20
[SQL] SCHEMA - 스키마  (0) 2018.04.19
[SQL] 데이터 무결성  (1) 2018.04.19
[SQL] TRANSACTION  (0) 2018.04.19
댓글