본문

뷰(DataBase-View)

반응형
# 뷰(View)
1. SELECT 명령을 기록하는 데이터베이스 객체
- SELECT 명령 실행결과를 테이블처럼 사용할 수 있도록 만들어 준다.

데이터베이스 객체란 테이블이나 인덱스 등 데이터베이스 안에 정의하는 모든 것을 말한다. 뷰 역시 데이터베이스 객체 중 하나다. 반면 SELECT 명령은 객체가 아니다. SELECT 명령에 이름을 지정할 수도 없고 데이터베이스에 등록되지도 않기 때문이다.

이처럼 본래 데이터베이스 객체로 등록할 수 없는 SELECT 명령을, 객체로서 이름을 붙여 관리할 수 있도록 한 것이 뷰다. SELECT 명령은 실행했을 때 테이블에 저장된 데이터를 결과값으로 반환한다. 따라서 뷰를 참조하면 그에 정의된 SELECT 명령의 실행결과를 테이블처럼 사용할 수 있다.

2. 하나 이상의 기본 테이블에서 유도되는 '가상 테이블'
저장장치 내에 물리적으로 존재하지 않지만 사용자에게는 있는 것처럼 보인다.

뷰를 생성하면 뷰 정의가 시스템 내에 저장되었다가 생성된 뷰 이름을 질의어에서 사용할 경우 질의어가 실행될 때 뷰에 정의된 기본 테이블로 대체되어 기본 테이블에 대해 실행된다.

# 뷰의 생성과 삭제
# 뷰 생성
1
CREATE VIEW 뷰명 AS SELECT 명령
cs

- AS SELECT문 : 일반 SELECT문과 같으며, UNION이나 ORDER BY를 사용할 수 없다.
- WITH CHECK OPTION : 뷰에 대한 갱신이나 삽입 연산이 실행될 때 뷰의 정의 조건을 위배하면 실행을 거부한다.

example) <학생> 테이블에서 학과가 "컴공"인 학생의 학번, 학과 속성을 갖는 뷰를 <DB_학생>이라는 이름으로 정의하시오.
1
2
3
4
CREATE VIEW DB_학생 AS SELECT 학번, 학과
FROM 학생
WHERE 학과 = '컴공'
WITH CHECK OPTION;
cs


WITH CHECK OPTION절은 이 뷰에 대한 갱신이나 삽입 연산이 실행될 때  뷰의 정의 조건(학과 = '컴공')이 위배될 경우 갱신이나 실행을 거부하도록 지정하기 위한 것이다.


# 뷰 삭제
1
DROP VIEW 뷰명
cs

- RESTRICT : 뷰를 다른 곳에서 참조하고 있으면 제거가 취소된다.
- CASCADE : 뷰를 참조하는 다른 뷰나 제약 조껀까지 모두 제거한다.

example) <DB_학생> 뷰를 제거하는 명령문을 정의하시오. 단, 다른 곳에서 참조하고 있으면 제거되지 않게 하시오.
1
DROP VIEW DB_학생 RESTRICT;
cs


# 사용이유
- 서브쿼리 부분을 뷰로 대체하여 SELECT 명령을 간략하게 표현할 수 있다. 
- 복잡한 SELECT 명령을 DB에 등록해 두었다가 추후에 간단히 실행할 수 있다.
- 자주 사용하거나 복잡한 SELECT 명령을 뷰로 만들어 편리하게 사용할 수 있다.

뷰 적용 전)
1
SELECT * FROM (SELECT * FROM sample_table) st;
cs
서브쿼리 : (SELECT * FROM sample_table) st

뷰 적용 후)
1
SELECT * FROM sample_view;
cs



- 참고 : 하루 30분 36강으로 배우는 완전 초보의 sql 따라잡기

반응형

공유

댓글