|
|
가상 테이블(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 } ] |
|
view_name : 생성하려는 가상 테이블의 이름을 지정한다. |
|
query_specification : 가상 테이블의 질의를 정의한다. 질의 명세 부분은 정의된 순서에 따라 정수 값의 번호가 부여된다. |
|
view_attr_definition |
|
column_name : 가상 테이블의 컬럼을 정의한다. |
|
datatype : 컬럼의 데이터 타입을 정의한다. |
|
2) 예제 |
|
다음은 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의 생성 조건 |
|
가상 테이블의 데이터를 수정하려면 가상 테이블이 수정 가능하도록 정의되어야 한다. |
|
다음의 조건을 만족한다면 해당 가상 테이블은 수정 가능하다. |
|
FROM 절은 반드시 하나의 테이블 또는 수정 가능한 가상 테이블만 포함해야 한다.단, FROM (class_x, class_y)과 같이 괄호에 포함된 두 테이블은 하나의 테이블을 표현하므로 수정 가능하다. |
|
DISTINCT, UNIQUE 구문을 포함하지 않는다. |
|
GROUP BY... HAVING 구문을 포함하지 않는다. |
|
SUM( ), AVG( ) 와 같은 집계 함수를 포함하지 않는다. |
|
UNION이 아닌 UNION ALL을 사용하여 수정 가능한 질의만으로 질의를 구성한 경우 수정 가능하다. 단, 테이블은 UNION ALL을 구성하는 질의 중 어느 한 질의에만 존재해야 한다. |
|
UNION ALL 구문을 사용하여 생성된 가상 테이블에 인스턴스를 입력하는 경우, 인스턴스가 입력될 테이블은 시스템이 결정한다. 인스턴스가 입력될 테이블을 사용자가 제어하는 것은 불가능하므로 사용자가 제어하기 원한다면 테이블에 직접 입력하거나 입력을 위한 별도의 가상 테이블을 생성해야 한다. |
|
위 규칙을 모두 충족하더라도 수정 가능한 가상 테이블의 각 컬럼이 수정 가능하지 않을 수 있다. 컬럼이 수정 가능 하려면 다음 규칙을 따라야 한다. |
|
경로 표현식은 수정 가능하지 않다. |
|
산술 연산자가 포함된 숫자 타입의 컬럼은 수정 가능하지 않다. |
|
가상 테이블에 정의된 컬럼이 수정 가능하더라도 FROM 구문에 포함된 테이블에 대해 수정을 위한 적절한 권한이 있어야 가상 테이블을 수정할 수 있다. 또한 가상 테이블에 대한 접근 권한이 있어야 한다. 가상 테이블에 접근 권한을 부여하는 방법은 테이블에 접근 권한을 부여하는 방식과 동일하다. 권한 부여에 대한 자세한 내용은 "권한 부여"을 참조한다. |
|
1) 예제 |
|
다음은 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 [ ; ] |
|
old_view_name : 변경할 가상 테이블의 이름을 지정한다. |
|
new_view_name : 가상 테이블의 새로운 이름을 지정한다. |
|
2) 예제 |
|
다음은 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 ] |
|
view_name : 질의를 추가할 가상 테이블의 이름 명시한다. |
|
select_statement : 추가할 질의를 명시한다. |
|
2) 예제 |
|
다음은 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) 구문 |
ALTER [ VIEW | VCLASS ] view_name CHANGE QUERY [ integer ] select_statement [ ; ] |
|
view_name : 변경할 가상 테이블의 이름을 명시한다. |
|
interger : 변경할 질의의 번호를 명시한다. 디폴트 값은 1이다. |
|
select_statement : 질의 번호가 integer인 질의를 대치할 새로운 질의를 명시한다. |
|
2) 예제 |
|
다음은 swimming 가상 테이블의 두 번째 질의를 육상선수의 정보가 아닌 태권도 선수의 정보를 보도록 변경하는 예제이다. |
ALTER VIEW swimming CHANGE QUERY 2 SELECT name, gender, event FROM athlete WHERE event = 'Taekwondo'; |
|
|
6. 질의 삭제 |
|
ALTER 구문의 DROP QUERY 예약어를 이용하여 가상 테이블 질의 명세부에 정의된 질의를 삭제할 수 있다. |
|
1) 예제 |
|
다음은 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 ) ] |
|
view_name : 삭제하려는 가상 테이블의 이름을 지정한다. |
|
2) 예제 |
|
다음은 가상 테이블 swimming을 삭제하는 예제이다. |
|
|