본문 바로가기

데이터분석/SQL

SQL 첫걸음 - 뷰 작성과 삭제

- 뷰 : 테이블과 같은 부률의 데이터베이스 객체 중 하나

- FROM 구에 기술된 서브쿼리에 이름을 붙이고 데이터베이스 객체화하여 쓰기 쉽게 한 것을 뷰라고 함

 

1. 뷰

- 본래 데이터베이스 객체로 등록할 수 없는 SELECT 명령을, 객체로서 이름을 붙여 관리할 수 있도록 한 것

- SELECT 명령 실행 시 테이블에 저장된 데이터를 결과값으로 반환, 따라서 뷰를 참조하면 정의된 SELECT 명령의 실행결과를 테이블처럼 사용 가능

* 뷰는 SELECT 명령을 기록하는 데이터베이스 객체!

 

- FROM 구에 서브쿼리 사용할 수 있음 

SELECT * FROM (SELECT * FROM sample54) sq;

 

- 위 서브쿼리 부분을 '뷰 객체'로 만듬

SELECT * FROM sample_view_67;

- sample_view_67은 뷰 이름

- 뷰를 정의할 때는 이름과 SELECT 명령을 지정, 뷰를 만든 후에는 SELECT 명령에서 뷰의 이름을 지정하면 참조가능

* 뷰를 작성하는 것으로 복잡한 SELECT 명령을 간략하게 표현할 수 있음!

 

가상 테이블

- 뷰는 테이블처럼 취급할 수 있지만 '실체가 존재하지 않는다'라는 의미로 '가상 테이블'이라 불리기도함

- SELECT 명령으로 이루어지는 뷰는 테이블처럼 쓰거나 지울 수 있는 저장공간을 가지지 않음

- SELECT 명령에서만 사용하는 것 권장(INSERT, UPDATE, DELETE에서는 권장 X)

 

2. 뷰 작성과 삭제

- 데이터베이스 객체이므로 DDL로 작성하거나 삭제

뷰의 작성

CREATE VIEW 뷰명 AS SELECT 명령
CREATE VIEW sample_view_67 AS SELECT * FROM sample54;

SELECT * FROM sample_view_67;

뷰 작성하기 

 

CREATE VIEW에서 열 지정하기

CREATE VIEW 뷰명 (열명1, 열명2, ...) AS SELECT 명령
CREATE VIEW sample_view_672(n, v, v2) AS
	SELECT no, a, a*2 FROM sample54;
SELECT * FROM sample_view_672 WHERE n =1;

열을 지정해 뷰 작성하기

- 뷰의 열 지정을 생략한 경우 SELECT 명령의 SELECT 구에서 지정하는 열 정보가 수집되어 자동적으로 뷰의 열로 지정됨

- 열을 지정한 경우는 SELECT 명령의 SELECT 구에 지정한 열보다 우선

- SELECT 명령의 모든 열을 사용할 경우에는 열을 지정하지 않는 것이 나음

- 열 이외는 정의할 수 없음, 자료형이나 제약도 지정할 수 없음

 

뷰 삭제

DROP VIEW 뷰명
DROP VIEW sample_view_67;

뷰 삭제하기

 

3. 뷰의 약점

- 데이터베이스 객체로서 저장장치에 저장, 그러나 테이블과 달리 대량의 저장공간을 필요로 하지 않음

- 데이터베이스에 저장되는 것은 SELECT 명령뿐!

- 뷰를 참조하면 뷰에 등록되어 있는 SELECT 명령이 실행됨, 실행 결과는 일시적으로 보존, 뷰를 참조할 때마다 SELECT 명령이 실행됨

 

머티리얼라이즈드 뷰

- 뷰의 근원이 되는 테이블에 보관하는 데이터양이 많은 경우, 집계처리를 할 때도 뷰가 사용된다면 처리속도가 많이 떨어짐

- 뷰를 중첩해서 사용하는 경우에도 처리속도가 떨어짐

- 일반적으로 뷰는 데이터를 일시적으로 저장, 쿼리가 실행 종료될 때 함께 삭제됨,

머티리얼라이즈드 뷰는 데이터를 일시적으로 저장해 사용하는 것이 아니라 테이블처럼 저장장치에 저장해두고 사용

- 머티리얼라이즈드 뷰는 처음 참조된 데이터를 저장, 이후 다시 참조할 때 저장해두었던 데이터 그대로 사용

- 뷰에 지정된 테이블의 데이터가 변경된 경우는 SELECT 명령을 재실행하여 데이터를 다시 저장

- 뷰에 지정된 테이블의 데이터가 자주 변경되지 않는 경우는 머티리얼라이즈드 뷰를 사용하여 뷰의 약점 보완가능

- Oracle, DB2에서만 사용할 수 있는 데이터객체 / MySQL X

 

함수 테이블

- 뷰를 구성하는 SELECT 명령은 단독으로도 실행할 수 있어야함