lafee 2019. 8. 5. 13:52
반응형

 

 

 

뷰 (VIEW) 

  • 논리적인 가상 테이블
  • 뷰 안에는 실제 데이터가 없고, 쿼리만 실행해 준다.
  • 쿼리문을 숨기기 때문에 약간의 보안 효과를 가질 수 있다.
  • 권한이 없는 사람은 뷰를 생성할 수 없다. 

 

뷰의 생성과 삭제

  • CREATE
  • DROP

 

뷰의 종류

  • 단순 뷰
  • 복합 뷰

 

 

 

CREATE

  • CREATE [OR REPLACE]: 뷰를 생성함 [만일 해당 이름의 뷰가 있으면 덮어씀]
  • WITH 제약 조건으로 데이터 제한 가능 - 조건에 맞는 데이터만 입력 & 수정 가능 / 읽기만 가능
  • 뷰를 생성할 수 있는 권한을 받아야만 함
  • USER_VIEWS 딕셔너리안에 생성된다.

 

SCOTT 유저는 권한이 없기 때문에 뷰를 생성할 수 없다.

 

SCOTT에게 SYSTEM 유저로 권한을 부여해 준 다음 뷰를 생성했다.

 

 

뷰 안에 지정해 둔 조건은 해당 쿼리를 실행한 결과와 같다.

 

USER_VIEWS 딕셔너리에서 뷰를 확인할 수 있고, 해당 뷰 안에 저장된 쿼리문을 확인할 수 있다.

 

 

 

DROP

  • 뷰를 삭제하는 명령어
  • USER_VIEWS 딕셔너리 안에 있는 뷰를 삭제하는 것이기 때문에, 
  • 실제 물리적 테이블의 데이터에는 영향을 주지 않는다. 

 

 

 

 

VIEW의 종류

 

출처: https://codedragon.tistory.com/4543

 

단순 뷰

  • 하나의 테이블로 생성된다
  • DML을 사용할 수 있다.

 

  • 위에서 만든 emp_view30 뷰가 단순 뷰이다.

 

단일 뷰에 DML 쿼리를 사용하면 원래 테이블의 데이터도 수정된다. 

 

 

복합 뷰

  • JOIN을 통한 뷰의 생성
  • 두 개 이상의 기본 테이블을 통해 생성된 뷰이다.

 

emp 테이블과 dept 테이블의 deptno이 같은 것에 대해 동일 조인해 뷰를 만들었다.

 

 

복합 뷰에 있어서는 DML 문을 사용할 수 없다.

 

 

 

WITH 제약 조건 

 

  • WITH CHECK OPTION
  • WITH READ ONLY

 

 

WITH CHECK OPTION

  • 뷰를 생성할 때 지정한 부분을 수정할 수 없도록 함
  • 일관적인 결과를 보여 줄 수 있다는 장점이 있다.

 

 

deptno에 30만 들어가도록 WITH CHECK OPTION을 걸어 주었으므로 이외의 값을 넣으면 오류가 생긴다. 

 

 

WITH READ ONLY

  • 기본 테이블의 모든 컬럼 값을 수정할 수 없도록 함

 

WITH READ ONLY 조건이 주어져 있기 때문에 DML 작업을 수행할 수 없다.

 

 

 

Top-N 

  • ROWNUM을 사용해 상위 N 명의 값을 추출
  • 행이 생성된 순서대로 컬럼 번호가 지정되기 때문에, 
  • 일반 테이블에서 WHERE 조건에 ORDER BY를 걸면 해당 순서가 섞여 나온다.
  • VIEW나 서브 쿼리를 사용해 해당 문제를 해결할 수 있다. (여기서는 VIEW만)

 

일반 테이블에서 ORDER BY 조건을 걸었기 때문에 순서가 섞여 나왔다. (12345가 아닌 12346)

 

 

ROWNUM을 지정하기 위해 ORDER BY를 미리 지정한 뷰를 생성하였다.

 

 

뷰에 대하여 ROWNUM 값을 지정하였다.

반응형