티스토리 뷰
VIEW 생성
empvu10 이라는 VIEW을 만듬
1 CREATE VIEW empvu10
2 AS SELECT empno, ename, job
3 FROM emp
4 WHERE deptno = 10
View created.
뷰 수정
empvu10의 컬럼을 구조를 바꾸고 컬럼에 별칭을 정의해 줌
1 CREATE OR REPLACE VIEW empvu10 (emp_number, emp_name)
2 AS SELECT empno, ename
3 FROM emp
4 WHERE deptno = 10
복합 뷰 생성
각 부서 급여를 최소, 최대, 평균을 구하는 뷰 생성함
1 CREATE VIEW dept_sum_vu (name, minsal, maxsal, avgsal)
2 AS SELECT d.dname, MIN(e.sal), MAX(e.sal), AVG(e.sal)
3 FROM emp e, dept d
4 WHERE e.deptno = d.deptno
5 GROUP BY d.dname;
SQL> /
NAME MINSAL MAXSAL AVGSAL
-------------- ---------- ---------- ----------
ACCOUNTING 1300 5000 2916.66667
RESEARCH 800 3000 2175
SALES 950 2850 1566.66667
WITH CHECK OPTION 절 - 수정 불가
뷰를 업데이트하지 못하도록 함, (WITH CHECK OPTION 옵션을 주지 않고 뷰의 deptno를 업데이트하면 뷰에서 해당 레코드가 사라지는 경우가 발생할 수 있음)
1 CREATE OR REPLACE VIEW empvu20
2 AS SELECT *
3 FROM emp
4 WHERE deptno = 20
5 WITH CHECK OPTION CONSTRAINT empvu20_차
empvu20 뷰의 empno가 20인 사원의 deptno를 10으로 바꿈, (에러 발생)
1 UPDATE empvu20
2 SET deptno = 10
3 WHERE empno = 7369
SQL> /
UPDATE empvu20 (에러 발생) *
ERROR at line 1:
ORA-01402: view WITH CHECK OPTION where-clause violation
WITH READ ONLY 절 - 읽기 전용
1 CREATE OR REPLACE VIEW empvu10 (emp_number, emp_name)
2 AS SELECT empno, ename
3 FROM emp
4 WHERE deptno = 10
5 WITH READ ONLY
#삭제 해보기
1 DELETE FROM empvu10
2 WHERE emp_number = 7782;
SQL> /
DELETE FROM empvu10 (에러 발생) *
ERROR at line 1:
ORA-01752: cannot delete from view without exactly one key-preserved table
DROP VIEW - 뷰 제거
1 DROP VIEW empvu10
SQL> /
View dropped.
인라인 뷰
각 부서의 평균 급여보다 많은 급여를 받는 사원을 출력함
1 SELECT a.ename, a.sal, a.deptno, b.salavg
2 FROM emp a, (SELECT deptno, AVG(Sal) salavg
3 FROM emp
4 GROUP BY deptno) b