본문 바로가기
야미스터디/Database

[DB] DB View 📌

by 의정부핵꿀밤 2022. 9. 7.
728x90

뷰(View)

  • 데이터베이스에 존재하는 일종의 가상 테이블이다
  • 뷰는 사용자에게 접근이 허용된 자료만을 제한적으로 보여주기 위해 하나 이상의 기본 테이블로부터 유도된, 이름을 갖는 가상 테이블이다
  • 뷰는 저장 장치 내에 물리적으로 존재하지 않지만, 사용자에게 있는 것처럼 간주되며 실제 테이블처럼 행과 열을 갖는다
  • 뷰는 데이터 보정작업, 처리과정 시험 등 임시적인 작업을 위한 용도로 활용된다
  • 즉, 뷰를 사용하면 여러 테이블이나 뷰를 하나의 테이블처럼 볼 수 있기 때문에 JOIN 문의 사용 최소화로 사용상의 편의성을 최대화한다
  • MySQL에서 뷰(view)는 다른 테이블이나 다른 뷰에 저장되어 있는 데이터를 보여주는 역할만을 수행한다
  • 뷰는 데이터 보정, 처리 과정 시험 등의 임시적인 작업을 위한 용도로 활용된다

 

 

뷰(View)의 특징

  • 뷰는 기본 테이블로부터 유도된 테이블이기 때문에 기본 테이블과 같은 형태의 구조를 사용하며, 조작 또한 기본 테이블과 거의 동일하다
  • 뷰는 가상 테이블이기 때문에 물리적으로 구현되어 있지 않다
  • 데이터의 논리적 독립성을 제공할 수 있다
  • 뷰를 통해서만 데이터에 접근하게 되면 뷰에 나타나지 않는 데이터를 안전하게 보호하는 효율적인 기법으로 사용할 수 있다
  • 필요한 데이터만 뷰로 정의해서 처리할 수 있기 때문에 관리가 용이하고 명령문이 간단해진다
  • 기본 테이블의 기본키를 포함한 속성(열) 집합으로 뷰를 구성해야지만 삽입, 삭제, 갱신, 연산이 가능하다
  • 일단 정의된 뷰는 다른 뷰의 정의에 기초가 될 수 있다
  • 뷰는 정의된 테이블에 종속적이다
    • 뷰가 정의된 기본 테이블이나 뷰를 변경 또는 삭제하면 그 테이블이나 뷰를 기초로 정의된 다른 뷰도 자동으로 변경 또는 삭제된다
  • VIEW는 TABLE과 달리 데이터가 없고 SQL만 저장하기 때문에 저장 공간을 차지하지 않는다
    • 기본 테이블은 디스크에 공간이 할당되어 데이터를 저장한다
    • 반면 뷰는 데이터 딕셔너리(Data Dictionary) 테이블에 뷰에 대한 정의 (SQL문)만 저장되어 디스크 저장 공간이 할당되지 않는다
  • 뷰에 대한 수정 결과는 뷰를 정의한 기본 테이블에 적용된다

 

 

뷰의 종류

  • 단순 뷰 : 하나의 기본 테이블 위에 정의된 뷰
  • 복합 뷰 : 두 개 이상의 기본 테이블로부터 파생된 뷰

 

 

 

뷰(View)의 장단점

1) 장점

  1. 논리적 데이터 독립성을 제공한다
  2. 동일 데이터에 대해 동시에 여러 사용자의 상이한 응용이나 요구를 지원한다
  3. 사용자의 데이터 관리를 간단하게 해준다
    • 특정 사용자에게 테이블 전체가 아닌 필요한 필드만을 보여줄 수 있다
    • 한 개의 뷰로 여러 테이블에 대한 데이터를 검색할 수 있다
    • 복잡한 쿼리를 단순화해서 사용할 수 있다
    • 쿼리를 재사용할 수 있다
    • ex) JOIN 쿼리문을 매번 작성하지 않고, 조회 쿼리문을 뷰로 생성해두고 뷰를 조회하는 것이 편하다!
  4. 접근 제어를 통한 자동 보안이 제공된다
    • 뷰를 통해서만 데이터에 접근하게 되면 뷰에 없는 데이터를 안전하게 보호할 수 있다

 

