CREATE VIEW
CREATE VIEW ステートメントを使用して、ストアド ビューまたは仮想テーブルを作成します。
構文
CREATE VIEW ビュー名 [(列名[, 列名]...)]
[
WITH EXECUTE AS MASTER']
AS クエリ スペック [ORDER BY order-by式[, order-by式]...]
列名 ::= ユーザー定義名
備考
ビューは一種のデータベース オブジェクトで、クエリを格納し、テーブルのように振る舞います。ビューが返すデータは、SELECT ステートメントにより参照される、1 つ以上のテーブルに格納されます。ビュー内の行と列は、参照されるたびにリフレッシュされます。
ビュー名の最大長については、『
Advanced Operations Guide』の
識別子の制限を参照してください。ビュー内の列の最大数は 256 です。ビュー定義には 64 KB の制限があります。
PSQL はグループ化ビューをサポートしています。グループ化ビューとは、SELECT ステートメントで次のいずれかを使用しているビューと定義されます。
サブクエリが式であれば、サブクエリ内でグループ化ビューを使用できます。サブクエリは、演算子
IN、
EXISTS、
ALL、または
ANY と関連付けられている場合は、式と見なされません。
ビュー定義にプロシージャを含めることはできません。
ORDER BY
ビューにおける ORDER BY は、
SELECT ステートメントにおける場合と同じように動作します。以下の点に特に留意してください。
•ORDER BY 句ではエイリアスを使用できます。
•ORDER BY 句ではスカラー サブクエリを使用できます。
•TOP や LIMIT は、ORDER BY を使用しているビューで使用することをお勧めします。
•エンジンが、ORDER BY によって順序付けされた結果を返すためにテンポラリ テーブルを使用し、クエリが動的カーソルを使用する場合、そのカーソルは静的に変換されます。たとえば、インデックス付けされていない列に対して ORDER BY が使用される場合には、常にテンポラリ テーブルが必要となります。前方のみのカーソルと静的カーソルは影響を受けません。
信頼されるビューと信頼されないビュー
信頼されるビューには 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 権限を持っている必要があります。
============
次の例では類似したビューが作成されますが、これは信頼されるビューです。
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 権限を持っている必要はありません。権限は信頼されるビューに付与されています。
============
次のステートメントによって、大学に在籍している全員の電話番号リストを作成する、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
============
前の例に 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
============
次の例では、生徒の成績評価点平均(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
============
この例では、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
10 行が影響を受けました。
============
次の例では、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
関連項目