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)부서별 평균급여보다 많은 급여를 받는 사원의 정보출력
'DataBase > DBMS' 카테고리의 다른 글
13.트렌젝션(TRANSACTION) (0) | 2021.02.23 |
---|---|
12-3.시퀀스 (SEQUENCE) (0) | 2021.02.22 |
12-1.인덱스 (0) | 2021.02.22 |
11. 서브쿼리(하위 질의문) : SQL의 꽃2 (WHERE절, HAVING절, FROM절-n-tier) (0) | 2021.02.22 |
10. JOIN(조인) : SQL의 꽃1 (조인, ANSI조인) (0) | 2021.02.22 |