
SQL에서 뷰의 개념

- 데이터베이스 속에는 수많은 테이블들이 있다.
- DBMS를 쓰면 SQL을 쓸 수 있다.
- SQL을 이용해서 뷰를 만든다.

- 충무과 일에 적합한 뷰를 보여준다. (뷰의 역할)
- 뷰를 정의할 때 SQL을 사용한다.
- SQL을 만족하는 결과를 뷰로 정의해서 충무과, 인사과..에 전달을 한다.
- 뷰는 다른 테이블에서 유도된 단일 테이블이다. (질의 결과란 뜻임.)
- 뷰는 SQL 명령어를 통해서 만들어진 질문의 결과다 ~
- 뷰는 가상적인 테이블이다.
- 사용자는 뷰가 테이블처럼 보이지만 실제로 데이터베이스에 저장되는 테이블이랑은 차이가 있음.
- 물리적으로 DB에 저장 X
- 사용자는 뷰에 대해서 질의할 수 있다. (뷰는 또 다른 테이블이기 때문에 가능하다)
- 테이블에 대해서 또 다른 SQL을 실행할 수 있음.
- 이 SQL은 RDBMS에 비해서 닫혀있다. 테이블에 대해서 SQL을 적용하면 테이블이 나오고, 이 테이블에 대해서 또 다른 SQL을 적용하면 또 다른 테이블이 나오는 것을 닫혀있는 연산~이라고 한다.
- 갱신은 제한적으로만 가능하다.
SQL에서 뷰의 명시

뷰의 생성

- SQL 조건에 맞는 결과를 찾아서 4개의 필드로 구성되는 결과 TABLE의 이름을
WORKS_ONI
로 짓겠단다는 뜻.

- 이런식으로 필드 이름을 설정할 수 있다.
- DNAME => "DEPT_NAME"
- COUNT(*) => "NO_OF_EMPS"
- SUM(SALARY) => "TOTAL_SAL"
- SQL에서 뷰는 하나의 테이블처럼 사용될 수 있다.

- 세개의 테이블로부터 뷰가 만들어짐
- 세개 테이블 중에 하나라도 삭제되면 뷰가 유효하지 않아짐.

- sql에서 뷰를 사용하면 질의 작성이 단순해진다.
뷰의 최신성
- 뷰는 항상 최신 정보를 가진다.
- 이유) 세테이블의 튜플의 데이터가 바뀌면 뷰의 데이터도 바로 바뀜
뷰의 특성

- 뷰를 최신 정보로 유지키시는 것은 사용자가 아니라 DBMS의 책임이다.
- 뷰가 질의에서 사용될 때, 그때 바로 DBMS에서 데이터를 만들어서 사용하기 때문이다.
- 뷰는 정의할 때 튜플들로 생성되지 않는다.
- 뷰의 정의시기가 메타 data에 등록이 된다.
ex) v1이 sql1에서 정의가 됐다 할 때, 요것을 meta data에 등록을 한다. => 나중에 v1이 다른 sql한테 사용될 때 이 sql문이 dbms에 의해서 실행이 돼서 그 결과가 v1으로 전달이 된다.
결론) 뷰를 정의할 때 튜플을 생성하는 것이 아니다. 질의에서 뷰를 사용할 때 바로 개선이 되어서 생성된다. 그 대신에 뷰를 정의할 때는 메타데이터에 뷰 정의식을 잘 보관을 해야한다.
뷰의 삭제
- 뷰가 더이상 필요하지 않다면
DROP VIEW 명령
으로 제거함
- 뷰는 보안기법의 일종으로 사용될 수 있다.
- EX) 사용자한테 뷰만 보고 일을 해라. 뷰를 벗어난 데이터는 보지마라.
뷰의 구현

데이터베이스에서 뷰는 하나 이상의 테이블로부터 유도된 가상 테이블이다. 뷰는 실제로 데이터를 저장하지 않으며, 데이터를 조회하는데 사용되는 SQL 쿼리로 정의된다.
질의수정 방식
정의: 뷰는 SQL로 정의가 된다. 이 쿼리는 기본 테이블들로부터 데이터를 가져오는 방식으로 작성된다.
처리방식: 뷰가 포함된 SQL쿼리를 실행할 때, DB 시스템은 뷰 정의를 사용하여 쿼리를 수정한다. 즉, 뷰가 포함된 원래의 SQL 쿼리를 뷰 정의로 대체하여 실제 테이블에 대한 쿼리로 변환한다.
예시: CREATE VIEW view_name AS SELECT ... FROM table_name;로 정의된 뷰를 포함하는 쿼리가 있을 때, 데이터베이스 시스템은 SELECT ... FROM view_name을 SELECT ... FROM table_name으로 변환하여 실행한다.
결론: SQL 쿼리 내에 뷰가 포함되어 있으면, 데이터베이스 시스템은 뷰의 정의를 사용하여 해당 뷰를 실제 테이블을 대상으로 하는 SQL 쿼리로 대체한다.
뷰의 실체화 방식
- 뷰에 대한 요구가 있을 때 임시 뷰 테이블을 생성하고 , 이 임시 테이블로 처리하는 방식

정의: 실체화된 뷰는 일반 뷰와 달리 데이터를 실제로 저장하는 뷰다. 이는 뷰의 결과를 물리적으로 저장해서 이후의 조회를 빠르게 한다.
처리 방식: 뷰에 대한 요구가 있을 때 임시 뷰 테이블을 생성하고, 이 임시 테이블을 사용해서 쿼리를 처리한다. 실체화된 뷰는 주기적으로 또는 특정 이벤트에 따라 갱신된다.
장점: 데이터 조회 성능이 향상된다. 특히, 자주 조회되거나 계산 비용이 높은 뷰의 경우 유리하다.
단점: 데이터를 저장하고 갱신하는 추가 비용이 발생한다.
예시: CREATE MATERIALIZED VIEW view_name AS SELECT ... FROM table_name;로 정의된 실체화된 뷰는 정의 시점에 데이터를 저장하며, 이후 조회 시 저장된 데이터를 사용합니다.
결론: 실체화된 뷰는 뷰의 결과를 물리적으로 저장하여 조회 성능을 향상시키며, 갱신이 필요한 경우 갱신 작업을 수행합니다.
뷰의 갱신
- 뷰에 대한 질의는 언제나 할 수 있지만, 뷰의 갱신은 제한적으로 한다.




- 기본 릴레이션에 대한 갱신으로 변환하는 것이 모호하면, 갱신이 제한적이다.
- 이 부분은 어렵기 때문에 생략함.


- 이 경우에는 뷰의 갱신이 가능하다.
- 뷰의 각 튜플과 기본 릴레이션의 튜플이 정확하게 대응하기 때문임.
그러나, 집단함수(AVERAGE, COUNT)를 사용해서 정의한 뷰는 갱신이 제한적이다.
기타 기능들

주장으로 제약 조건

- 이렇게 만들어서 등록해두면, 항상 월급을 비교해서 역전이 일어나는 경우를 방지한다.
- 만약 INSERT, UPDATE 할 때 그런 경우가 생기면, DB 관리자한테 통보를 한다.


SQL 부가적인 기능들

요약
