[학습 DAY - 11]
뷰
-. 테이블과 같은 부류의 데이터베이스 객체 중 하나
-. 데이터베이스 객체로 등록할 수 없는 SELECT 명령을 객체로서 이름을 붙여 관리할 수 있도록 하는 것
-. SELECT 명령을 기록하는 데이터베이스 객체
-. 뷰를 작성하는 것으로 복잡한 SELECT 명령을 간략하게 표현 가능
-. 뷰는 테이블처럼 취급할 수 있지만 실체가 존재하지 않는다는 의미로 가상테이블
이라 불리기도 함
SELECT * FROM (SELECT * FROM sample54) sq;
의 서브쿼리 부분을 뷰 객체로 만들면SELECT * FROM sample_view_67;
로 간략화 됨
뷰 작성과 삭제
-. 데이터베이스 객체이기 때문에 DDL로 작성하거나 삭제
-. 작성: CREATE VIEW 뷰명(열명1, 열명2, ...) AS SELECT 명령
삭제: DROP VIEW 뷰명
뷰의 특징 및 약점
-. 데이터베이스 객체로서 저장장치에 저장, 하지만 테이블과 달리 대량의 저장공간 필요 X
-. 데이터베이스에 저장되는 것은 SELECT 명령뿐이기 때문, 다만 저장공간을 소비하지 않는 대신 CPU 자원을 사용
-. 뷰의 근원이 되는 테이블에 보관하는 데이터양이 많은 경우, 집계처리를 할 때도 뷰가 사용된다면 처리속도가 떨어짐. + 뷰를 중펍해서 사용하는 경우에도 처리 속도가 떨어질 수 있음
※ 머터리얼라이즈드 뷰
- 일반적으로 뷰는 데이터를 일시적으로 저장했다가 쿼리가 실행 종료될 때 함께 삭제됨, 그에 반해 머터리얼라이즈드 뷰는 데이터를 일시적으로 저장해 사용하는 것이 아니라 테이블처럼 저장장치에 저장해두고 사용
- 따라서 일반적인 뷰처럼 매번 SELECT 명령을 실행할 필요가 없음. 다만 뷰에 지정된 테이블의 데이터가 변경된 경우에는 SELECT 명령을 재실행하여 데이터를 다시 저장
- 이처럼 변경 유무를 확인하여 재실행하는 것은 RDBMS가 자동으로 실행.
- 뷰에 지정된 테이블의 데이터가 자주 변경되지 않는 경우라면 이를 사용하여 뷰의 약점 보완 가능
- MySQL에서는 사용 불가(Oracle과 DB2에서만 사용)
※ 함수 테이블
- 뷰를 구성하는 SELECT 명령은 단독으로도 실행할 수 있어야 함
- 부모 쿼리와 어떤 식으로든 연관된 서브쿼리의 경우 뷰의 SELECT 명령으로 사용 불가
- 함수 테이블은 테이블을 결과값으로 반환해주는 사용자정의 함수
- 함수에는 인수를 지정할 수 있기 때문에 인수의 값에 따라 WHERE 조건을 붙여 결과값을 바꿀 수 있음. 그에 따라 상관 서브쿼리처럼 동작 가능
UNION으로 합집합 구하기
-. 합집합: 집합을 서로 더한 것(겹치는 것은 중복되지 않음)
-. UNION: A U B = A UNION B (합집합을 의미)
-. SELECT 명령의 열의 내용이 서로 일치해야 함, 열 구성이 다른 테이블은 묶을 수 없음
-. 명령 나열 순서가 합집합 결과에 영향을 주진 않지만 결과값의 나열 순서는 달라질 수 있음
-. ORDER BY를 지정할 경우 마지막 SELECT 명령에만 가능하며 ORDER BY 구에 지정하는 열은 별명을 붙여 이름을 일치시킨다
-. 두 집합의 중복된 값을 제거하지 않고 합치고 싶은 경우 UNION ALL을 사용
- SELECT FROM sample71_a UNION SELECT FROM sample71_b;
교집합과 차집합
-. MySQL에서는 지원되지 않음
-. 교집합(두 개의 집합이 겹치는 부분) - INTERSECT,
-. 차집합(집합에서 다른 쪽의 집합을 제거하고 남은 부분) - EXCEPT(Oracle의 경우 MINUS)를 사용