SQL 첫걸음 30강] 뷰
##본 포스팅은 "SQL 첫걸음 - 아사이 아츠시" 책을 보고 요약한 것입니다.
뷰
뷰는 테이블과 같은 부류의 데이터베이스 객체 중 하나이다.
본래 데이터베이스 객체로 등록할 수 없는 SELECT 명령을, 객체로서 이름을 붙여 관리할 수 있도록 한 것이 뷰이다.
따라서 뷰를 참조하면 그에 정의된 SELECT 명령의 실행결과를 테이블처럼 사용할 수 있다.
FROM 구에는 서브쿼리를 사용할 수 있다.
SELECT * FROM (SELECT * FROM table2) sq;
SELECT * FROM sample_view_1;
뷰를 정의할 때는 이름과 SELECT 명령을 지정한다.
뷰를 만든 후에는 SELECT 명령에서 뷰의 이름을 지정하면 참조할 수 있다.
앞의 예에서는 서브쿼리 부분이 단순한 SELECT 명령으로 되어있지만, 실제 업무에서는 WHERE 구로 지정하거나 GROUP BY 와 같은 더 복잡한 명령으로 이루어지는 경우가 많다.
이런 경우 서브쿼리 부분을 뷰로 대체하여 SELECT 명령을 간략하게 표현할 수 있다.
또한 뷰를 사용함으로써 복잡한 SELECT 명령 또는 자주 사용하는 명령을 데이터베이스에 등록해두었다가 나중에 간단히 실행할 수도 있다.
- 가상 테이블
뷰는 테이블처럼 취급할 수도 있지만, '실체가 존재하지 않는다'는 의미로 가상 테이블이라고 불리기도 한다.
뷰 작성과 삭제
1. 뷰 작성
CREATE VIEW 다음에 뷰의 이름을 지정하고, AS로 SELECT 명령을 지정한다.
* AS 키워드는 생략할 수 없다.
CREATE VIEW 뷰명 (열명1, 열명2...) AS SElECT 명령
뷰의 열 지정을 생략한 경우에는 SELECT 명령의 SElECT 구에서 지정하는 열 정보가 수집되어 자동적으로 뷰의 열로 지정된다.
반대로 열을 지정한 경우에는 SELECT 명령의 SELECT 구에 지정한 열보다 우선된다.
다만 SELECT 명령의 SELECT 구와 같은 수의 열을 일일이 지정해야 하므로 SELECT 명령의 모든 열을 사용할 경우에는 열을 지정하지 않은 편이 낫다.
2. 뷰 삭제
뷰를 삭제할 경우는 DROP VIEW를 사용한다.
DROP VIEW sample_view_1;
뷰의 약점
뷰는 데이터베이스 객체로서 저장장치에 저장된다. 하지만 테이블과 달리 대량의 저장공간을 필요로 하지 않는다.
데이터베이스에 저장되는 것은 SELECT 명령뿐이기 떄문이다. 다만 저장공간을 소비하지 않는 대신 CPU 자원을 사용한다.
뷰의 근원이 되는 테이블에 보관하는 데이터양이 많은 경우, 집계처리를 할 때도 뷰가 사용된다면 처리속도가 많이 떨어질 수밖에 없다.
뷰를 중첩해서 사용하는 경우에도 처리 속도가 떨어지기 쉽다.
- 머티리얼라이즈드 뷰(Materialized View)
머티리얼라이즈드 뷰는 데이터를 일시적으로 저장해 사용하는 것이 아니라 테이블처럼 저장장치에 저장해두고 사용한다.
뷰가 처음 참조되었을 때 데이터를 저장해두고, 이후 다시 참조할 때 이전에 저장해 두었던 데이터를 그대로 사용한다.