SQL Engine Reference (v11)

CREATE VIEW

CREATE VIEW ステートメントを使用して、ストアド ビューまたは仮想テーブルを作成します。

構文

CREATE VIEW ビュー名 [(列名[, 列名]...)]  
   [WITH EXECUTE AS 'MASTER'] AS クエリ スペック 
   [ORDER BY order-by式[, order-by式]...] 
 
ビュー名 ::= ユーザー定義名 
 
列名 ::= ユーザー定義名 
 
order-by 式 ::=  [CASE(文字列) | COLLATE コレーション名] [ASC | 
DESC](SELECT 構文を参照) 

備考

ビューは一種のデータベース オブジェクトで、クエリを格納し、テーブルのように振る舞います。ビューには行と列のセットが含まれます。ビューを介してアクセスされるデータは 1 つ以上のテーブルに格納されており、テーブルは SELECT ステートメントにより参照されます。ビューが返すデータは、そのビューが参照される都度、動的に作成されます。

ビュー名の最大長については、『Advanced Operations Guide』の表 1 識別子の種類別の制限を参照してください。ビュー内の列の最大数は 256 です。ビュー定義には 64 KB の制限があります。

Pervasive PSQL はグループ化ビューをサポートしています。グループ化ビューとは、SELECT リストに次の項目を含んでいるビューのことです。

サブクエリが式であれば、サブクエリ内でグループ化ビューを使用できます。演算子 INEXISTSALL、または ANY と関連付けられているサブクエリは式と見なされません。

ビュー定義にプロシージャを含めることはできません。

ORDER BY

ORDER BY 句は、SELECT ステートメントで説明される ORDER BY 句と機能的には同じです。SELECT を参照してください。以下に挙げるいくつかの要点に注意してください。

信頼されるビューと信頼されないビュー

信頼されるビューには WITH EXECUTE AS 'MASTER' 句を含めます。信頼されるオブジェクトと信頼されないオブジェクトを参照してください。

次のステートメントによって、大学に在籍している全員の電話番号リストを作成する、vw_Person という名前の信頼されないビューが作成されます。このビューには姓、名および電話番号が表示され、列ごとにヘッダーが付きます。Person テーブルは DEMODATA サンプル データベースの一部です。

CREATE VIEW vw_Person (lastn,firstn,phone) AS SELECT Last_Name, 
First_Name,Phone FROM Person 

このビューに対する以降のクエリでは、SELECT ステートメントで列見出しを使用できます。

SELECT lastn, firstn FROM vw_Person 

ビューを実行するユーザーは、Person テーブルの SELECT 権限を持っている必要があります。

666

次の例では類似したビューが作成されますが、これは信頼されるビューです。

CREATE VIEW vw_trusted_Person (lastn,firstn,phone) WITH EXECUTE 
AS 'MASTER' AS SELECT Last_Name, First_Name,Phone FROM 
Person 

ユーザー "user1" には vw_Person の SELECT 権限が付与されているものとします。user1 は次のように SELECT ステートメントで列見出しを使用できます。

SELECT lastn, firstn FROM vw_trusted_Person 

user1 は Person テーブルの SELECT 権限を持っている必要はありません。権限は信頼されるビューに付与されています。

666

次のステートメントによって、大学に在籍している全員の電話番号リストを作成する、vw_Person という名前のビューが作成されます。このビューには姓、名および電話番号が表示され、列ごとにヘッダーが付きます。Person テーブルは DEMODATA サンプル データベースの一部です。

CREATE VIEW vw_Person (lastn, firstn, telphone) AS SELECT Last_
Name, First_Name, Phone FROM Person 

このビューに対する以降のクエリでは、次の例に示すように、SELECT ステートメントで列見出しを使用できます。

SELECT lastn, firstn FROM vw_Person 
666

前の例に ORDER BY 句を含めるように変更できます。

CREATE VIEW vw_Person_ordby (lastn, firstn, telphone) AS SELECT 
Last_Name, First_Name, Phone FROM Person ORDER BY phone 

ビューは次のような結果を返します(簡潔にするため、すべてのレコードは表示されていません)。

Last_Name   First_Name        Phone 
=========   ==========   ========== 
Vqyles      Rex          2105551871 
Qulizada    Ahmad        2105552233 
Ragadio     Ernest       2105554654 
Luckey      Anthony      2105557628 
Sokell      Chester      2105559149 
Gyduska     Michael      5125550001 
Happy       Anthony      5125550004 
Nix         Anna         5125550006 
666

次の例では、生徒の成績評価点平均(GPA)を降順で返し、さらに、その GPA ごとに生徒を姓の昇順で列挙するビューを作成します。

CREATE VIEW vw_gpa AS SELECT Last_Name,Left(First_Name,1) AS 
First_Initial,Cumulative_GPA AS GPA FROM Person LEFT OUTER 
JOIN Student ON Person.ID=Student.ID ORDER BY Cumulative_
GPA DESC, Last_Name 

ビューは次のような結果を返します(簡潔にするため、すべてのレコードは表示されていません)。

Last_Name                   First_Initial        GPA 
=========================   ===============   ====== 
Abuali                      I                  4.000 
Adachi                      K                  4.000 
Badia                       S                  4.000 
Rowan                       A                  4.000 
Ujazdowski                  T                  4.000 
Wotanowski                  H                  4.000 
Gnat                        M                  3.998 
Titus                       A                  3.998 
Mugaas                      M                  3.995 
Pabalan                     R                  3.995 
666

次の例では、Person テーブルの先頭 10 レコードを ID 順で返すビューが作成されます。

CREATE VIEW vw_top10 AS SELECT TOP 10 * FROM person ORDER BY id; 

ビューは次のような結果を返します(簡潔にするため、すべての列は表示されていません)。

ID          First_Name   Last_Name  
=========   ==========   ========== 
100062607   Janis        Nipart     
100285859   Lisa         Tumbleson  
100371731   Robert       Mazza      
100592056   Andrew       Sugar      
100647633   Robert       Reagen     
100822381   Roosevelt    Bora       
101042707   Avram        Japadjief  
101135758   Ismail       Badad      
101369010   Bruno        Ippolite   
101581226   Robert       Obici      
                         
10 行が影響を受けました。 
666

次の例では、ORDER BY を UNION と一緒に使用できることを示すためのビューを作成します。

CREATE VIEW vw_union_ordby_desc AS SELECT first_name FROM 
person UNION SELECT last_name FROM PERSON ORDER BY first_
name DESC 

ビューは次のような結果を返します(簡潔にするため、すべてのレコードは表示されていません)。

First_Name  
=========== 
Zyrowski    
Zynda       
Zydanowicz  
Yzaguirre   
Yyounce     
Xystros     
Xyois       
Xu          
Wyont       
Wynalda     
Wykes  

関連項目

DROP VIEW

SELECT

SET ROWCOUNT

信頼されるオブジェクトと信頼されないオブジェクト


CREATE USER

DECLARE