뷰는 테이블과 같은 부류의 데이터베이스 객체 중 하나이다.
뷰의 작성 및 삭제
CREATE VIEW 뷰명 AS SELECT 명령 DROP VIEW 뷰명
서브쿼리는 FROM 구에서도 기술할 수 있으며 이 서브쿼리에 이름을 붙이고 데이터베이스 객체화하여 쓰기 쉽게 한 것을 뷰라고 한다.
본래 데이터베이스 객체로 등록할 수 없는 SELECT 명령을, 객체로서 이름을 붙여 관리할 수 있도록 한 것이 뷰이다. 뷰 참조 시 SELECT 명령 실행시 저장된 데이터를 테이블처럼 사용할 수 있다.
뷰는 SELECT 명령을 기록하는 데이터베이스 객체다!
SELECT * FROM (SELECT * FROM sample54) sq;
SELECT * FROM sample_view_67;
뷰를 정의할 때는 이름과 SELECT 명령을 지정한다. 뷰를 만든 후 SELECT 명령에서 뷰의 이름을 지정하면 참조가 가능하다.
뷰를 작성하는 것으로 복잡한 SELECT 명령을 간략하게 표현할 수 있다.
뷰는 실체가 존재하지 않는다
라는 의미로 가상 테이블이라고 불리기도 한다. 테이블 처럼 데이터를 쓰거나 지울 수 있는 저장공간을 가지지 않는다. SELECT 명령에서만 사용하는 것을 권장한다.
DDL로 작성 혹은 삭제
CREATE VIEW
DROP VIEW
CREATE VIEW
CREATE VIEW 뷰명 AS SELECT 명령
뷰는 필요에 따라 열을 지정할 수도 있다. 이 경우 이름 뒤에 괄호로 묶어 열을 나열한다.
CREATE VIEW 뷰명(열명1, 열명2, ...) AS SELECT 명령
열 지정 생략시 SELECT 명령의 열 정보가 수집되어 자동적으로 뷰의 열로 지정된다. 반대로 열을 지정한 경우에는 SELECT 명령의 SELECT 구에 지정한 열보다 우선된다. (같은 수의 열을 일일이 지정 -> 지정하지 않는 편이 낫다)
DROP VIEW
DROP VIEW 뷰명
뷰는 저장공간을 사용하지 않는 대신 CPU 자원을 사용한다.
뷰를 참조하면 뷰에 등록되어 있는 SELECT 명령이 실행된다. 실행 결과는 일시적으로 보존되며, 뷰를 참조할 때마다 SELECT 명령이 실행된다.
뷰의 근원이 되는 테이블에 보관하는 데이터양이 많은 경우, 집계처리를 할 때도 뷰가 사용된다면 처리속도가 많이 떨어질 수 밖에 없다. 뷰를 중첩 -> 처리속도 하락
머티리얼라이즈드 뷰는 데이터를 일시적으로 저장해 사용하는 것이 아니라 테이블처럼 저장장치에 저장해두고 사용한다. 처음 참조되었을 때 데이터를 저장해둔 후 다시 참조할 때 이전에 저장해 두었던 데이터를 그대로 사용한다. 뷰에 지정된 테이블의 데이터가 변경된 경우에 SELECT 명령을 재실행하여 데이터를 다시 저장한다. (변경 유무 확인 재실행 -> RDBMS 자동 실행)
MySQL 사용 불가
뷰를 구성하는 SELECT 명령은 단독으로도 실행 할 수 있어야 한다. 부모 쿼리와 어떤식으로 연관된 서브쿼리의 경우 뷰의 SELECT 명령으로 사용하 ㄹ수 없다. -> 함수 테이블을 사용하여 회피