본문 바로가기

DataBase/DBMS

12-2.뷰(View)

Why 뷰?

1. 과도한 join을 회피 (쿼리문의 복잡함을 막아준다)

2. 보안이 필요한 row에 대한 예민한 데이터 커버?

(다른 부서의 보안이 필요한 정보를 오픈하지 않고 권한이 있는 사람에게만 오픈할 수 있도록)

 

⇒나중에 정규화를 배운다 (세포 분열하듯이 테이블을 쪼갠다)

→그러면 과도하게 조인해서 데이터를 가져와야한다

 

=⇒정규화를 하면 할 수록 테이블은 쪼개지고 과도하게 조인을 해야되고 쿼리문이 길어진다

 

어떤 데이터 결과를 찾아내기 위해서 여러테이블을 join해서 사용해야한다. but 계속 반복되는 쿼리문을 하나의 창문에 넣어서 필요할 때 view를 이용해서 사용하자. 하나의 통일된 view ex) 여러테이블끼리 join을 사용한 복잡하고 긴 쿼리문이 반복적으로 사용될 때 view에 저장해서 사용할 수 있다

 


뷰생성

create view 뷰이름 as 쿼리 뷰이름 : 테이블명_vw

 

create view empinfo_vw as
  select employee_id, last_name, email, hire_date, job_id, manager_id, department_id 
    from employees;

create view allInfo_vw as
  select employee_id, last_name, department_name, job_title, city
    from employees e inner join departments d
    on e.department_id=d.department_id
    inner join jobs j
    on e.job_id=j.job_id
    inner join locations l
    on d.location_id=l.location_id;

 



 

뷰 보충

 

 

 

SELECT VIEW_NAME FROM USER_VIEWS;

1. 뷰 ( VIEW ) 정의(가상의 테이블-필요한 데이터만 뽑아서 만들어놓은)

뷰로 가져와도 원본과 연결되어있다. (필요한 데이터만 뽑아온다는 것만 차이)

 

;- 테이블 또는 다른 뷰를 기초로 하는 논리적 테이블.

;- 뷰는 그 자체로서 소유하는 데이터는 없지만, 창문처럼 어떤 데이터를 보거나

;변경할 수 있다.

;- 뷰에서 참조하는 테이블을 기본 테이블( Base Table) 이라고 한다.

 

;2. 뷰 ( VIEW ) 사용 목적 및 특징

;- 데이터베이스에서 선택적으로 데이터를 보여줄 수 있기 때문에, 데이터베이스

;에 대한 접근을 제한 할 수 있다.

;- 복잡한 질의로부터 결과를 검색하기 위한 단순한 질의를 만들 수 있다.

;- 하나의 뷰는 여러 개의 테이블로부터 데이터를 검색하는데 사용 가능하다.

;- 조인을 한 것처럼 여러 테이블에 대한 데이터를 VIEW을 통해볼 수 있다

 

;3. 뷰 ( VIEW ) 종류

;- 단순 뷰(simple view ) : 1개의 테이블로 구성

;- 복합 뷰(complex view) : 여러 개의 테이블로 구성

4. 뷰 생성 전에 권한할당 필요

§ CREATE VIEW 권한 할당 GRANT CREATE VIEW TO 사용자명;

 

GRANT CREATE VIEW TO SCOTT;

-권한을 주면 SCOTT이 뷰를 만들 수 있게 된다.

5.뷰 생성 CREATE VIEW 이름

AS

SELECT

 

 

 

CREATE VIEW EMP_VIEW

; AS

; SELECT EMPNO, ENAME, SAL, HIREDATE

; FROM EMP

; WHERE DEPTNO=10;

 

왼쪽에 뷰 항목에 저장되어있다.

6.뷰 수정(자료를 바꾸는 것이 아니라 구조를 바꾸는 것)

CREATE, REPLACE 명령을 사용한다.(없으면 만들고, 있으면 변경하고)

CREATE OR REPLACE VIEW DEPT_VIEW

; AS

; SELECT DEPTNO NO, DNAME NAME, LOC

; FROM DEPT;

7.복합 뷰 (조인한 결과를 테이블로 만들어 놓기)

CREATE VIEW EMP_DEPT_VIEW

AS

SELECT EMPNO,ENAME, EMP.DEPTNO,DNAME

FROM EMP, DEPT

WHERE EMP.DEPTNO=DEPT.DEPTNO;

 

§*** 뷰 ( VIEW ) 에서 DML 작업

 

8. 제거시 VIEW와 테이블 둘 다 제거되는지 확인

 

DELETE FROM EMP_VIEW

 

SELECT * FROM EMP_VIEW;

;SELECT * FROM EMP WHERE DEPTNO=10;

9.제약 조건 설정

 

WITH REDA ONLY : 다른작업 설정 못한다 UPDATE, DELETE 등등,,

10.테이블 제거

DROP VIEW 뷰테이블이름

11.인라인뷰( INLINE VIEW)

: 임시적으로 사용.

실행되는 동안만 사용.

 

FROM 절안에 테이블 생성(임시적으로)

EX)EMP와 DEPT 테이블에서 부서별 SAL 총합과 평균을 출력.

 

SELECT E.DEPTNO,TOTAL_SUM,TOTAL_AVG,CNT FROM (SELECT DEPTNO,SUM(SAL) TOTAL_SUM, AVG(SAL) TOTAL_AVG, COUNT(*) CNT FROM EMP GROUP BY DEPTNO) E, DEPT D WHERE E.DEPTNO=D.DEPTNO;

EX)부서별 평균급여보다 많은 급여를 받는 사원의 정보출력