본문 바로가기

SQL

뷰(VIEW)

뷰(VIEW): 논리적(가상) 테이블

쓰는 이유-> 보안과 검색 유리, 쿼리문 단순

CREATE OR REPLACE VIEW EMP_VIEW100(NAME,DNO,SAL)
--OR REPLACE 쓰면 DROP으로 생성된 뷰를 지우지 않고도 똑같은 이름으로 만들수 있다
AS
SELECT EMPNO,ENAME,DEPTNO
FROM EMP
WHERE DEPTNO=10;
SELECT * FROM emp_view100;

-->DROP VIEW EMP_VIEW100;  //생성된 뷰를 지운다

--부서별 최대 급여를 받는 사원 조회(이름, 부서명, 최대급여)
SELECT E.ENAME, D.DNAME, M.SAL
FROM EMP E 
JOIN DEPT D
ON E.DEPTNO=D.DEPTNO
JOIN MAX_SAL M
ON E.SAL=M.SAL;

--인라인 뷰를 정식 뷰로 생성
CREATE OR REPLACE VIEW MAX_SAL
AS
SELECT DEPTNO, MAX(SAL) SAL
FROM EMP
GROUP BY DEPTNO;
--------------------
CREATE OR REPLACE VIEW MAX_SAL2
AS
SELECT E.ENAME, D.DNAME, M.SAL
FROM EMP E 
JOIN DEPT D
ON E.DEPTNO=D.DEPTNO
JOIN MAX_SAL M
ON E.SAL=M.SAL;
-----------
SELECT * FROM MAX_SAL2;

--VIEW통해서 제한적으로 INSERT,UPDATE 가능
CREATE OR REPLACE VIEW EMP_VIEW20
AS
SELECT EMPNO,ENAME,DEPTNO
FROM EMP
WHERE DEPTNO=20 WITH CHECK OPTION; --조건에 맞지 않는 UPDATE,INSERT 불가

SELECT * FROM EMP_VIEW20;
 
--UPDATE : 뷰를 이용해서 물리적인 테이블 업데이트가 가능하지만 안될떄도 있으므로 하지말자
UPDATE EMP_VIEW20
SET ENAME='CHA'
WHERE EMPNO=7566;

--WITH READ ONLY
CREATE OR REPLACE VIEW EMP_CHK30
AS
SELECT EMPNO,ENAME, DEPTNO
FROM EMP
WHERE DEPTNO=30 WITH READ ONLY; --어떤 DML문도 수행 불가

SELECT * FROM emp_chk30;

UPDATE emp_chk30
SET ENAME='LEE'
WHERE EMPNO=7900;

'SQL' 카테고리의 다른 글

권한(GRANT, REVOKE)  (0) 2019.12.31
시퀸스(SEQUENCE)  (0) 2019.12.31
DB 기본 정리(데이터 삭제, 변경 등)  (0) 2019.12.26
상관관계 서브쿼리  (0) 2019.12.26
서브쿼리  (0) 2019.12.26