2021-03-12
VIEW란 기존의 존재하는 테이블로 만들어진 가상의 테이블이라고 정의할 수 있다. VIEW를 통해 필요한 데이터만 정의해서 관리할 수 있으며, VIEW에 정의되지 않은 데이터들은 사용자에게 보이지 않기 때문에, 데이터를 비교적 안전하게 관리할 수 있다. 추가적으로 VIEW를 통해 쿼리를 간단히 할 수 있다는 장점도 있다.
- 예제 테이블 ( SEE_INFO )
아래는 뷰가 참고할 원본 테이블 SEE_INFO의 데이터이다.
- VIEW 생성
SEE_INFO 테이블에서 나이가 25세보다 많은 사람의 NAME과 GRADE의 정보 추출 -> VIEW 생성
CREATE VIEW SEE_TEST1
AS SELECT NAME, GRADE
FROM SEE_INFO
WHERE AGE > 25;
CREATE를 통해 VIEW를 생성하며, 이후 AS SELECT 문을 통해 자신이 원하는 형태의 데이터만 추출하여, 나타낼 수 있습니다.
- VLEW 실행
기존의 SELECT 문으로 일일이 조건을 부여해야 했던 쿼리문이 아래와 같이 간단하게 요약된 형태로 사용된다.
SELECT * FROM SEE_TEST1;
- VIEW 수정
SEE_INFO 테이블에서 나이가 '25'세보다 많은 사람의 NAME과 GRADE의 정보 추출 -> VIEW 생성
위의 내용을 아래와 같이 수정하고자 원한다면
SEE_INFO 테이블에서 나이가 '30'세보다 많은 사람의 NAME과 GRADE의 정보 추출 -> VIEW 생성
CREATE OR REPLACE VIEW SEE_TEST1
AS SELECT NAME, GRADE
FROM SEE_INFO
WHERE AGE > 30;
간단히 CREATE에서 CREATE OR REPLACE로 바꾸어주고 이후 수정하고 싶은 VIEW 이름과 다시 AS SELECT 문으로 VIEW를 재정의 해주면 된다. 이후 SELECT * FROM SEE_TEST 1;으로 다시 실행시켜 보면 아래와 같이 30세 이상의 사람의 데이터로 변경되어 정상 출력되는 것을 확인할 수 있다.
- VIEW 옵션
WITH CHECK OPTION : 테이블을 DML로 CRUD 수행 시 VIEW의 범주 내에서만 실행되도록 하는 옵션
CREATE OR REPLACE VIEW SEE_TEST1
AS SELECT SEENUM, NAME, AGE
FROM SEE_INFO
WHERE AGE > 30
WITH CHECK OPTION;
조건은 30세 이상 번호 / 이름 / 나이를 추출 -> SEE_TEST 1 테이블 수정
-- 범주 30세 이상이 아니기 때문에 INSERT 되지 않음
INSERT INTO SEE_TEST VALUES(99, 'HI_YOU', 25);
-- 범주 30세 이상이기 때문에 INSERT됨
INSERT INTO SEE_TEST1 VALUES(99, 'HI_YOU', 35);
VIEW를 수정한 후 INSERT 문을 수행하면 30세 이상의 조건을 충족하지 않는 첫 번째 25세 INSERT 문은 삽입되지 않으며, 35세를 입력한 두 번째 INSERT 구문이 테이블에 삽입된다.
WITH READ ONLY : VIEW에 대한 DML 작업이 불가하며, 데이터 확인만 가능한 옵션이다.
CREATE OR REPLACE VIEW SEE_TEST1
AS SELECT SEENUM, NAME, AGE
FROM SEE_INFO
WHERE AGE > 30
WITH READ ONLY;
메인 이미지 출처: Photo by Olga Kysliuk on Unsplash