..

Search

35) VIEW 생성 및 대체


VIEW 생성 및 대체


뷰(view)란?

뷰(view)는 데이터베이스에 존재하는 일종의 가상 테이블을 의미합니다.

이러한 뷰는 실제 테이블처럼 행과 열을 가지고 있지만, 실제로 데이터를 저장하고 있지는 않습니다.

 

MySQL에서 뷰(view)는 다른 테이블이나 다른 뷰에 저장되어 있는 데이터를 보여주는 역할만을 수행합니다.

즉, 뷰를 사용하면 여러 테이블이나 뷰를 하나의 테이블처럼 볼 수 있습니다.


뷰의 특징

MySQL에서 뷰가 가지는 장점은 다음과 같습니다.

 

1. 특정 사용자에게 테이블 전체가 아닌 필요한 필드만을 보여줄 수 있습니다.

2. 복잡한 쿼리를 단순화해서 사용할 수 있습니다.

3. 쿼리를 재사용할 수 있습니다.

 

하지만 이러한 뷰도 다음과 같은 단점을 가지고 있습니다.

 

1. 한 번 정의된 뷰는 변경할 수 없습니다.

2. 삽입, 삭제, 갱신 작업에 많은 제한 사항을 가집니다.

3. 자신만의 인덱스를 가질 수 없습니다.


뷰 생성

CREATE 문을 사용하여 뷰를 생성할 수 있습니다.

 

MySQL에서 뷰를 생성하는 문법은 다음과 같습니다.

문법

CREATE VIEW 뷰이름 AS

SELECT 필드이름1, 필드이름2, ...

FROM 테이블이름

WHERE 조건

 

뷰의 이름을 명시하고, AS 키워드 다음에 SELECT 문을 사용하여 해당 뷰가 접근할 수 있는 필드를 명시합니다.

이때 WHERE 절을 사용하여 특정 조건을 설정할 수도 있습니다.

이렇게 CREATE VIEW 문은 SELECT 문에서 선택된 필드를 가지는 새로운 뷰를 생성합니다.

 

뷰는 원본 테이블과 같은 이름을 가질 수 없습니다.

 

다음 예제는 Reservation 테이블에서 Name, ReserveDate, Dday 필드를 가지는 MyView라는 이름의 뷰를 생성하는 예제입니다.

예제

CREATE VIEW MyView AS

SELECT Name, ReserveDate, ReserveDate - Curdate() AS Dday

FROM Reservation;

코딩연습 ▶

실행 결과

 

위의 예제에서 생성된 MyView의 Dday 필드는 ReserveDate 필드 값과 현재 날짜와의 차이를 계산하여 생성됩니다.

따라서 여러분이 실행한 결과에서 Dday 필드의 값은 위의 실행 결과와는 약간 다를 것입니다.

 

이때 사용되는 Curdate() 함수는 현재 날짜를 받아오는 함수입니다.

Curdate() 함수에 대한 더 자세한 사항은 MySQL 날짜와 시간 관련 함수 수업에서 확인할 수 있습니다.

 

MySQL 날짜와 시간 관련 함수 수업 확인 =>

 

뷰는 테이블과 마찬가지로 SELECT 문을 사용하여 저장하고 있는 데이터를 확인할 수 있습니다.

MySQL 수업 예제에서 사용되는 Reservation 테이블과 Customer 테이블은 다음과 같습니다.


뷰 대체

CREATE 문에 OR REPLACE 절을 추가하여 기존에 존재하는 뷰를 새로운 뷰로 대체할 수 있습니다.

 

MySQL에서 뷰를 대체하는 문법은 다음과 같습니다.

문법

CREATE OR REPLACE VIEW 뷰이름 AS

SELECT 필드이름1, 필드이름2, ...

FROM 테이블이름

WHERE 조건

 

CREATE OR REPLACE VIEW  문은 OR REPLACE 절이 추가된 것을 제외하면, 뷰를 생성하는 문법과 완전히 같습니다.

이때 해당 뷰가 존재하지 않으면 CREATE VIEW 문과 같은 결과를 반환합니다.

 

다음 예제는 앞선 예제에서 생성한 MyView에서 ReserveDate 필드를 RoomNum 필드로 대체하는 예제입니다.

예제

CREATE OR REPLACE VIEW MyView AS

SELECT Name, RoomNum, Date - Curdate() AS Dday

FROM Reservation;

코딩연습 ▶

실행 결과


연습문제