CREATE VIEW
CREATE VIEW ステートメントを使用して、ストアド ビューまたは仮想テーブルを作成します。
構文
CREATE VIEW
ビュー名
[(
列名
[,
列名
]...)]
[
WITH EXECUTE AS
'
MASTER
'
]
AS
クエリ スペック
[
ORDER BY
order-by式
[,
order-by式
]...]
ビュー名
::=
ユーザー定義名
列名
::=
ユーザー定義名
order-by式
::=
式
[
CASE(文字列)
|
COLLATE
照合順序名
] [
ASC
|
DESC
]
(
SELECT
構文を参照)
備考
ビューは一種のデータベース オブジェクトで、クエリを格納し、テーブルのように振る舞います。ビューが返すデータは、SELECT ステートメントにより参照される、1 つ以上のテーブルに格納されます。ビュー内の行と列は、参照されるたびにリフレッシュされます。
ビュー名の最大長については、『
Advanced Operations Guide
』の
「
識別子の制限
」
を参照してください。ビュー内の列の最大数は 256 です。ビュー定義には 64 KB の制限があります。
PSQL はグループ化ビューをサポートしています。グループ化ビューとは、SELECT ステートメントで次のいずれかを使用しているビューと定義されます。
•
DISTINCT
•
GROUP BY
•
ORDER BY
•
スカラー関数
•
スカラー
サブクエリ
•
TOP または LIMIT
•
UNION
サブクエリが式であれば、サブクエリ内でグループ化ビューを使用できます。サブクエリは、演算子
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
関連項目
DROP VIEW
SELECT
SET ROWCOUNT
信頼されるオブジェクトと信頼されないオブジェクト