맨위로가기

VIEW (SQL)

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

VIEW는 SQL에서 데이터를 조회하는 방식을 정의하는 가상 테이블이다. CREATE VIEW 문을 사용하여 생성하며, SELECT 문으로 데이터를 조회한다. 뷰는 읽기 전용 또는 업데이트 가능 상태로 정의할 수 있으며, 데이터베이스 시스템이 뷰 스키마에서 기본 테이블의 스키마로 역 매핑을 결정할 수 있으면 업데이트 가능하다. 일부 시스템은 뷰에서 INSTEAD OF 트리거를 지원하여 읽기 전용 뷰에서도 데이터 수정을 가능하게 한다. 또한, materialized view는 데이터 웨어하우스에서 사용되는 사전 실행된 비가상 뷰로, 데이터의 정적 스냅샷을 제공한다. 뷰는 해당 소스 쿼리와 동일하며, 쿼리가 뷰에 대해 실행될 때 쿼리는 뷰 정의를 참조하여 재작성되고 최적화된다. 뷰는 SQL89부터 표준으로 지원되었으며, SQL92, SQL99에서 기능이 확장되었다.

더 읽어볼만한 페이지

  • 데이터베이스 이론 - 관계형 데이터베이스
    관계형 데이터베이스는 데이터를 테이블 형태로 구성하여 관리하며, 1970년 E.F. 코드에 의해 정의되었고, RDBMS를 통해 ACID 트랜잭션, 저장 프로시저, 정규화, 인덱스 등의 기술을 활용하여 다양한 분야에서 사용된다.
  • 데이터베이스 이론 - 데이터베이스 설계
    데이터베이스 설계는 데이터를 효율적으로 관리하기 위해 데이터 분류, 관계 식별, 논리 구조화 등을 포함하며, 개념적, 논리적, 물리적 설계를 거쳐 데이터 중복을 줄이고 데이터 무결성을 확보하는 과정이다.
  • SQL - 사용자 정의 함수
    사용자 정의 함수는 프로그래밍 언어와 데이터베이스 시스템에서 사용자가 직접 정의하여 재사용할 수 있는 코드 블록이다.
  • SQL - 임베디드 SQL
    임베디드 SQL은 호스트 프로그래밍 언어 내에 SQL 문을 삽입하여 데이터베이스와 상호 작용하는 기술로, 데이터베이스 액세스를 표준화하지만 보안 취약점과 이식성 저하의 단점도 가진다.
  • 데이터 모델링 - 빌딩 정보 모델링
    빌딩 정보 모델링(BIM)은 건축물의 전 생애주기 동안 발생하는 정보를 디지털 모델로 통합 관리하는 프로세스이다.
  • 데이터 모델링 - 저장 프로시저
    저장 프로시저는 데이터베이스 관리 시스템에서 SQL 문들을 미리 컴파일하여 저장하고, 모듈화, 보안성, 성능 향상, 유지보수 용이성과 같은 특징을 가지며, 데이터베이스 시스템마다 구현 방식과 지원하는 언어가 다를 수 있는 코드 묶음이다.
VIEW (SQL)
데이터베이스 뷰
종류데이터베이스 객체
목적데이터베이스 테이블의 데이터를 나타내는 대체 방법 제공
관련 SQL 명령CREATE VIEW
DROP VIEW
ALTER VIEW
개요
설명뷰는 하나 이상의 테이블에 저장된 데이터의 논리적 표현임
뷰는 테이블처럼 쿼리할 수 있지만, 데이터를 실제로 저장하지는 않음
장점데이터 접근 단순화
데이터 보안 강화
쿼리 복잡성 감소
데이터 독립성 유지
단점성능 저하 가능성
데이터 변경 제한
종류
가상 뷰표준 뷰, 데이터를 저장하지 않음
쿼리 실행 시점에 데이터를 계산
구체화된 뷰데이터를 저장하는 뷰
주기적으로 갱신 필요
활용
예시특정 부서의 직원 정보만 보여주는 뷰 생성
여러 테이블의 데이터를 조인하여 하나의 뷰로 제공
기타
관련 개념데이터베이스
SQL
테이블

2. 뷰의 생성 및 삭제

