CREATE VIEW
CREATE VIEW ステートメントを使用して、ストアド ビューまたは仮想テーブルを作成します。
構文
CREATE VIEW ビュー名 [(列名[, 列名]...)]
[
WITH EXECUTE AS 'MASTER']
AS クエリ スペック [ORDER BY order-by式[, order-by式]...]
列名 ::= ユーザー定義名
備考
ビューは一種のデータベース オブジェクトで、クエリを格納し、テーブルのように振る舞います。ビューには行と列のセットが含まれます。ビューを介してアクセスされるデータは 1 つ以上のテーブルに格納されており、テーブルは SELECT ステートメントにより参照されます。ビューが返すデータは、そのビューが参照される都度、動的に作成されます。
ビュー名の最大長については、『
Advanced Operations Guide』の表
1 識別子の種類別の制限を参照してください。ビュー内の列の最大数は 256 です。ビュー定義には 64 KB の制限があります。
PSQL はグループ化ビューをサポートしています。グループ化ビューとは、SELECT リストに次の項目を含んでいるビューのことです。
•ORDER BY
サブクエリが式であれば、サブクエリ内でグループ化ビューを使用できます。演算子
IN、
EXISTS、
ALL、または
ANY と関連付けられているサブクエリは式と見なされません。
ビュー定義にプロシージャを含めることはできません。
ORDER BY
ORDER BY 句は、SELECT ステートメントで説明される ORDER BY 句と機能的には同じです。
SELECT を参照してください。以下に挙げるいくつかの要点に注意してください。
•ORDER BY 句にはエイリアスを使用できます。
•ORDER BY 句にはスカラー関数を使用できます。
•ORDER BY 句は、サブクエリ句の中では許可されません。
•ビューには、TOP 句と ORDER BY 句の両方を含む SELECT ステートメントを含めることができます。その場合、データベース エンジンはテンポラリ テーブルを生成し、そこにクエリの結果セット全体を置きます。テンポラリ テーブル内の行は ORDER BY 句で指定した順序で並べられ、その順序付けされた結果セットから最初(TOP)の n 行が返されます。
•TOP 句を含むビューは、ほかのテーブルやビューと結合できます。
•TOP 句は 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
Sokell Chester 2105559149
Gyduska Michael 5125550001
Happy Anthony 5125550004
Nix Anna 5125550006
============
次の例では、生徒の成績評価点平均(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
============
次の例では、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 行が影響を受けました。
============
次の例では、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
関連項目