DB VIEW

Kevin·2024년 5월 25일
1

Database

목록 보기
6/7
post-thumbnail

😘 서론

기능 수정을 하면서 최근에 DB의 뷰를 다뤄야 하는 일이 있었다.

기존 기능을 유지보수 하면서 DB의 쿼리를 변경 해서 조회 속도를 올리고자 하였는데, 기존 기능에서는 뷰를 통해 조회를 하고 있었다.

정보 처리 기사를 공부할 당시에 이론적으로만 뷰에 대해서 공부를 하였고, 내가 실제로 뷰를 사용 해본적은 없었는데 이번 기회를 통해 뷰에 대해서 알아보고자 한다.


😳 본론

뷰는 쿼리를 하나의 테이블처럼 사용할 수 있게 하는 기술이다.

위는 뷰에 대해서 정말 간단하게 요약한 문장이지만, 이게 사실 정답이다.

아래 사용법을 보면 볼수록 정말 간단하고 명료하게 정리가 된 문장이라는 생각이 들 것이다.

SELECT *
FROM EXAMPLE_TABLE et
WHERE 매우 복잡한 쿼리
LEFT JOIN ANOTHER_TABLE at1
LEFT JOIN ANOTHER_TABLE at2
LEFT JOIN ANOTHER_TABLE at3
LEFT JOIN ANOTHER_TABLE at3
LEFT JOIN ANOTHER_TABLE at4
LEFT JOIN ANOTHER_TABLE at5
LEFT JOIN ANOTHER_TABLE at6;

만약 위 복잡한 쿼리를 미리 뷰로 정의 해두지 않았다면 매번 위 쿼리를 아래와 같이 서브 쿼리 등으로 매번 사용해야 할 것이다.

첫번째 쿼리...
SELECT * 
FROM EX_TABLE1 
WHERE val1 = (
SELECT *
FROM EXAMPLE_TABLE et
WHERE 매우 복잡한 쿼리
LEFT JOIN ANOTHER_TABLE at1
LEFT JOIN ANOTHER_TABLE at2
LEFT JOIN ANOTHER_TABLE at3
LEFT JOIN ANOTHER_TABLE at3
LEFT JOIN ANOTHER_TABLE at4
LEFT JOIN ANOTHER_TABLE at5
LEFT JOIN ANOTHER_TABLE at6);
두번째 쿼리...
SELECT * 
FROM EX_TABLE2
WHERE val1 = (
SELECT *
FROM EXAMPLE_TABLE et
WHERE 매우 복잡한 쿼리
LEFT JOIN ANOTHER_TABLE at1
LEFT JOIN ANOTHER_TABLE at2
LEFT JOIN ANOTHER_TABLE at3
LEFT JOIN ANOTHER_TABLE at3
LEFT JOIN ANOTHER_TABLE at4
LEFT JOIN ANOTHER_TABLE at5
LEFT JOIN ANOTHER_TABLE at6);
세번째 쿼리...
SELECT * 
FROM EX_TABLE3 
WHERE val1 = (
SELECT *
FROM EXAMPLE_TABLE et
WHERE 매우 복잡한 쿼리
LEFT JOIN ANOTHER_TABLE at1
LEFT JOIN ANOTHER_TABLE at2
LEFT JOIN ANOTHER_TABLE at3
LEFT JOIN ANOTHER_TABLE at3
LEFT JOIN ANOTHER_TABLE at4
LEFT JOIN ANOTHER_TABLE at5
LEFT JOIN ANOTHER_TABLE at6);

이러한 문제를 해결하는데 뷰가 사용될 수 있는데, 이러한 뷰의 특징에는 무엇이 있는지에 대해서 먼저 알아본 후 실제 뷰 문법에 대해서 알아보자.

뷰의 특징

뷰란 다른 테이블에서 파생된 테이블을 의미하며, 물리적으로 데이터가 저장되는 것이 아니라 논리적으로만 존재한다.

