OracleSQL 핵심정리8 - 뷰(VIEW)와 인라인 뷰
뷰의 개념과 생성
- 기본 테이블에서 파생된 객체로서, 기본 테이블에 대한 하나의 쿼리문
- 사용자에게 주어진 뷰를 통해서 기본 테이블을 제한적으로 사용
CREATE VIEW [스키마명] 뷰명 AS 셀렉트문- 뷰 생성- 복잡하고 긴 쿼리문을 뷰로 정의하여 접근을 단순화하고 보안에 유리
뷰의 내부 구조와 USER_VIEWS 데이터 딕셔너리
- 사용자가 뷰에 대해서 질의를 하면 USER_VIEWS에서 뷰에 대한 정의를 조회
- 기본 테이블에 대한 뷰의 접근 권한을 살핀 후 질의를 통해 데이터를 검색하여 출력
- ex)
SELECT VIEW_NAME, TEXT FROM USER_VIEWS;
- ex)
- 갱신 가능한 뷰(집계 함수·DISTINCT·GROUP BY 등이 없는 뷰)에 DML 을 하면 기본 테이블이 변경됨
뷰 제거
DROP VIEW 뷰명;- 뷰 제거
뷰의 다양한 옵션
OR REPLACE VIEW: 존재하지 않는 뷰이면 새로운 뷰를 생성하고 존재하는 뷰이면 그 내용을 변경- ex)
CREATE OR REPLACE VIEW 뷰명 AS 셀렉트문;
- ex)
FORCE: 기본 테이블 없이 뷰를 생성- ex)
CREATE OR REPLACE FORCE VIEW 뷰명 AS 셀렉트문; - 경고와 함께 기본 테이블이 없는 뷰가 생성
- ex)
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 라이센스를 따릅니다.