뷰는 SQL의 `CREATE VIEW` 문으로 생성하고 `DROP VIEW` 문으로 삭제할 수 있다. 뷰를 생성할 때는 기존 테이블의 특정 열에서 원하는 데이터만 선택하여 조회하는 방식으로, SELECT 문을 기반으로 정의한다.

뷰를 만드는 사람은 해당 뷰를 읽기전용(read-only) 또는 업데이트 가능(updatable) 상태로 정의할 수 있다. 데이터베이스 시스템이 뷰의 스키마로부터 원본 테이블의 스키마로 역 매핑을 결정할 수 있다면, 해당 뷰는 업데이트 가능하다. 업데이트 가능한 뷰에 대해서는 `INSERT`, `UPDATE`, `DELETE`와 같은 데이터 조작 명령을 실행할 수 있다. 반면, 읽기전용 뷰는 원본 테이블로 변경 사항을 매핑할 수 없으므로 이러한 데이터 수정 작업을 지원하지 않는다. 뷰의 업데이트는 일반적으로 키 보존(key-preserving) 여부에 따라 결정된다.

일부 데이터베이스 시스템에서는 뷰에 대해 `INSTEAD OF` 트리거를 지원하기도 한다. 이 트리거를 사용하면 뷰에 대한 `INSERT`, `UPDATE`, `DELETE` 작업 대신 실행될 별도의 로직을 정의할 수 있다. 이를 통해 읽기전용으로 정의된 뷰에 대해서도 데이터 수정 작업을 간접적으로 처리할 수 있지만, `INSTEAD OF` 트리거 자체가 뷰의 읽기전용 또는 업데이트 가능 속성을 변경하지는 않는다.

2. 1. 뷰 생성

뷰 생성 시에 다음과 같이 SQL 문을 작성한다. 기존에 있던 테이블에 있는 컬럼에서 원하는 자료만 조회하는 것이기 때문에, 만들 때도 SELECT 문을 통해 생성한다.



CREATE VIEW 뷰이름 AS SELECT 구문;


2. 2. 뷰 삭제

뷰를 삭제하려면 DROP SQL 문을 사용한다.



DROP VIEW 뷰이름;


3. 읽기 전용 및 업데이트 가능 뷰

뷰를 생성할 때 읽기전용(read-only) 또는 업데이트 가능(updatable) 상태로 정의할 수 있다. 데이터베이스 시스템이 뷰의 스키마에서 해당 뷰가 기반하는 기본 테이블의 스키마로의 역 매핑(reverse mapping)을 결정할 수 있다면, 그 뷰는 업데이트 가능하다. 업데이트 가능한 뷰에서는 INSERT, UPDATE, DELETE와 같은 데이터 조작 연산을 수행할 수 있다. 반면, 읽기 전용 뷰는 데이터베이스 시스템이 뷰에 대한 변경 사항을 기본 테이블에 어떻게 적용해야 할지 결정할 수 없기 때문에 이러한 데이터 수정 연산을 지원하지 않는다.

3. 1. 업데이트 가능 뷰

뷰를 만드는 사람은 뷰를 읽기전용(read-only)과 업데이트 가능(updatable) 상태로 정의할 수 있다. 만약 데이터베이스 시스템이 뷰의 스키마에서 기본 테이블의 스키마로 역 매핑(reverse mapping)을 결정할 수 있다면, 해당 뷰는 업데이트 가능하다. INSERT, UPDATE, DELETE 연산은 업데이트 가능한 뷰에서 수행될 수 있다. 읽기 전용 뷰는 데이터베이스 관리 시스템(DBMS)이 변경 사항을 기본 테이블에 매핑할 수 없기 때문에 이러한 연산을 지원하지 않는다. 뷰 업데이트는 키 보존(key preservation)에 의해 수행된다.

일부 시스템은 뷰에서 INSTEAD OF 트리거의 정의를 지원한다. 이 기술은 뷰에 대한 삽입, 업데이트 또는 삭제 연산 대신 실행될 다른 로직의 정의를 가능하게 한다. 따라서 데이터베이스 시스템은 읽기 전용 뷰를 기반으로 데이터 수정을 구현할 수 있다. 그러나 INSTEAD OF 트리거는 뷰 자체의 읽기 전용 또는 업데이트 가능 속성을 변경하지는 못한다.

