강좌
클라우드/리눅스에 관한 강좌입니다.
데이터베이스 분류

가상 테이블(VIEW)

작성자 정보

  • 웹관리자 작성
  • 작성일

컨텐츠 정보

본문

sub_title_icon.gif 가상 테이블(VIEW)
1. 가상 테이블 생성
가상 테이블은 물리적으로 존재하지 않는 가상의 테이블로써 기존의 테이블이나 또다른 가상 테이블에 대한 질의문의 형태로 정의된다. CUBRID에서는 가상 테이블을 나타낼 때 VIEW 또는 VCLASS 를 사용할 수 있다.
CREATE VIEW 구문을 이용하여 가상 테이블을 생성한다.
1) 구문

CREATE [ VIEW | VCLASS ] view_name
[ { UNDER | AS SUBCLASS OF } super_vclass_name [ {, super_vclass_name }_ ] ]
[ CLASS ATTRIBUTE ( class_attr_definition [ {, class_attr_definition }_ ] ) ] [ ( view_attr_definition [ { , view_attr_definition }_ ] ) ]
[ METHOD method_definition [ { , method_definition }_ ] ]
[ FILE path_name [ { , path_name }_ ] ]
[ INHERIT resolution_list ]
[ AS query_specification 
[ { UNION ALL query_specification }_ ] ]
[ WITH CHECK OPTION] [ ; ]

super_vclass_name :
[ user_name.]classname

class_attr_definition :
attribute_name datatype [ DEFAULT value ]
[ NOT NULL ]

view_attr_definition :
column_name [ datatype ] [ { SHARED [ value ]
[ NOT NULL ] | DEFAULT value } ]

icon_sub02.gif view_name : 생성하려는 가상 테이블의 이름을 지정한다.
icon_sub02.gif query_specification : 가상 테이블의 질의를 정의한다. 질의 명세 부분은 정의된 순서에 따라 정수 값의 번호가 부여된다.
icon_sub02.gif view_attr_definition
icon_sub02.gif column_name : 가상 테이블의 컬럼을 정의한다.
icon_sub02.gif datatype : 컬럼의 데이터 타입을 정의한다.
2) 예제
icon_sub02.gif 다음은 2004년도 올림픽에 출전한 선수 이름과 획득메달을 보여주는 가상 테이블 game_2004를 생성하는 예제이다.
CREATE VIEW game_2004 (name varchar(40), medal char(6) default 'none') AS SELECT a.name, g.medal
FROM game g, athlete a
WHERE g.host_year = 2004
    AND g.athlete_code = a.code ;
2. 수정 가능한 VIEW의 생성 조건
가상 테이블의 데이터를 수정하려면 가상 테이블이 수정 가능하도록 정의되어야 한다.
다음의 조건을 만족한다면 해당 가상 테이블은 수정 가능하다.
icon_sub02.gifFROM 절은 반드시 하나의 테이블 또는 수정 가능한 가상 테이블만 포함해야 한다.단, FROM (class_x, class_y)과 같이 괄호에 포함된 두 테이블은 하나의 테이블을 표현하므로 수정 가능하다.
icon_sub02.gifDISTINCT, UNIQUE 구문을 포함하지 않는다.
icon_sub02.gifGROUP BY... HAVING 구문을 포함하지 않는다.
icon_sub02.gifSUM( ), AVG( ) 와 같은 집계 함수를 포함하지 않는다.
icon_sub02.gifUNION이 아닌 UNION ALL을 사용하여 수정 가능한 질의만으로 질의를 구성한 경우 수정 가능하다. 단, 테이블은 UNION ALL을 구성하는 질의 중 어느 한 질의에만 존재해야 한다.
icon_sub02.gifUNION ALL 구문을 사용하여 생성된 가상 테이블에 인스턴스를 입력하는 경우, 인스턴스가 입력될 테이블은 시스템이 결정한다. 인스턴스가 입력될 테이블을 사용자가 제어하는 것은 불가능하므로 사용자가 제어하기 원한다면 테이블에 직접 입력하거나 입력을 위한 별도의 가상 테이블을 생성해야 한다.
위 규칙을 모두 충족하더라도 수정 가능한 가상 테이블의 각 컬럼이 수정 가능하지 않을 수 있다. 컬럼이 수정 가능 하려면 다음 규칙을 따라야 한다.
icon_sub02.gif 경로 표현식은 수정 가능하지 않다.
icon_sub02.gif 산술 연산자가 포함된 숫자 타입의 컬럼은 수정 가능하지 않다.
가상 테이블에 정의된 컬럼이 수정 가능하더라도 FROM 구문에 포함된 테이블에 대해 수정을 위한 적절한 권한이 있어야 가상 테이블을 수정할 수 있다. 또한 가상 테이블에 대한 접근 권한이 있어야 한다. 가상 테이블에 접근 권한을 부여하는 방법은 테이블에 접근 권한을 부여하는 방식과 동일하다. 권한 부여에 대한 자세한 내용은 "권한 부여"을 참조한다.
1) 예제
icon_sub02.gif 다음은 athlete 테이블에서 수영 선수의 이름과 성별, 종목을 조회하는 수정 가능한 swimming 가상 테이블을 생성하는 예제이다.
CREATE VIEW swimming (
    name VARCHAR(50),
    gender CHAR(1),
    event VARCHAR(50)
)
AS SELECT name, gender, event
FROM athlete
WHERE event = 'Swimming';
3. 가상 테이블 변경
가상 테이블의 이름은 RENAME 구문을 사용하여 변경할 수 있다.
1) 구문

