5월 31일 월요일 (15일차) - 뷰ㅇ

@_@·2021년 5월 31일
0

Database

목록 보기
27/28

<목차>
ㅇ 뷰 생성
ㅇ 뷰 수정
ㅇ 복합 뷰 생성
ㅇ 뷰에 DML 수행




(이제 2권 시작. 11장)

ㅇ VIEW 뷰

  • 사용 목적
    • 데이터 액세스를 제한하기 위해 : 보안과 관련된 객체야 (가장 큰 목적 : 보안 )
    • 테이블은 부서 전체를 볼 수 있어. 10번 부서 사람이 굳이 20번 부서 사람 정보 볼 필요 없잖아. -> 뷰를 이용해서 10번 부서 사원의 정보만 제한해서 보여줌
    • 복잡한 질의를 쉽게 작성하기 위해 : 탑 N 분석과 같은
    • 데이터 독립성을 제공하기 위해
    • 동일한 데이터로부터 다양한 결과를 얻기 위해

ㅇ 단순 뷰, 복합 뷰

  • 테이블의 데이터 제한해서 보여주는 거니까 테이블이 있긴 해야겠지
  • 단순 뷰 : 테이블 데이터가 원본 그대로
  • 복합 뷰 : 변한 데이터. 변경된 데이터를 보여줌. 예) AVG(salary)

ㅇ 뷰 생성

  • CREATE TABLE AS 서브쿼리와 비슷해. 테이블 대신 뷰로 하면 되는 거야

80번 부서의 정보만 가져오겠다.

CREATE VIEW empvu80
AS SELECT employee_id, last_name, salary
   FROM employees
   WHERE department_id = 80
  • desc와 select * from empvu80 이용해서 잘 만들어졌는지 확인
    사용자들은 얘가 뷰인지 테이블인지 알 방법 없어. 셀렉트 문장 똑같이 사용하면 돼

ㅇ 열 별칭 사용하여 뷰 생성

  • CREATE TABLE 에서 그러했듯이
CREATE VIEW salvu50
AS SELECT employee_id ID_NUMBER, last_name NAME, salary*12 ANN_SALARY
FROM employees
WHERE department_id = 50
  • 테이블의 열 자체가 아니라 salary*12로 열을 새로 만들 수도 있어
  • 뷰를 제대로 잘 사용하려면 SELECT를 어떻게 잘 사용하는지가 중요해지겠지

ㅇ 컬럼 헤딩 만드는 방법 2가지 (테이블 만들 때와 동일)

  • CREATE 절에 컬럼 이름 명시하는 방법
  • AS 서브쿼리의 SELECT 리스트절에 알리아스 주는 방법



ㅇ 뷰와 테이블의 차이

  • 뷰에 대한 질의를 수행하면 저장되어 있던 서브쿼리를 재실행시켜서 마치 데이터를 가지고 있는 것처럼 보여줌
테이블
· 가짜 테이블, 논리 테이블
· 물리적인 구조생성 → 저장공간 할당· 물리적인 구조 존재하지 않아 → 저장공간 따로 할당하지 않아
· 2개 영역에 테이블에 관련된 내용 저장
┖ 데이터딕셔녀리 : 테이블 구조, 정보· 데이터 딕셔너리에는 뷰 생성할 때 사용했던 서브쿼리 문장을 텍스트로 저장
┖ 파일 : 실제 데이터 값· 실제 뷰 데이터가 아니라
즉, 수납공간이 있어야지만 테이블을 저장할 수 있어

ㅇ 테이블과 뷰의 차이 예제
(기본 테이블 100번 사원 급여의 100일 때)

  • A 테이블 : CREATE TABEL AS 서브쿼리 기능으로 12*sal을 저장
  • B 뷰 : CREATE VIEW AS 서브쿼리 기능으로 12*sal을 저장
  • 둘 다 100번 사원의 연봉은 1200을 보여주겠지
  • 이때, 원본 테이블의 데이터가 100에서 200으로 바뀌면??
    • A테이블은 독립된 테이블 만든 거라서 1200 변하지 않아
    • B뷰는 서브쿼리가 재실행이 되는 거라서 2400으로 바뀜

ㅇ 뷰 조인

  • 테이블과 뷰 조인, 뷰와 뷰 조인도 다 가능
  • 뷰를 통해 웬만한 건 다 구해져 !
    물론, 셀렉트 문장을 잘 써야 뷰도 잘 써먹을 수 있겠지

ㅇ 뷰 수정

  • 테이블의 경우 구조를 가지고 있기 때문에 ALTER로 변경했었는데
  • 뷰는 구조가 없기 때문에 CREATE OR REPLACE 명령문 사용
    • 서브쿼리를 변경하는 것
    • 새로운 서브쿼리를 덮어쓰는 것
  • 현업에서 대부분 뷰 생성할 때 CREATE OR REPLACE 명령어 써

ㅇ 뷰 제거

  • DROP 뷰
  • 테이블은 그대로 남아 있어



ㅇ 복합 뷰 생성

  • 복잡한 질의를 간단하게 볼 수 있게 해줘. 이 뷰만 셀렉트 * 하면 되니까
  • 부서 최소, 최대 이런 거 보고 싶으면 이 뷰만 보면 되잖아~
CREATE VIEW dept_sum_vu (name, minsal, maxsal, avgsal)
AS SELECT d.department_name, MIN(e.salary), MAX(e.salary), AVG(e.salary)
   FROM employees e, departments d
   WHERE e.department_id = d.department_id
   GROUP BY d.department_name



ㅇ 뷰를 통한 DML 작업 수행

  • 단순 뷰에서 테이블의 값 그대로 보여주는 경우에만 DML 수행 가능
  • 테이블의 데이터를 이용해서 뷰 만들었기 때문에
    뷰 자체에 INSERT UPDATE DELETE 를 이용하면 테이블에도 수행된다.
  • 근데 이거 거의 안 써!
    • 뷰는 보안 측면에서 만들어진 것이기 때문에 DML 사용 거의 안 해
    • 성능도 떨어지고, 보안에도 취약해지니까
    • 즉, 가능은 하지만 사용하진 않아
  • 보안 측면 강조하기 위해 사용하는 옵션
    (서브쿼리 셀렉트 리스트절 마지막에 붙여 )
    • WITH CHECK OPTION
    • WITH READ ONLY : DML 작업 거부

profile
STEP BY STEP

0개의 댓글