3. 2. 읽기 전용 뷰

뷰를 생성할 때 읽기 전용(read-only) 또는 업데이트 가능(updatable) 상태로 정의할 수 있다. 데이터베이스 시스템이 뷰의 스키마에서 해당 뷰가 기반하는 기본 테이블의 스키마로의 역 매핑을 결정할 수 있다면, 그 뷰는 업데이트 가능하다. 업데이트 가능한 뷰에서는 INSERT, UPDATE, DELETE와 같은 데이터 조작 연산을 수행할 수 있다.

반면, 읽기 전용 뷰는 데이터베이스 관리 시스템(DBMS)이 뷰에 대한 변경 사항을 기본 테이블에 어떻게 적용해야 할지 결정할 수 없기 때문에 이러한 데이터 수정 연산을 지원하지 않는다. 뷰에 대한 업데이트는 기본 테이블의 키 보존 여부에 따라 결정되기도 한다.

일부 시스템에서는 읽기 전용 뷰에 `INSTEAD OF` 트리거를 정의하는 것을 지원한다. 이 기능을 사용하면, 읽기 전용 뷰에 대해 INSERT, UPDATE, DELETE 연산이 시도될 때, 미리 정의된 다른 로직을 대신 실행하도록 할 수 있다. 이를 통해 결과적으로 읽기 전용 뷰를 통해서도 데이터를 수정하는 효과를 낼 수 있다. 하지만 `INSTEAD OF` 트리거는 뷰 자체의 속성, 즉 읽기 전용이나 업데이트 가능 상태를 변경하지는 않는다.

4. 구체화된 뷰 (Materialized View)

구체화된 뷰(eng)는 일반적인 뷰와 달리, 쿼리 결과를 미리 계산하여 데이터베이스 내에 물리적으로 저장해두는 특별한 종류의 뷰이다. 이는 데이터 웨어하우스처럼 대규모 데이터를 다루면서 빠른 쿼리 응답 속도가 중요한 환경에서 성능 향상을 위해 주로 사용된다.

미리 계산된 결과를 저장하므로 데이터 조회 시 복잡한 연산을 반복하지 않아 속도가 빠르다는 장점이 있다. 하지만 원본 데이터가 변경될 경우, 뷰의 내용도 주기적으로 갱신해주어야 최신 상태를 유지할 수 있다. 이 뷰의 정확성은 업데이트 빈도에 따라 달라지며, 특정 시점의 데이터 스냅샷을 제공한다. 필요에 따라 원격 소스의 데이터를 포함하여 구성할 수도 있다.

4. 1. 특징

다양한 데이터베이스 관리 시스템은 데이터의 읽기 전용 하위 집합에서 보기를 확장하는 기능을 제공한다. 특히 Materialized view는 데이터 웨어하우스에서 흔히 사용되는 방식으로, 미리 계산된 비가상 뷰이다.

Materialized view는 특정 시점의 데이터를 정적인 스냅샷 형태로 제공하며, 원격 소스의 데이터를 포함할 수도 있다. 이 뷰의 데이터 정확성은 업데이트를 담당하는 메커니즘이 얼마나 자주 실행되는지에 따라 달라진다.

오라클 데이터베이스에서 Materialized view 개념이 처음 도입되었으며, IBM Db2는 유사한 기능으로 "materialized query table"(MQT)을 제공한다. 마이크로소프트 SQL Server는 2000 버전부터 테이블과 별도의 인덱스만 저장하는 인덱싱된 보기(indexed view)를 도입했다. PostgreSQL은 버전 9.3부터 materialized view를 지원하기 시작했다.

4. 2. DBMS별 지원

다양한 데이터베이스 관리 시스템은 데이터의 읽기 전용 하위 집합에서 뷰 기능을 확장해왔다. 특히 구체화된 뷰(materialized view)는 데이터 웨어하우스 등에서 자주 사용되는 방식으로, 미리 쿼리를 실행해 결과를 저장해두는 비가상 뷰이다. 구체화된 뷰는 특정 시점의 데이터 스냅샷을 제공하며, 원격 소스의 데이터를 포함할 수도 있다. 다만, 데이터의 최신 상태는 뷰를 업데이트하는 주기에 따라 달라진다.

