실제적인 데이터를 꺼내거나 수정하지 않고 테이블의 데이터를 볼 수 만 있는 기능
- 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