데이터베이스 객체란 TABLE이나 INDEX등 데이터베이스 안에 정의하는 모든 것을 말한다.
VIEW 역시 데이터베이스 객체 중 하나이다.
반면 SELECT 명령은 데이터베이스 객체가 아니다. (명령에 이름을 지정할 수도 없고, 데이터베이스에 등록되지도 않기 때문)
이렇게 데이터베이스 객체로 등록할 수 없는 SELECT 명령을, 객체로서 이름을 붙여 관리할 수 있도록 한 것이 VIEW
SELECT 명령은 실행했을 때 테이블에 저장된 데이터를 결괏값으로 반환
-> VIEW를 참조하면 그에 정의된 SELECT 명령의 실행결과를 테이블처럼 사용할 수 있다.
=> 즉, VIEW는 SELECT 명령을 기록하는 데이터베이스 객체이다
다음의 예시처럼 FROM구에는 서브쿼리를 사용할 수 있다.
SELECT * FROM (SELECT * FROM test_table) sq;
앞의 예에서 서브쿼리 부분을 VIEW로 만들면 다음과 같은 SELECT 명령이 가능하다.
SELECT * FROM view_name;
=> VIEW
: FROM 구에 기술된 서브쿼리에 이름을 붙이고 데이터베이스 객체화하여 쓰기 쉽게 한 것
(서브쿼리 : SELECT 명령에 의한 데이터 질의. 상부가 아닌 하부의 부수적인 질의)
VIEW는 TABLE처럼 취급할 수 있지만 '실체가 존재하지 않는다'라는 의미로 가상 테이블
이라 불리기도 한다.
VIEW는 TABLE처럼 데이터를 쓰거나 지울 수 있는 저장공간을 가지지 않는다.
-> SELECT 명령에서만 사용하는 것을 권장 (INSERT, UPDATE, DELETE에서도 조건이 맞으면 가능하지만 주의해야함)
CREATE VIEW 뷰명 AS + SELECT 명령
CREATE VIEW view_name AS
SELECT * FROM table_name; // VIEW 생성
SELECT * FROM view_name; // VIEW 사용
CREATE VIEW 뷰명(열명1,열명2,...) AS + SELECT 명령
CREATE VIEW view_name(n, v, v2) AS
SELECT no, a, a*2 FROM table_name; // VIEW 생성
SELECT * FROM view_name WHERE n=1; // VIEW 사용
DROP VIEW view_name;
VIEW를 참조하면 뷰에 등록되어 있는 SELECT명령이 실행됨 -> 실행결과는 일시적으로 보존
VIEW를 참조할 때마다 SELECT 명령이 실행됨
Materizalized View는 처음 참조되었을 때 데이터를 저장해둔다.
이후 다시 참조할 때 이전에 저장해 두었던 데이터를 그대로 사용한다.
-> 일반적인 VIEW처럼 매번 SELECT명령을 실행할 필요가 없다.
(다만, VIEW에 지정된 TABLE의 데이터가 변경된 경우에는 RDBMS가 자동으로 SELECT명령을 재실행하여 데이터를 다시 저장)
=> VIEW에 지정된 TABLE의 데이터가 자주 변경되지 않는 경우라면 Materialized View를 사용하여 VIEW의 약점을 어느정도 보완 가능! 근데.. MySQL에서는 사용할 수 없다.