이 게시물은 Database GUI Oracle SQL Developer의 아래 버전 정보를 기준으로 작성되었습니다. Java(TM) 플랫폼 : 1.8.0_321 Oracle IDE : 4.1.5.21.78 |
뷰(VIEW)
개념
하나 이상의 테이블을 조회하는 SELECT문을 저장한 객체. 물리적 데이터를 따로 저장하지 않음. SELECT문의 FROM절에 사용하면 특정 테이블을 조회하는 것과 같은 효과를 얻을 수 있음.
장점
1. SELECT문의 복잡도를 완화하는 편리성
2. 테이블의 특정 열을 노출시키지 않는 보안성
뷰 생성 및 조회
뷰 생성 및 세부 문법 설명
CREATE [OR REPLACE] [FORCE | NOFORCE] VIEW [뷰이름] [열이름1, 열이름2, ... 열이름N(선택)]
AS [저장할 SELECT문]
[WITH CHECK OPTION [CONSTRAINT 제약 조건]]
[WITH READ ONLY [CONSTRAINT 제약 조건]];
OR REPLACE : 같은 이름의 뷰가 이미 존재할 경우에 현재 생성할 뷰로 대체하여 생성(선택). 주로 뷰를 수정할 시 사용한다.
FORCE : 뷰가 저장할 SELECT문의 기반 테이블이 존재하지 않아도 강제로 생성(선택)
NOFORCE : 뷰가 저장할 SELECT문의 기반 테이블이 존재할 경우에만 생성(기본값)(선택)
열이름 : SELECT문에 명시된 이름 대신 사용할 열 이름 지정(생략 가능)(선택)
WITH CHECK OPTION : 지정한 제약 조건을 만족하는 데이터에 한해 DML 작업이 가능하도록 뷰 생성(선택)
제약 조건 포스트 링크 → 링크
WITH READ ONLY : 뷰의 열람, 즉 SELECT만 가능하도록 뷰 생성(선택)
뷰의 생성과 조회 예시
우선 뷰에 사용할 임시 테이블을 생성하고 SELECT문을 작성해 보자.
-- 임시 테이블 생성
CREATE TABLE EMP_V
AS SELECT * FROM EMP WHERE ENAME = 'KING';
-- 데이터 확인
SELECT * FROM EMP_V;
다음은 위 SELECT 쿼리문으로 뷰를 생성해 보자.
-- 위의 SELECT문으로 뷰 생성
CREATE VIEW VW_EMP_V
AS (SELECT * FROM EMP_V);
-- 뷰를 통한 조회
SELECT * FROM VW_EMP_V;
위의 SELECT문과 동일한 결과가 나오는 것을 볼 수 있다.
이번엔 테이블에 데이터를 INSERT 한 뒤 뷰를 통회 조회해 보자.
-- 임시 테이블에 데이터 삽입
INSERT INTO EMP_V(EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
VALUES(7777, '김경완', 'WEB DEV', NULL, TO_DATE('2022/06/20', 'YYYY/MM/DD'), 9999, NULL, 20);
-- 뷰 재조회
SELECT * FROM VW_EMP_V;
뷰 자체에 어떤 수정을 진행하지 않았음에도 임시 테이블에 데이터를 추가하자 추가된 데이터도 조회되는 것을 볼 수 있다. 즉, 뷰는 쉽게 말하면 당시 SELECT문을 실행했을 때의 결과를 저장하는 것이 아니라, SELECT문 자체를 미리 저장해 놓았다가 실행하는 것이라고 볼 수 있다.
뷰 삭제
문법
DROP VIEW [뷰 이름];
→ 실제 데이터가 아닌 SELECT문이 저장된 뷰를 삭제하는 것이므로 테이블이나 데이터가 삭제되는 것은 아님
뷰의 생성과 조회 예시
DROP VIEW VW_EMP_V;
SELECT * FROM VW_EMP_V;
뷰를 삭제했기 때문에 뷰가 존재하지 않는다는 오류 메시지가 출력된다.
SELECT * FROM EMP_V;
그러나 임시로 제작했던 테이블은 삭제되지 않고 여전히 남아 있다.
'개발 지식 > [DBMS] Oracle' 카테고리의 다른 글
[Oracle] DDL(8) - 시퀀스(SEQUENCE) (0) | 2022.06.22 |
---|---|
[Oracle] DDL(7) - 시노님(SYNONYM) (0) | 2022.06.21 |
[Oracle] DDL(5) - 인덱스(INDEX) (0) | 2022.06.19 |
[Oracle] DDL(4) - 테이블명 변경(RENAME) / 테이블 데이터 삭제(TRUNCATE) / 테이블 삭제(DROP) (0) | 2022.06.17 |
[Oracle] DDL(3) - 테이블 구조 변경(ALTER TABLE) (0) | 2022.06.16 |