구체화된 뷰는 오라클 데이터베이스에서 처음 도입되었다. IBM Db2는 이와 유사한 기능으로 "materialized query table"(MQT)이라는 용어를 사용한다. 마이크로소프트 SQL Server는 2000 버전부터 '인덱싱된 뷰'를 제공하는데, 이는 전체 데이터를 저장하지 않고 테이블과 별도의 인덱스만 저장하는 방식이다. PostgreSQL은 9.3 버전부터 구체화된 뷰 기능을 지원하기 시작했다.

5. 뷰와 쿼리의 동등성

뷰는 그것을 정의하는 원본 쿼리와 동일하게 취급된다. 뷰에 대해 쿼리가 실행될 때, RDBMS는 먼저 쿼리 내의 뷰 이름을 해당 뷰를 정의하는 쿼리 텍스트로 대체하여 쿼리를 수정한다. 이렇게 확장된 쿼리는 쿼리 최적화 단계로 전달된다.

쿼리 최적화도구는 이 수정된 쿼리를 분석하여 불필요한 복잡성을 제거한다. 예를 들어, 쿼리가 뷰의 특정 열만 요청하는 경우, 뷰 정의에 포함된 다른 열을 읽거나 계산하는 과정은 최종 실행 계획에서 제외될 수 있다. 최적화 과정을 거친 쿼리는 최종적으로 SQL 엔진에 의해 처리된다.

5. 1. 예시

뷰는 해당 뷰를 정의하는 원본 쿼리와 동일하게 취급된다. 뷰에 대해 쿼리가 실행되면, RDBMS는 쿼리 내용을 뷰 정의로 대체하여 수정한다. 예를 들어, `accounts_view`라는 이름의 뷰가 다음과 같이 정의되어 있다고 가정해보자.


  • - accounts_view:

SELECT

name,

money_received,

money_sent,

(money_received - money_sent) AS balance,

address,

...

FROM

table_customers c

JOIN

accounts_table a ON a.customer_id = c.customer_id;



이 뷰를 사용하여 애플리케이션에서 다음과 같은 간단한 쿼리를 실행할 수 있다.


  • - 간단한 쿼리

SELECT

name,

balance

FROM

accounts_view;



이 쿼리가 실행되면, RDBMS는 먼저 쿼리 내의 `accounts_view`를 해당 뷰의 정의로 치환한다. 그 결과, 다음과 같은 형태의 쿼리가 내부적으로 생성되어 쿼리 최적화도구로 전달된다.


  • - 선처리된 쿼리:

SELECT

name,

balance

FROM (

SELECT

name,

money_received,

money_sent,

(money_received - money_sent) AS balance,

address,

...

FROM

table_customers c

JOIN

accounts_table a ON a.customer_id = c.customer_id

);



쿼리 최적화도구는 이 확장된 쿼리를 분석하여 불필요한 부분을 제거한다. 예를 들어, 위 간단한 쿼리에서는 `name`과 `balance` 열만 필요하므로, 뷰 정의에 포함된 `address`와 같은 다른 열을 읽는 과정은 최적화 단계에서 생략될 수 있다. 최적화된 쿼리는 최종적으로 SQL 엔진으로 보내져 실행된다.

6. 표준 규격

표준 SQL 규격에서는 SQL89부터 뷰를 사용할 수 있다. 하지만 SQL89에서는 뷰를 생성할 수는 있지만, 삭제하는 기능(DROP 스테이트먼트)은 없었다. 이후 SQL92 규격에서는 CHECK OPTION, LOCAL, CASCADE와 같은 기능이 추가되어 확장되었다. SQL99 규격에서는 기능이 더욱 강화되어, 특정 조건 아래에서는 뷰를 통해 실제 테이블의 데이터를 갱신하는 것도 가능해졌다.

참조

[1] 웹사이트 25.5 Using Views https://dev.mysql.co[...] Oracle 2023-12-12
[2] 서적 SQL: The Complete Reference http://englishonline[...] Osborne/McGraw-Hill 1999



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com