2) 단점

  1. 독립적인 인덱스를 가질 수 없다
  2. ALTER VIEW 문을 사용할 수 없다 -> 즉, 뷰의 정의를 변경할 수 없다
  3. 뷰로 구성된 내용에 대해 삽입, 삭제, 갱신 연산에 제약이 따른다
    • 단순 뷰인 경우 연산이 자유롭다
    • 그러나 함수, UNION, GROUP BY 등을 사용한 복합 뷰인 경우 불가능하다
    • (JOIN만 사용한 복합 뷰는 제한적으로 가능하다)

 

 

 

뷰(View) 예시

1) 뷰 정의문

--문법--
CREATE VIEW 뷰이름[(속성이름[,속성이름])] AS SELECT문;

--고객 테이블에서 주소가 서울시인 고객들의 성명과 전화번호를 서울고객이라는 뷰로 만들어라--
CREATE VIEW 서울고객(성명, 전화번호)
AS SELECT 성명 전화번호
FROM 고객
WHERE 주소 = '서울시';
  • 뷰는 CREATE 문에 의해 정의되며, SYSVIEW에 저장된다
  • 뷰의 이름을 명시하고, AS 키워드 뒤에 SELECT 문을 사용하여 해당 뷰가 접근할 수 있는 필드를 명시한다
  • 이 때 WHERE 절을 사용하여 특정 조건을 설정할 수도 있다
  • 단, ORDER BY는 사용할 수 없다
  • 이를 통해 CREATE VIEW 문은 SELECT 문에서 선택된 필드를 갖는 새로운 뷰를 생성한다

 

 

1-1) 단일 테이블을 이용한 단순 View

 

 

2-2) 복합 테이블을 이용한 복합 View

 

 

2) 뷰 대체문

-- 문법 --
CREATE OR REPLACE VIEW 뷰이름 AS
SELECT 필드이름1, 필드이름2, ...
FROM 테이블이름
WHERE 조건

-- 예제 --
CREATE OR REPLACE VIEW MyView AS
SELECT Name, RoomNum, Date - Curdate() AS Dday
FROM Reservation;
  • CREATE OR REPLACE VIEW 문은 OR REPLACE 절이 추가된 것을 제외하면, 뷰를 생성하는 문법과 동일하다
  • 이 때 해당 뷰가 존재하지 않으면 CREATE VIEW 문과 같은 결과를 반환한다
  • 위의 예제는 MyView 뷰 테이블에서 ReserveDate 필드를 RoomNum 필드로 대체하는 예제이다

 

3) 뷰 삭제문

--문법--
DROP VIEW 뷰이름 RESTRICT or CASCADE

--서울고객이라는 뷰를 삭제해라--
DROP VIEW 서울고객 RESTRICT;
  • 뷰는 삭제할 때는 DROP 문을 사용한다
  • 뷰는 ALTER 문을 사용하여 변경할 수 없으므로, 변경이 필요한 경우에는 기존의 뷰를 삭제한 후 재생성한다!
  • 뷰를 삭제해도 기본 테이블은 영향을 받지 않는다

 

💡 뷰 삭제 문법
- RESTRICT : 뷰를 다른 곳에서 참조하고 있으면 삭제가 취소된다
- CASCADE : 뷰를 참조하는 다른 뷰나 제약 조건까지 모두 삭제된다

 

 

 

 

뷰 옵션

1) WITH CHECK OPTION

  • 조건 컬럼값을 변경하지 못하게 하는 옵션이다
  • 뷰를 정의하는 서브 쿼리문에서 WHERE 절을 추가하여 기본 테이블 중 특정 조건에 만족하는 행으로만 구성된 뷰를 생성할 수 있다
  • 이 때 WHERE 절에 WITH CHECK OPTION을 기술하면 그 조건에 의해 기본 테이블에서 정보가 추출되는 것이므로 조건에 사용되어진 컬럼 값은 뷰를 통해서는 변경이 불가능하다

 

 

2) WITH READ ONLY

  • 기본 테이블의 어떤 컬럼에 대해서도 뷰를 통한 내용 수정을 불가능하게 만드는 옵션이다

 

 

 

 

 

뷰 활용

1) SELECT 문

  • 뷰는 일반 테이블과 같은 방법으로 원하는 데이터 검색이 가능하다
  • 뷰에 대한 SELECT 문이 내부적으로는 기본 테이블에 대한 SELECT 문으로 변환되어 수행된다
  • 검색 연산은 모든 뷰에 대해 수행이 가능하다

 

 

