포스트

OracleSQL 핵심정리8 - 뷰(VIEW)와 인라인 뷰

뷰의 개념과 생성

  • 기본 테이블에서 파생된 객체로서, 기본 테이블에 대한 하나의 쿼리문
  • 사용자에게 주어진 뷰를 통해서 기본 테이블을 제한적으로 사용
  • CREATE VIEW [스키마명] 뷰명 AS 셀렉트문 - 뷰 생성
  • 복잡하고 긴 쿼리문을 뷰로 정의하여 접근을 단순화하고 보안에 유리

뷰의 내부 구조와 USER_VIEWS 데이터 딕셔너리

  • 사용자가 뷰에 대해서 질의를 하면 USER_VIEWS에서 뷰에 대한 정의를 조회
  • 기본 테이블에 대한 뷰의 접근 권한을 살핀 후 질의를 통해 데이터를 검색하여 출력
    • ex) SELECT VIEW_NAME, TEXT FROM USER_VIEWS;
  • 갱신 가능한 뷰(집계 함수·DISTINCT·GROUP BY 등이 없는 뷰)에 DML 을 하면 기본 테이블이 변경됨

뷰 제거

  • DROP VIEW 뷰명; - 뷰 제거

뷰의 다양한 옵션

  • OR REPLACE VIEW : 존재하지 않는 뷰이면 새로운 뷰를 생성하고 존재하는 뷰이면 그 내용을 변경
    • ex) CREATE OR REPLACE VIEW 뷰명 AS 셀렉트문;
  • FORCE : 기본 테이블 없이 뷰를 생성
    • ex) CREATE OR REPLACE FORCE VIEW 뷰명 AS 셀렉트문;
    • 경고와 함께 기본 테이블이 없는 뷰가 생성
  • WITH CHECK OPTION : 뷰 정의 끝에 붙여, 변경 결과가 뷰의 조건(WHERE)을 벗어나는 INSERT·UPDATE 를 막음
  • WITH READ ONLY : 뷰를 통해서 기본테이블의 어떤 컬럼에 대해서도 내용을 절대 변경할 수 없도록 함

인라인 뷰로 TOP-N

  • N순위까지의 데이터를 얻어올 때 ROWNUM을 사용
  • ROWNUM은 행을 가져오는 순서대로 붙는 번호라, 정렬 후 순번을 매기려면 인라인 뷰에서 먼저 ORDER BY 해야 함
  • ex) SELECT ROWNUM, 컬럼명 FROM (SELECT 컬럼명 FROM 테이블명 ORDER BY 정렬컬럼 DESC) WHERE ROWNUM <= N; - 정렬된 결과에서 상위 N행
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.