뷰
개요
뷰는 select문의 결과물을 저장하여 테이블처럼 사용하는 것이다.
흔히 가상의 테이블이라 부르며, 한번 만든 뒤에는 다른 사용자들도 사용할 수 있다는 장점이 있다.
뷰는 메타데이터로서, 디스크게 물리적 데이터가 저장되지는 않는다.
지피티에게 물어보니 물리데이터를 저장하는 materialized view도 있기는 하댄다.
뷰는 그냥 쿼리를 간소화시킨다는 점에서 장점이 있다.
결국 원본 테이블에서 데이터를 가져오는 것이며, 그렇기에 내부적으로는 뷰에 정의됐던 쿼리가 실제로 실행되는 것이다.
다시 말해, 뷰를 통해서 쿼리의 성능을 올릴 수는 없다.
예시
CREATE OR REPLACE VIEW V_STARBUCKS_POPLTN_INFO AS
SELECT A.BSSH_NO
, A.CMPNM_NM
, A.BHF_NM
, A.ADSTRD_CD
, B.ADSTRD_NM
, SUM(C.POPLTN_CNT) AS SUM_POPLTN_CNT
FROM TB_BSSH A
, TB_ADSTRD B
, TB_POPLTN C
WHERE ( CMPNM_NM LIKE '%스타벅스%'
OR
UPPER(CMPNM_NM) LIKE '%STARBUCKS%'
)
AND A.ADSTRD_CD = B.ADSTRD_CD
AND B.ADSTRD_CD = C.ADSTRD_CD
AND C.STD_YM = '202010'
AND C.POPLTN_SE_CD = 'T'
GROUP BY A.BSSH_NO, A.CMPNM_NM, A.BHF_NM, A.ADSTRD_CD, B.ADSTRD_NM
ORDER BY A.BSSH_NO, A.CMPNM_NM, A.BHF_NM, A.ADSTRD_CD, B.ADSTRD_NM
;
create를 통해 뷰를 만들고, as 로 정확한 구문을 작성한다.
이제부터는 저걸 그 자체로 테이블처럼 사용할 수 있다.
이거 완전 서브쿼리..
이 책에서 나오는지는 모르겠지만 with문과도 비슷하다.
뷰는 독립적인 인덱스를 가질 수 없다는 특징도 잇따.
그래서 테이블만큼 빠른 접근이 안 되기에, 오히려 성능적으로는 떨어질 것도 감안해야 한다.
위에서 from 절의 서브 쿼리를 인라인 뷰라고 부른다고 했었는데, 그때의 뷰가 바로 이것을 말한다.