[DBP] CH2-4. View
🪞 Views
- 하나 이상의 테이블로부터 유도된 이름을 가진 가상 테이블
CREATE [OR REPLACE] VIEW view_name
[col1, col2, ...] -- 컬럼명 변경 시 정의
AS
SELECT statement;
- ex) 학생 테이블의 컴퓨터학과 학생들로 뷰 생성
CREATE OR REPLACE VIEW CSTUDENT (S_ID, S_NAME, S_YEAR) AS SELECT S_ID, S_NAME, S_YEAR FROM STUDENT WHERE S_MAJOR = '컴퓨터학과';
- ex)
CREATE OR REPLACE VIEW MAJOR_SIZE AS SELECT S_MAJOR, COUNT(*) AS ST_NUM FROM STUDENT GROUP BY S_MAJOR;
- ex) 두 개 이상 테이블 연관하여 정의
CREATE OR REPLACE VIEW ENROLL_2004 (S_ID, S_NAME, C_ID) AS SELECT S.S_ID, S.S_NAME, E.C_ID FROM STUDENT S, ENROLL E WHERE S.S_ID = E.S_ID AND E_YEAR = '2004';
🪞 뷰 구조 및 이름 확인
USER_VIEWS
데이터 사전 테이블select view_name, text_length, text from USER_VIEWS;
🪞 뷰 수정
OR REPLACE
옵션CREATE
절에 추가- 테이블이 없으면 만들고, 존재하면 현재 쿼리로 대체
CREATE OR REPLACE VIEW CSTUDENT (S_ID, S_NAME, S_YEAR, S_ADDR)
AS
SELECT S_ID, S_NAME, S_YEAR, S_ADDR
FROM STUDENT
WHERE S_MAJOR = '컴퓨터학과';
🪞 뷰를 통한 데이터 변경
- 뷰가 하나의 테이블을 사용하고, 적절한 권한이 있다면
INSERT
,UPDATE
,DELETE
문을 이용해 뷰가 참조하는 테이블의 데이터 변경 가능 READ ONLY
옵션 사용- 뷰에서 삽입, 갱신, 삭제 불가능!
- ex1)
UPDATE CSTUDENT SET S_YEAR = 3 WHERE S_ID = '20011234';
-> VIEW 수정 + TABLE까지 수정됨!
WITH CHECK OPTION
- 뷰를 생성할 때
WITH CHECK OPTION
옵션을 추가하면, 뷰를 수정할 때 뷰의 제약조건에 맞지 않으면 에러 발생 - ex) Book 테이블에서 출판사에 ‘미디어’가 들어가는 데이터만 모은 뷰 book_view에
WITH CHECK OPTION
추가 X -> 뷰에 ‘미디어’가 들어가지 않는 데이터를 추가해도 원래 테이블 Book에 데이터 추가 됨!WITH CHECK OPTION
추가 O -> 뷰에 ‘미디어’가 들어가지 않는 데이터를 추가하면, 뷰의 제약조건에 맞지 않기 때문에 에러 발생, 데이터 추가되지 않음!
🪞 뷰 삭제
- 뷰는 기본 테이블을 기반으로 하기 때문에 데이터 손실 없이 뷰 삭제 가능
DROP VIEW view_name;