기록
database - 뷰(View) 본문
뷰와 테이블의 차이는, 실제 데이터를 저장하고 있는지의 여부이다.
보통, 테이블을 만들어서 INSERT문으로 데이터를 추가하면 데이터베이스에 데이터가 저장된다.
이 데이터가 실제 저장되는 위치는 컴퓨터 내의 기억장치(일반적으로 하드디스크)다.
따라서 SELECT문으로 데이터를 검색할 때는 실제로 기억장치에서 데이터를 끌어와서 다양한 계산 후 사용자에게 결과를 반환한다.
반면, 뷰는 데이터를 기억장치에 저장하지 않는다. 뷰가 저장하는 것은 'SELECT'문 자체이다.
뷰에서 데이터를 꺼내려 할 때, 뷰는 내부적으로 SELECT문을 실행해서 일시적인 가상 테이블을 만든다.
- 뷰의 이점
1) 데이터를 저장하지 않아 기억장치용량을 절약할 수 있다.
(테이블은 실제 데이터를 저장하는 반면, 뷰는 테이블에서 데이터를 꺼내는 SELECT문을 저장한다.)
2) 자주 사용하는 SELECT문을 뷰로 작성해 반복해서 사용할 수 있다.
3) 뷰가 포함하는 데이터는 원 테이블과 연동해서 자동으로 최신 상태를 유지한다.
- 뷰 생성하기
CREATE VIEW 문을 사용한다.
AS키워드 뒤에는 SELECT문을 기술한다.
SELECT문 열과 뷰 열의 순서가 일치해야 한다.
CREATE VIEW GoodsSum2 (goods_classify, cnt_goods) -- 1) 뷰의 열명
AS
SELECT goods_classify, COUNT(*) -- 2) 뷰 정의 내용 (내용 자체는 일반적인 SELECT문)
FROM Goods
GROUP BY goods_classify
GoodsSum이라는 뷰가 데이터베이스에 생성된다.
- 뷰 사용 방법은 테이블과 동일하며, SELECT문의 FROM구에 쓸 수 있다.
SELECT goods_classify, cnt_goods
FROM GoodsSum; -- FROM 구에 테이블 대신 뷰를 지정한다.
집계 작업을 빈번히 해야하는 경우, 매번 GROUP BY와 COUNT함수로 SELECT문을 작성할 필요 없이
뷰를 한번 작성해 두어 SELECT문을 이용해서 간단하게 집계결과를 얻을 수 있다.
이는 뷰가 SELECT문을 저장하고 있기 때문이다.
뷰를 FROM구에 지정하면, 검색은 다음 두단계를 거친다.
1) 먼저, 뷰에 정의된 SELECT문이 실행되고,
2) 그 결과에 대한 뷰를 FROM구에 지정한 SELECT문이 실행된다.
뷰 검색에서는 항상 두 개 이상의 SELECT문이 실행되는 것이다.
(두개 이상 다단뷰가 가능하지만 성능 저하가 일어나기 때문에 사용은 지양하자.)
- 뷰 제약 사항
1) 뷰 정의에 ORDER BY 구는 사용할 수 없다.
테이블과 동일하게 뷰에서도 '행에는 순서가 없다'고 정하기 때문이다.
2) 뷰와 테이블 갱신은 연동해서 이루어진다. 따라서 집약된 뷰는 갱신 불가능.
- 뷰 삭제
DROP VIEW 뷰명 (뷰 열명1, 뷰 열명2.. )
DROP VIEW GoodsSum;
의존하는 뷰 단위 삭제 시) DROP VIEW GoodsSum CASCADE;
'[Study] > Database' 카테고리의 다른 글
database - 상관 서브쿼리 (0) | 2019.07.29 |
---|---|
database - 서브쿼리와 뷰 (0) | 2019.07.29 |
database - 트랜잭션의 ACID 특성 (0) | 2019.07.28 |
database - 트랜잭션의 정의와 구문 (0) | 2019.07.28 |
database - ORDER BY (0) | 2019.07.26 |