2) INSERT, UPDATE, DELETE 문

  • 뷰에 대한 삽입, 수정, 삭제 연산은 실제로 기본 테이블에 수행되어 결과적으로 기본 테이블이 변경된다
  • 뷰에 대한 수정 결과는 뷰를 정의한 기본 테이블에도 적용된다
  • 그러나 뷰를 정의한 기본 테이블에서 정의된 무결성 제약 조건은 그대로 유지된다
  • 뷰에 대한 삽입, 수정, 삭제 연산은 제한적으로 수행된다
    • 무결성 제약 조건, 표현식, 집단 연산, group by 절의 유무에 따라 DML 문 사용이 제한적이다
  • 변경 불가능한 뷰의 특징
    • 기본 테이블의 기본 키를 구성하는 속성이 포함되어 있지 않은 뷰
    • 기본 테이블에 있던 내용이 아닌 집계 함수로 새로 계산된 내용을 포함하는 뷰
    • DISTINCT 키워드를 포함해 정의한 뷰
    • GROUP BY 절을 포함해 정의한 뷰
    • 여러 개의 테이블을 조인하여 정의한 뷰는 변경 불가능한 경우가 많다

 

 

 

💡 View 사용 시 꿀팁
복합 뷰(Nested View)를 최소화하라!
> 뷰는 엄청난 쿼리를 사용자들로부터 가리는데 좋지만, 하나의 뷰 안에 또 다른 뷰와 내부에 있는 다른 뷰를 계속해서 중첩시키다보면 심각한 성능 저하를 유발할 수 있다
> 너무 많은 수의 복합 뷰는 모든 쿼리에 대해 엄청난 양의 데이터가 반환되는 결과를 초래하여 DB 성능을 저하시킬 수 있다
> 심각해지면 쿼리 최적화기(Optimizer)가 포기해서 아무것도 반환되지 않을 수 있다
> 따라서 복합 뷰를 풀어내는 것으로 쿼리 응답 시간을 몇 분에서 몇 초로 줄일 수 있다

 

 


참고)

https://coding-factory.tistory.com/224

 

[DB기초] 뷰(View)란 무엇인가? + 간단한 예제

 뷰(View)란 무엇인가? 1. 뷰는 사용자에게 접근이 허용된 자료만을 제한적으로 보여주기 위해 하나 이상의 기본 테이블로부터 유도된, 이름을 가지는 가상 테이블이다. 2. 뷰는 저장장치 내에 물

coding-factory.tistory.com

http://www.tcpschool.com/mysql/mysql_view_createReplace

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com

https://helloworld92.tistory.com/75

 

[DB] VIEW 테이블이란 ?

1. VIEW 테이블이란? - 하나의 가상 테이블이라고 생각하면된다. - 실제 데이터가 저장되는것이 아니다, 뷰를 통해 데이터를 관리할 수 있다. - VIEW와 TABLE과의 차이점은 그냥 TABLE은 실질적인 데이

helloworld92.tistory.com

https://ahnty0122.tistory.com/129

 

[DB] 뷰(VIEW)

뷰(VIEW) 다른 테이블을 기반으로 만들어진 가상 테이블 데이터를 실제로 저장하지 않고 논리적으로만 존재 but 일반 테이블과 동일한 방법으로 사용 다른 뷰를 기반으로 새로운 뷰 만드는 것도

ahnty0122.tistory.com

https://reeme.tistory.com/54

 

[SQL] 뷰(view) - 뷰의 개념 / 필요성 / 장단점 / 구문 / 종류

뷰(view) : 하나 이상의 기본 테이블이나 다른 뷰를 이용하여 생성되는 가상 테이블 -- 기본 테이블은 디스크에 공간이 할당되어 데이터를 저장함 -- 뷰는 데이터 딕셔너리 (Data Dictionary) 테이블에

reeme.tistory.com

https://sassun.tistory.com/92

 

[DB] View란?

목차 1. View란? 2. View의 사용방법 2-1. 단일 테이블을 이용한 단순 View 2-2. 복합 테입블을 이용한 복합 View 2-3. WITH CHECK OPTION / WITH READ ONLY 옵션 알아보기 3. View의 장점 및 단점 4. View를 사용..

sassun.tistory.com

 

728x90

'야미스터디 > Database' 카테고리의 다른 글

[DB] Redis 📌  (0) 2022.09.13
[DB] SQL Injection 📌  (0) 2022.08.31
[DB] DDL, DML, DCL 📌  (0) 2022.08.10
[DB] RDB vs NoSQL 📌  (0) 2022.08.04
[DB] DB Index 📌  (0) 2022.07.17

댓글