Database
[Oracle] VIEW 생성/삭제/예시
홍크
2021. 6. 1. 20:23
728x90
뷰(View)란?
- 뷰는 하나의 가상 테이블이라고 생각하면 된다.
- 뷰는 실제 데이터가 저장되는 것은 아니지만 뷰를 통해 데이터를 관리할 수 있다.
- 뷰는 복잡한 query를 통해 얻을 수 있는 결과를 간단한 query를 써서 구할 수 있게 한다.
- 한 개의 뷰로 여러 테이블에 대한 데이터를 검색할 수 있다.
뷰(View)를 사용하는 경우
- 복잡한 질의를 쉽게 만들어 준다. group이나 oder by와 같은 복잡한 질의의 정보를 view로 저장시켜 놓으면 다음부터는 view의 정보만 가져오면 되므로 쉽게 사용 가능하다.
- 데이터의 독립성을 허용하기 위해서 사용한다.
- 다양하고 빠른 조회를 위해 사용한다.
- 데이블의 수를 줄이고 성능향상을 가져온다.
뷰 생성
서브쿼리에서 함수나 중복된 칼럼명으로 사용하여 컬럼명으로 사용되지 못한 경우는
알리아스로 지정해야 된다.
CREATE OR REPLACE VIEW [뷰NAME]
AS
SELECT 컬럼명
FROM 테이블명;
--뷰 생성시 에러 발생(알리어스를 설정하지 않았기 때문에)
CREATE VIEW UV_TEST_02
AS
SELECT JOB_ID, JOB_TITLE, MIN_SALARY * 1.1
FROM HR.JOBS;
-- "must name this expression with a column alias"
--문제 발생부분 수정
CREATE OR REPLACE VIEW UV_TEST_02
AS
SELECT JOB_ID, JOB_TITLE, MIN_SALARY * 1.1 AS NEXT_SALARY
FROM HR.JOBS;
-- OR REPLACE 옵션을 설정하고
-- AS NEXT_SALARY 알리어스를 설정한다
뷰 삭제
뷰 삭제는 생성한 사용자나 DROP ANY VIEW 권한이 있는 사용자만 가능하다.
다른 뷰에 사용이 되었더라도 경고 없이 바로 삭제가된다.
DROP VIEW 뷰명;
뷰 사용 예시
COMMIT; -- 적용
ROLLBACK; -- 커밋을 하면 롤백할수없음
--임시 테이블 생성
CREATE TABLE TB_EMP
AS
SELECT employee_id, first_name, salary
FROM employees;
SELECT * FROM tb_emp; --테이블 확인
-- VIEW 생성
CREATE OR REPLACE VIEW UB_VIEW(empno, ename, sal)
AS
SELECT employee_id, first_name, salary
FROM TB_EMP
WITH READ ONLY; -- 읽기전용
--WITH CHECK OPTION : CHECK 제약
INSERT INTO UB_VIEW(empno, ename, sal)
VALUES(101, '임꺽정', 10000); --제약조건 가지고오지 않아서 삽입가능
SELECT * FROM tb_emp;
SELECT * FROM UB_VIEW; --동일한 데이터를 가지고 있는지 확인
-- 사원번호, 이름, 부서번호, 부서명, 지역명
--미리 뷰로 만들어서 조인을 매번 해야하는 불편함을 줄인다.
CREATE OR REPLACE VIEW DEFT_EMP_LOC_VIEW
AS
SELECT e.employee_id, e.first_name, d.department_id, d.department_name, l.city
FROM employees e, departments d, locations l
WHERE e.department_id = d.department_id
AND d.location_id = l.location_id;
728x90