본문 바로가기
Programming/PHP+MySQL(Database)

VIEW의 사용 방법에 대해 알아보자

by 어깨 :) 2023. 4. 13.
728x90

1. 정의

 

데이터베이스에서 View(뷰)란, 하나 이상의 테이블이나 다른 뷰에서 선택한 열의 집합을 표시하는 가상 테이블입니다. 즉, 기존 테이블에서 일부 데이터를 추출하여 새로운 가상의 테이블을 만드는 것입니다.

View를 사용하면 실제 데이터를 복사하거나 저장하지 않아도 되기 때문에, 데이터를 효율적으로 관리할 수 있습니다. 또한, View를 사용하면 복잡한 SQL 쿼리를 쉽게 처리할 수 있으며, 데이터베이스의 보안성을 높일 수 있습니다. 예를 들어, 특정 사용자에게만 특정 열을 허용하고 다른 열을 제한하는 것이 가능합니다.

View는 일반적으로 쿼리나 리포트를 작성하는 데 사용됩니다. 쿼리나 리포트에서 View를 사용하면, 데이터베이스에서 원하는 정보를 쉽게 추출하고 표시할 수 있습니다.

View를 만드는 방법은 간단합니다. SQL문에서 "CREATE VIEW" 문을 사용하여 새로운 View를 생성하고, "SELECT" 문을 사용하여 기존 테이블에서 데이터를 추출하여 View에 저장합니다. 이후에는 View를 테이블처럼 사용할 수 있습니다. View를 수정하려면 "ALTER VIEW"를 사용하고, 삭제하려면 "DROP VIEW"를 사용합니다.

 

▪  다른 테이블을 기반으로 만들어진 가상 테이블
▪  데이터를 실제로 저장하지 않고 논리적으로만 존재하는 테이블이지만 일반 테이블과 동일한 방법으로 사용함
▪  다른 뷰를 기반으로 새로운 뷰를 만드는 것도 가능함
▪  뷰를 통해 기본 테이블의 내용을 쉽게 검색할 수는 있지만 기본 테이블의 내용을 변화시키는 작업은 제한적으로 이루어짐
▪  기본 테이블: 뷰를 만드는데 기반이 되는 물리적인 테이블

 

2. 뷰의 생성

▪  CREATE VIEW 키워드와 함께 생성할 뷰의 이름과 뷰를 구성하는 속성의 이름을 나열
→  속성 리스트를 생략하면 SELECT 절에 나열된 속성의 이름을 그대로 사용
▪  AS 키워드와 함께 기본 테이블에 대한 SELECT 문 작성
→  SELECT 문은 생성하려는 뷰의 정의를 표현하며 ORDER BY는 사용 불가
▪  WITH CHECK OPTION 
→ 뷰에 삽입이나 수정 연산을 할 때 SELECT 문에서 제시한 뷰의 정의 조건을 위반하면 수행되지 않도록 하는 제약조건을 지정

 

3. 뷰의 구현

▪  구현 방식
→   질의 수정(query modification) : 뷰를 실제적으로 저장을 하지 않고 뷰의 정의만 
유지하므로 공간적 이용 면에서 효율적
→  뷰 구체화(view materialization) : 뷰에 대한 최초의 질의가 요청될 때 임시 뷰 
테이블을 물리적으로 실제 저장하여 유지하는 방식

 

 

4. 뷰의 갱신

▪  뷰를 갱신할 때에는, 그 뷰에서 변경된 내용을 그 뷰를 유도한 기본 테이블에 대해서도 
일관성 있게 그대로 갱신해야 함
→ 일반적으로 여러 개의 기본 테이블로부터 조인을 사용하여 유도된 뷰에서는 갱신을 할 수 없다.
→ 일반적으로 집계 함수를 이용하여 유도된 뷰들은 갱신을 할 수 없다.
→ 일반적으로 단 한 개의 기본 테이블에서의 주키를 포함하면서 유도되고, NON- NULL 제약조건을 갖는 모든 속성들을 포함한 뷰는 갱신이 가능하다.

 

5. 구문

생성

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

CREATE VIEW 뷰이름 AS SELECT 구문;

 

 

삭제

뷰 자체를 삭제하는 것은 다음과 같이 DROP SQL 문을 작성한다.

DROP VIEW 뷰이름;

뷰를 만드는 사람은 뷰를 읽기 전용(read-only)과 업데이트 가능(updatable) 상태로 정의할 수 있다. 만약 데이터베이스가 뷰의 스키마에서 내장된 기본 테이블의 스키마로 역 매핑을 결정할 수 있다면, 뷰는 업데이트 가능하다. INSERTUPDATEDELETE 동작은 업데이트 가능 뷰에서 실행될 수 있다. 원 테이블에 변경을 매핑하지 않기 때문에 읽기 전용에서는 그러한 동작을 지원하지 않는다. 뷰 업데이트는 키 보존에 의해 실행된다.

일부 시스템은 뷰에서 INSTEAD OF 트리거를 지원한다. 이런 기술은 뷰에서 실행되는 Insert, update, delete의 위치에서 실행되는 다른 로직 정의를 가능하게 한다. 그리하여 데이터베이스 시스템은 뷰의 읽기 전용에 기반한 데이터 수정 작업을 실행할 수 있다. 그러나 INSTEAD OF 트리거는 뷰 자체의 읽기 전용이나 업데이트가능 속성을 변경하지는 못한다.

 

 

상응

뷰는 원 소스의 쿼리와 동일하다. 뷰와 같은 쿼리가 실행되면, 쿼리는 수정되어 버린다. 예를 들어, 다음과 같은 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는 간단한 쿼리를 취해서, 동일한 뷰를 치환해 버리며, 아래의 것을 쿼리 최적화도구로 전송한다:

  • 선 실행 쿼리:
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        )

이 시점에서의 최적화도구는 쿼리를 취해서 필요 없는 복잡함을 제거하며(예: 주소를 읽는 것은 필요치 않다, 부모 자원이 그것을 이용하지 않기 때문에), 프로세싱을 위해 SQL 엔진에 그 쿼리를 전송한다.

 

https://ko.wikipedia.org/wiki/VIEW_%28SQL%29

 

VIEW (SQL) - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 뷰(view)는 관계 데이터베이스의 데이터베이스 언어 SQL에서 하나 이상의 테이블 (또는 다른 뷰)에서 원하는 모든 데이터를 선택하여, 그들을 사용자 정의하여 나

ko.wikipedia.org

 

6. 사용 방법 (활용)

 

예를 들어, "학생"이라는 테이블에서 "성별", "나이", "학과" 등의 열이 있다고 가정해 봅시다. 이제 "학과"가 "컴퓨터 공학과"인 학생의 "이름", "성별", "나이" 정보를 포함하는 View를 생성해 보겠습니다.

먼저, 다음과 같은 SQL문을 작성하여 View를 생성합니다.

 

 

 


위의 SQL문에서 "computer_science_students"는 새로운 View의 이름입니다. "SELECT" 문에서는 "학생" 테이블에서 "이름", "성별", "나이" 열을 추출하며, "WHERE" 문에서는 "학과"가 "컴퓨터 공학과"인 행들을 선택합니다.

이제 "computer_science_students" View를 사용하여 "컴퓨터 공학과" 학생의 정보를 추출할 수 있습니다. 다음과 같은 SQL문을 사용하여 추출할 수 있습니다.

 

 

 

위의 SQL문은 "computer_science_students" View에서 모든 열을 선택하여 출력하는 것입니다. 이제 데이터베이스에서 "컴퓨터 공학과"에 속한 학생들의 정보를 쉽게 추출할 수 있습니다.

 

728x90