[ORACLE] DB의 VIEW

실제적인 데이터를 꺼내거나 수정하지 않고 테이블의 데이터를 볼 수 만 있는 기능

  • VIEW : VIRTUAL TABLE 가상 테이블에
  • VIEW는 실제 저장되는 것이 아니다.
  • 하나의 VIEW로 여러개의 데이터를 검색할 수 있다.
  • 제한을 설정할 수 있다. (READ ONLY 등)
  • 다양하고 빠른 조회가 가능하다.
  • 많이 사용되는 기능은 아니다.


뷰의 성질

CREATE VIEW UV_TEST_01(JOB_ID, JOB_TITLE, MIN_SALARY)
AS
(
    SELECT JOB_ID, JOB_TITLE, MIN_SALARY
    FROM JOBS
);

SELECT * FROM UV_TEST_01;
  • JOBS 테이블에서 JOB_ID, JOB_TITLE, MIN_SALARY 컬럼을 가져와 UV_TEST_01 뷰를 생성한다.
  • 테이블과 같이 결과를 확인할 수 있다.



CREATE TABLE TB_TEST_01(
    KEY_01 VARCHAR2(10),
    KEY_02 VARCHAR2(10),
    COL_01 VARCHAR2(10),
    COL_02 VARCHAR2(10),
    CONSTRAINT PK_TEST_01 PRIMARY KEY(KEY_01, KEY_02)
);
  • 테스트 테이블 생성



CREATE OR REPLACE VIEW UV_TEST_01(
    KEY_01,
    KEY_02,
    COL_01,
    COL_02,
    CONSTRAINT PK_UV_TEST_01 PRIMARY KEY(KEY_01, KEY_02) DISABLE NOVALIDATE
)
AS
(
    SELECT KEY_01, KEY_02, COL_01, COL_02 FROM TB_TEST_01
);
  • 테스트 테이블을 통해 뷰를 생성 또는 교체한다( CREATE OR REPLACE).
  • 뷰에서 사용할 기본키에 대한 설정을 해줄 수 있다.



INSERT INTO UV_TEST_01 VALUES('AAA', 'aaa', '111', '222');
INSERT INTO UV_TEST_01 VALUES('AAA', 'bbb', '111', '222');

SELECT * FROM UV_TEST_01;
SELECT * FROM TB_TEST_01;
  • 뷰에 값을 삽입할 수 있다.
  • 값이 삽입되면 실제 테이블로 값이 삽입된다.
    • VIEW는 실존하는 테이블을 통해 만들어진 가상 테이블이다.


UV_TEST_01 (VIEW)

KEY_01 KEY_02 COL_01 COL_02
AAA aaa 111 222
AAA bbb 111 222


TB_TEST_01 (실존 테이블)

KEY_01 KEY_02 COL_01 COL_02
AAA aaa 111 222
AAA bbb 111 222



CREATE OR REPLACE VIEW EMP_VIEW(
    EMPLOYEE_ID,
    LAST_NAME,
    EMAIL,
    HIRE_DATE,
    JOB_ID,
    CONSTRAINT PK_UV_EMP_01 PRIMARY KEY(EMPLOYEE_ID) DISABLE NOVALIDATE
)
AS
(
    SELECT EMPLOYEE_ID, LAST_NAME, EMAIL, HIRE_DATE, JOB_ID
    FROM EMPLOYEES
);
  • EMPLOYEES 테이블에서 EMPLOYEE_ID, LAST_NAME, EMAIL, HIRE_DATE, JOB_ID 컬럼을 사용해 VIEW를 생성한다.



INSERT INTO EMP_VIEW VALUES(300, 'PARK', 'PARK@EMAIL.COM', SYSDATE, 'IT_PROG');
SELECT * FROM EMP_VIEW;
DELETE EMP_VIEW WHERE LAST_NAME='PARK';
  • 값을 삽입한다.
  • VIEW 에 삽입된 값은 EMPLOYEES 테이블에도 실제로 삽입된다.



CREATE OR REPLACE VIEW DEPT_EMP_VIEW
AS
(
  SELECT EMPLOYEE_ID, FIRST_NAME, LAST_NAME, SALARY, DEPARTMENT_NAME, LOCATION_ID
  FROM EMPLOYEES E, DEPARTMENTS D
  WHERE E.DEPARTMENT_ID=D.DEPARTMENT_ID
)
WITH READ ONLY;
  • 조인을 해야 볼수 있는 테이블을 미리 VIEW로 만들어 둔다.
  • READ ONLY를 설정했기 때문에, INSERT와 UPDATE 를 전부 할 수 없다.



SELECT * FROM DEPT_EMP_VIEW
ORDER BY SALARY DESC;
  • 정렬도 가능하다.



UPDATE DEPT_EMP_VIEW
SET SALARY = 65152
WHERE EMPLOYEE_ID=100;
  • READ ONLY 옵션을 걸어 두었기 때문에 수정은 할 수 없다.



Comments