본문 바로가기

자린고비 독학하기/자린고비 코딩하기

SQL - 뷰 (VIEW)

반응형

 

 

 

뷰 (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 값을 지정하였다.

반응형

'자린고비 독학하기 > 자린고비 코딩하기' 카테고리의 다른 글

SQL - 시퀀스 (SEQUENCE)  (1) 2019.08.05
SQL - INDEX  (1) 2019.08.05
SQL - 트랜잭션  (0) 2019.08.02
SQL - DML  (0) 2019.08.01
SQL - DATA DICTIONARY VIEW  (0) 2019.08.01