모든지 기록하자!

[Oracle] VIEW 생성/삭제/예시 본문

Database

[Oracle] VIEW 생성/삭제/예시

홍크 2021. 6. 1. 20:23
728x90

뷰(View)란?

  1. 뷰는 하나의 가상 테이블이라고 생각하면 된다.
  2. 뷰는 실제 데이터가 저장되는 것은 아니지만 뷰를 통해 데이터를 관리할 수 있다.
  3. 뷰는 복잡한 query를 통해 얻을 수 있는 결과를 간단한 query를 써서 구할 수 있게 한다.
  4. 한 개의 뷰로 여러 테이블에 대한 데이터를 검색할 수 있다.

(View)를 사용하는 경우

  1. 복잡한 질의를 쉽게 만들어 준다. group이나 oder by와 같은 복잡한 질의의 정보를 view로 저장시켜 놓으면 다음부터는 view의 정보만 가져오면 되므로 쉽게 사용 가능하다.
  2. 데이터의 독립성을 허용하기 위해서 사용한다.
  3. 다양하고 빠른 조회를 위해 사용한다.
  4. 데이블의 수를 줄이고 성능향상을 가져온다.

뷰 생성 

서브쿼리에서 함수나 중복된 칼럼명으로 사용하여 컬럼명으로 사용되지 못한 경우는

알리아스로 지정해야 된다.

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
Comments