RENAME [ TABLE |CLASS | VIEW | VCLASS ] old_view_name AS new_view_name [ ; ]

icon_sub02.gif old_view_name : 변경할 가상 테이블의 이름을 지정한다.
icon_sub02.gif new_view_name : 가상 테이블의 새로운 이름을 지정한다.
2) 예제
icon_sub02.gif 다음은 game_2004 가상 테이블의 이름을 2004_info로 변경하는 예제이다.
RENAME game_2004 AS 2004_info;
4. 새로운 질의 추가
ALTER 구문의 ADD QUERY 예약어를 이용하여 가상 테이블의 질의 명세부에 질의를 추가할 수 있다. 각 질의에는 정수값이 순차적으로 배정된다.
1) 구문

ALTER [ VIEW | VCLASS ] view_name
ADD QUERY select_statement
[ INHERIT resolution [ {, resolution }_ ] ] [ ; ]

resolution :
[ CLASS ] attr_mthd_name OF superclass_name [ AS alias ]

icon_sub02.gif view_name : 질의를 추가할 가상 테이블의 이름 명시한다.
icon_sub02.gif select_statement : 추가할 질의를 명시한다.
2) 예제
icon_sub02.gif 다음은 athlete 테이블에서 수영선수의 이름과 성별, 종목을 조회하는 swimming 가상 테이블을 생성하고, 여기에 육상선수의 정보도 보여주도록 질의를 추가하는 예제이다.
swimming 테이블에는 기존에 한 개의 질의가 있기 때문에 추가한 질의 번호로 2가 배정된다.
CREATE VIEW swimming (
    name VARCHAR(50),
    gender CHAR(1),
    event VARCHAR(50)
) AS SELECT name, gender, event
FROM athlete WHERE event = 'Swimming';

ALTER VIEW swimming

ADD QUERY SELECT name, gender, event FROM athlete WHERE event = 'Athlete';
5. 정의된 질의 변경
ALTER 구문의 CHANGE QUERY 예약어를 이용하여 가상 테이블 질의 명세부에 정의된 질의를 변경할 수 있다.
1) 구문

ALTERVIEWVCLASS ] view_name
CHANGE QUERY [ integer ] select_statement [ ; ]

icon_sub02.gif view_name : 변경할 가상 테이블의 이름을 명시한다.
icon_sub02.gif interger : 변경할 질의의 번호를 명시한다. 디폴트 값은 1이다.
icon_sub02.gif select_statement : 질의 번호가 integer인 질의를 대치할 새로운 질의를 명시한다.
2) 예제
icon_sub02.gif 다음은 swimming 가상 테이블의 두 번째 질의를 육상선수의 정보가 아닌 태권도 선수의 정보를 보도록 변경하는 예제이다.
ALTER VIEW swimming
CHANGE QUERY 2 SELECT name, gender, event FROM athlete WHERE event = 'Taekwondo';
6. 질의 삭제
ALTER 구문의 DROP QUERY 예약어를 이용하여 가상 테이블 질의 명세부에 정의된 질의를 삭제할 수 있다.
1) 예제
icon_sub02.gif 다음은 swimming 테이블의 두 번째 질의를 삭제하는 예제이다.
ALTER VIEW swimming
DROP QUERY 2;
7. 가상 테이블 삭제
가상 테이블은 DROP 구문의 구문을 이용하여 삭제할 수 있다. 가상 테이블을 삭제하는 방법은 일반 테이블을 삭제하는 방법과 동일하다.
1) 구문

DROP [ VIEW | VCLASS ] view_spec [ { ,class_spec }_ ] [ ; ]

view_spec :
single_view_spec
( single_view_spec [ { , single_view_spec }_ ] )

single_view_spec :
[ ONLY ] view_name
ALL view_name [ ( EXCEPT view_spec ) ]

icon_sub02.gif view_name : 삭제하려는 가상 테이블의 이름을 지정한다.
2) 예제
icon_sub02.gif 다음은 가상 테이블 swimming을 삭제하는 예제이다.
DROP VIEW swimming;

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,035 명
  • 현재 강좌수 :  35,791 개
  • 현재 접속자 :  171 명