: 실제 있는 테이블이 아니라 기존의 다른 테이블을 참조한 테이블
USER_CONSTRAINT
,,,실제(↔가상) 테이블을 사용하는 것처럼 동일하게 사용 할 수 있음.
뷰 테이블에서 데이터를 '수정'하거나 '변경'하면
원본 테이블도 변경됨.
뷰 테이블의 강점은, 원본 테이블의 복잡한 SQL문(예를들어 SUB쿼리, 동등조인 등..)을 단순화 할 수 있음.
CREATE VIEW
로 뷰 테이블 생성하기.-- 뷰테이블을 생성
CREATE VIEW EMP_VIEW30 함.
AS
SELECT EMPNO, ENAME, DEPTNO
FROM EMP_COPY -- 만들어둔 EMP 복사 테이블
WHERE DEPTNO=30;
CREATE VIEW
로 뷰 테이블을 생성 할 수 있음.
CREATE OR REPLACE VIEW
로 뷰 테이블 생성하기.CREATE OR REPLACE VIEW
로 뷰 테이블을 생성하면,
CREATE
REPLACE
CREATE OR REPLACE VIEW EMP_VIEW(사원번호, 사원명, 급여, 부서번호)
AS
SELECT EMPNO, ENAME, SAL, DEPTNO
FROM EMP_COPY;
뷰 테이블을 생성할 때, 속성명을 별명(alias)으로 지정 가능함.
별명(alias) 설정 후, 데이터 검색 애러 발생히는 경우
WHERE 조건절
에 별명으로 조건절을 생성하지 않았을 때 에러 발생함.SELECT * FROM EMP_VIEW
WHERE deptno=30;
-- error : "DEPTNO": invalid identifier 부서번호라는 별칭을 설정 했으면 별칭으로 검색해야함.
-- 올바른 예시
SELECT * FROM EMP_VIEW
WHERE 부서번호=30;
SELECT ENAME FROM EMP_VIEW30;
뷰 테이블 전체 검색은 해당 뷰 테이블의 생성조건을 검색하는 것과 같은 결과를 갖음.
SELECT * FROM EMP_VIEW30;
SELECT EMPNO, ENAME, DEPTNO
FROM EMP_COPY
WHERE DEPTNO=30; -- EMP_VIEW30의 생성 조건
SELECT
식은 EMP_VIEW30 뷰 테이블의 생성 조건을 출력하는 것과 같은 결과를 갖음.INSERT
로 원본 테이블에서 데이터 삽입하기.INSERT INTO EMP_COPY (EMPNO, ENAME, JOB, DEPTNO)
VALUES(8200,'TEST','TEST',30);
-->> 테스트 데이터를 뷰의 원본 데이터에 삽입해보기.
INSERT
로 뷰 테이블에서 데이터 삽입하기.INSERT INTO EMP_VIEW30
VALUES(1111, 'AAAA', 30); -- 뷰 테이블에 데이터 값 추가하기.
SELECT * FROM EMP_VIEW30; -- 뷰 테이블에 추가됨.
SELECT * FROM EMP_COPY; -- 뷰 테이블의 부모 테이블에도 추가됨.
🧑🏻🏫 : " 원본 테이블과 뷰 테이블 사이 관계성을 주목하세요!"
단순 뷰는 *DML 명령어를 사용하여 조작이 가능함.
*DML : 데이터 조작어, SELECT
INSERT
UPDATE
DELETE
를 말함.
GROUP BY
를 사용하여 뷰 테이블을 만들 때, 반드시 별명(alias)을 지정해줘야함.CREATE VIEW VIEW_SAL
AS
SELECT DEPTNO, SUM(SAL) AS "SalSum", AVG(SAL) AS "SalAvg"
FROM EMP_COPY
GROUP BY DEPTNO;
INSERT INTO EMP_SAL
VALUES(20, 900, 2800);
CREATE OR REPLACE VIEW EMP_ANNUALSAL
AS
SELECT EMPNO, ENAME, SAL*12 AS AnnualSal
-- AnnualSal은 SAL 연산 값
FROM EMP_COPY;
INSERT INTO EMP_ANNUALSAL
VALUES(222, 'BBBB', 18000);
SELECT DISTINCT(JOB) FROM EMP_VIEW;
DISTINCT
를 포함한 *DML은 사용할 수 없음.*DML : 데이터 조작어, SELECT
INSERT
UPDATE
DELETE
를 말함.
복합 테이블을 만드는 형식으로 복합 뷰를 생성할 수 있음.
CREATE VIEW EMP_VIEW_DEPT
AS
SELECT E.EMPNO, E.ENAME, E.SAL, E.DEPTNO, D.DNAME, D.LOC
FROM EMP E, DEPT D
WHERE E.DEPTNO = D.DEPTNO
ORDER BY EMPNO DESC;
DROP VIEW
형식으로 뷰 테이블 삭제할 수 있음.
DROP VIEW VIEW_SAL;
: 원본 테이블이 없으면 뷰 테이블 생성 불가함.
: default 옵션임.
: 원본 테이블이 없더라도 뷰 테이블 생성함.
CREATE
에 FORCE
옵션을 선언하여 원본 테이블이 없더라도 뷰 테이블을 만들 수 있음
CREATE OR REPLACE FORCE VIEW NOTABLE_VIEW
AS
SELECT EMPNO, ENAME, DEPTNO
FROM EMPLOYEES
WHERE DEPTNO=30;
FORCE
옵션으로 뷰 강제 생성 가능함.🧑🏻🏫 "FORCE
로 뷰 테이블 생성은 가능하지만, 실무에서 사용할 일은 거의 없어요. FORCE
는 그냥 알아두세요."