뷰를 사용한 질의 시에는 DBMS의 뷰의 정의를 잘 파악하고 필요시에 재 작성하여 수행해야 한다.

뷰의 장점과 특징에 대해서 그렇다면 정리를 해보자.

뷰의 장점은 아래와 같다.

  1. 독립성 : 테이블 구조가 변경되어도 뷰에서 조회하는 컬럼이나 컬럼명, 테이블 명이 그대로라면, 뷰를 사용하고 있는 응용 프로그램을 변경하지 않아도 된다.
  2. 편리성 : 자주 사용되는 복잡한 쿼리를 미리 뷰로 정의시에는 추후 쿼리는 간단한 형태로 표현, 조회가 가능하다.
  3. 보안성 : 사용자의 권한에 따라 열람 가능한 데이터를 다르게 할 수 있다.

뷰의 특징은 아래와 같다.

  1. 생성된 뷰는 또 다른 뷰를 생성하는데 사용될 수 있다.
  2. 뷰의 정의는 변경할 수 없고, 수정을 원할시 삭제 후 재생성을 해야 한다.
  3. 뷰를 통한 갱신에는 제약이 따른다.
    • 갱신을 하고자 할 시에 기본적으로 원천 테이블의 기본키가 포함되어야 한다.
  4. 원천이 되는 테이블이나 뷰가 삭제되면 이를 기반으로 하는 뷰도 함께 삭제된다.

그렇다면 뷰를 실질적으로 어떻게 생성, 수정, 조회, 삭제 할 수 있을지에 대해서 알아보자.


뷰 문법

이 때 문법은 Oracle 문법입니다.


생성 및 수정

뷰는 아래의 문법 통해서 생성, 수정 할 수 있다.

CREATE OR REPLACE VIEW [뷰 이름] AS [쿼리]

이를 위 예시에 대입해보면 아래와 같다.

CREATE OR REPLACE VIEW EXAMPLE_VIEW
AS 
SELECT *
FROM EXAMPLE_TABLE et
WHERE 매우 복잡한 쿼리
LEFT JOIN ANOTHER_TABLE at;
LEFT JOIN ANOTHER_TABLE at1;
LEFT JOIN ANOTHER_TABLE at2;
LEFT JOIN ANOTHER_TABLE at3;
LEFT JOIN ANOTHER_TABLE at3;
LEFT JOIN ANOTHER_TABLE at4;
LEFT JOIN ANOTHER_TABLE at5;
LEFT JOIN ANOTHER_TABLE at6;

참고로 뷰는 create or replace를 통해 동일한 이름의 뷰가 이미 있다면 재생성하고, 없다면 생성할 수 있다.

뷰가 별도의 수정이 없는 이유는 뷰의 정의는 변경할 수 없기에 수정을 원한다면 삭제 후 재 생성을 해야 한다.

즉 create or replace를 통해 생성 또는 수정을 할 수 있다.


조회

뷰는 아래의 문법 통해서 사용(=조회) 할 수 있다.

SELECT * FROM EXAMPLE_VIEW;

이를 통해서 위 예시에서 봤던 것 처럼 번거로이 복잡한 쿼리를 서브 쿼리등으로 사용 하는 일을 줄일 수 있다.

만약 뷰의 쿼리를 보고 싶다고 한다면 아래와 같이 조회를 하면 된다.

SELECT text FROM USER_VIEWS 
WHERE view_name = '찾고자 하는 뷰 이름';

삭제

뷰는 아래의 문법 통해서 삭제 할 수 있다.

CREATE OR REPLACE VIEW [뷰 이름] AS [쿼리]

이 때 뷰 삭제 시에는 해당 쿼리에 대한 원천 데이터가 사라지는게 아니라 뷰만 삭제 처리 된다.


레퍼런스

[SQL] 뷰(VIEW) 간단 정리

profile
Hello, World! \n

0개의 댓글