SQL 뷰
서브쿼리는 FROM 구에서도 기술할 수 잇었다. 여기서 FROM 구에 기술된 서브쿼리에 이름을 붙이고 데이터베이스 객체화하여 쓰기 쉽게 한 것을 뷰라고 한다.
1. 뷰
데이터베이스 객체란 테이블이나 인덱스 등 데이터베이스 안에 정의하는 모든것을 말한다.
뷰 역시 그중 하나이다.
SELECT 명령은 객체가 아니다.
이처럼 본래 DB 객체로 등록할 수 없는 SELECT 명령을, 객체로서 이름을 붙여 관리할 수 있도록 한 것이 뷰이다.
-가상 테이블
뷰는 데이블처럼 취급할 수 있지만 '실체가 존재하지 않는다'라는 의미로 '가상 테이블'이라 불린다.
INSERT나 UPDATE, DELETE 명령에서도 조건이 맞으면 가능하지만 사용에 주의할 필요가 있다.
2. 뷰 작성과 삭제
DROP VIEW veiw_sample54;
3. 뷰의 약점
뷰는 저장공간을 소비하지 않는 대신 CPU 자원을 사용한다.
검색뿐만 아니라 ORDER BY로 정렬하거나 GROUP BY로 집게 할 수 있습니다. 이러한 처리는 계산능력을 필요로 하기 대문에 컴퓨터의 CPU를 사용한다.
-머티리얼라이즈드 뷰(Materialized View)
뷰를 중첩해서 사용하는 경우에 처리 속도가 떨어지기 쉽다.
이 같은 상황을 회피하기 위해 사용할 수 있는 것이 머티리얼라이즈드 뷰이다.
일반적인 뷰는 데이터를 일시적으로 저장했다가 쿼리가 실행 종료될 때 함께 삭제된다.
그에 비해 머티리얼라이즈드 뷰는 데이터를 일시적으로 저장해 사용하는 것이 아니라 테이블처럼 저장장치에 저장해두고 사용한다.
처음 참조되었을 때 데이터를 저장해둔다.
이후 다시 사용할 때 저장해 둔 데이터를 그대로 사용한다.
다반 뷰에 지정된 테이블의 데이터가 변경된 경우에는 select 명령을 재실행하여 데이터를 다시 저장한다.
변경 유무를 확인하여 재실행하는건 RDBMS가 자동으로 실행한다.
오라클과 DB2에서만 지원한다.
-함수 테이블
상관 서브쿼리는 뷰로 만들수 없다.
대신 이 같은 뷰의 약점을 함수 테이블을 사용하여 회피할 수 있다.
함수에는 인수를 지정할 수 있기 때문에 인수의 값에 따라 where 조건을 붙여 결괏값을 바꿀 수 있다. 그에 따라 상관 서브쿼리처럼 동작할 수 있다.