この記事では、ビューの作成、変更、削除方法について説明します。 ビューはテーブルのクエリ結果を表示するために使用されます。テーブルが使用できる場所のほとんどすべてで、ビューも使用できます。頻繁にアクセスするデータが複数のテーブルに分散している場合、ビューを使用するのが最適な方法です。
通常のビューを作成する
CREATE VIEW ステートメントを使用して通常のビューを作成できます。作成後は、そのビューに対してDMLステートメントを実行できます。
構文
MySQLモードでは、ビューを作成するSQL構文は次のとおりです:
create_view_stmt:
CREATE [OR REPLACE] VIEW view_name [(column_name_list)] AS select_stmt;
[WITH [CASCADED | LOCAL] CHECK OPTION];
column_name_list:
column_name [, column_name ...]
フィールドの説明:
OR REPLACE:作成しようとしているビュー名が既に存在する場合、新しい定義を使用してビューを再作成します。select_stmt:ビューを定義するSELECTステートメント。このステートメントの情報は、ベーステーブルまたは他のビューから選択できます。column_name_list:ベーステーブルと同様に、ビューには一意の列名を持たせなければならず、重複してはなりません。デフォルトでは、SELECTステートメントで取得される列名がビューの列名として使用されます。ビューの列に明確な名前を定義したい場合は、オプションの
column_name_list句を使用できます。IDの間はカンマで区切ります。column_name_listの名前の数は、SELECTステートメントで取得される列数と等しくなければなりません。SELECTステートメントで取得される列は、テーブル列への単純な参照である場合もあります。関数、定数値、演算子などを使用した式である場合もあります。WITH CHECK OPTION句は、select_statement内のWHERE句が真でない行に対する挿入または更新操作をシステムが実行するのを防ぐために使用されます。WITH CHECK OPTION句を使用してビューを作成する際には、CASCADEDまたはLOCALキーワードを追加して、明示的にチェック範囲を指定できます。LOCALキーワードを使用する場合、ビューのWHERE句をチェックし、その後チェックを基底ビューにリカーシブに適用して、同じルールを適用します。CASCADEDキーワードを使用する場合、ビューのWHERE句をチェックし、その後チェックを基底ビューにリカーシブに適用して、それらにWITH CASCADED CHECK OPTIONを追加します(基底ビューの定義は変更されません)と同じルールを適用します。WITH CHECK OPTIONでCASCADEDまたはLOCALキーワードが指定されていない場合、デフォルトでCASCADEDキーワードが使用されます。WITH CHECK OPTION句を使用しない場合、ビューを作成する際にシステムはビューのWHERE句をチェックせず、その後チェックを基底ビューにリカーシブに適用して、同じルールを適用します。
例
obclient> CREATE VIEW stock_item
AS
SELECT /*+ leading(s) use_merge(i) */
i_price, i_name, i_data, s_i_id, s_w_id, s_order_cnt, s_ytd, s_remote_cnt, s_quantity, s_data, s_dist_01, s_dist_02, s_dist_03, s_dist_04, s_dist_05, s_dist_06, s_dist_07, s_dist_08, s_dist_09, s_dist_10
FROM stok s, item i
WHERE s.s_i_id = i.i_id;
Query OK, 0 rows affected
通常のビューを変更する
CREATE OR REPLACE VIEW ステートメントを使用して、通常のビューを変更できます。
ビュー stock_item を変更します。
obclient> CREATE OR REPLACE VIEW stock_item
AS
SELECT /*+ leading(s) use_merge(i) */
i_price, i_name, i_data, s_i_id, s_w_id, s_order_cnt, s_ytd, s_remote_cnt, s_quantity, s_data, s_dist_01, s_dist_02, s_dist_03, s_dist_04, s_dist_05, s_dist_06, s_dist_07, s_dist_08, s_dist_09, s_dist_10
FROM stok s, item i
WHERE s.s_i_id = i.i_id;
Query OK, 0 rows affected (0.02 sec)
ビューを削除する
DROP VIEW ステートメントを使用して、1つまたは複数のビューを削除できます。ビューを削除しても、ビューが参照するテーブルは削除されません。
現在のビューが他のビューによって参照されている場合、ビューを削除すると、そのビューに依存する他のビューのクエリが失敗します。
ビューを削除する際は、現在のユーザーがそのビューに対する DROP 権限を持っていることを確認する必要があります。
構文
MySQLモードでは、ビューを削除するSQL構文は次のとおりです:
drop_view_stmt:
DROP VIEW [IF EXISTS] view_name_list;
view_name_list:
view_name [, view_name_list]
フィールドの説明:
IF EXISTSキーワードを使用すると、ビューが存在しないためにエラーが発生するのを防ぐことができます。view_name_listに存在するビューと存在しないビューが混在している場合、実行時にエラーが報告される可能性がありますが、存在するビューはそれでも削除されます。
例
ビュー V1 を削除します。
obclient> DROP VIEW V1;