Contents
ビューの使用
ビューとは、データベースに関連付けられた名前で格納されているSQL文に過ぎません。ビューは、実際には、事前定義されたSQLクエリの形式のテーブルの構成です。
ビューは、表のすべての行を含むことも、表から行を選択することもできます。作成されたSQLクエリに依存してビューを作成する1つまたは複数のテーブルからビューを作成できます。
仮想テーブルの一種であるビューは、ユーザーが以下を実行できるようにします。
- ユーザーまたはユーザーのクラスが自然または直感的な方法でデータを構造化できる
- ユーザーが必要とする情報を正確に表示したり変更したりすることができるように、データへのアクセスを制限する。
- レポートを生成するために使用できるさまざまなテーブルのデータを要約する。
ビューの作成
データベースビューは、CREATE VIEWステートメントを使用して作成されます。ビューは、単一の表、複数の表または別のビューから作成できます。
ビューを作成するには、ユーザーは特定の実装に従って適切なシステム権限を持っていなければなりません。
基本的なCREATE VIEWの構文は次のとおりです。
CREATE VIEW view_name AS SELECT column1, column2..... FROM table_name WHERE [condition];
通常のSQL SELECTクエリで使用するのと同じ方法で、複数のテーブルをSELECTステートメントに含めることができます。
例
以下のレコードを持つCUSTOMERSテーブルを考えてみましょう。
+----+----------+-----+-----------+----------+ | ID | NAME | AGE | ADDRESS | SALARY | +----+----------+-----+-----------+----------+ | 1 | kodak | 32 | Ahmedabad | 2000.00 | | 2 | nikon | 25 | Delhi | 1500.00 | | 3 | suzuki | 23 | Kota | 2000.00 | | 4 | nissan | 25 | Mumbai | 6500.00 | | 5 | tometo | 27 | Bhopal | 8500.00 | | 6 | nakag | 22 | MP | 4500.00 | | 7 | toshiki | 24 | Indore | 10000.00 | +----+----------+-----+-----------+----------+
次に、CUSTOMERSテーブルからビューを作成する例を示します。このビューは、CUSTOMERSテーブルから顧客名と年齢を取得するために使用されます。
SQL > CREATE VIEW CUSTOMERS_VIEW AS SELECT name, age FROM CUSTOMERS;
これで、実際の表を照会するのと同じ方法でCUSTOMERS_VIEWを照会することができます。以下はその例です。
SQL > SELECT * FROM CUSTOMERS_VIEW;
これにより、次の結果が得られます。
+----------+-----+ | name | age | +----------+-----+ | kodak | 32 | | nikon | 25 | | suzuki | 23 | | tometo | 25 | | Hardik | 27 | | nakag | 22 | | toshiki | 24 | +----------+-----+
WITH CHECK OPTION
WITH CHECK OPTIONはCREATE VIEWステートメント・オプションです。WITH CHECK OPTIONの目的は、すべてのUPDATEおよびINSERTがビュー定義の条件を満たすことを保証することです。
条件を満たさない場合、UPDATEまたはINSERTはエラーを返します。
次のコードブロックには、WITH CHECK OPTIONを指定してCUSTOMERS_VIEWと同じビューを作成する例があります。
CREATE VIEW CUSTOMERS_VIEW AS SELECT name, age FROM CUSTOMERS WHERE age IS NOT NULL WITH CHECK OPTION;
この場合のWITH CHECK OPTIONは、ビューがAGE列にNULL値を持たないデータによって定義されているため、ビューのAGE列にNULL値が入力された場合には拒否する必要があります。
ビューの更新
ビューは、以下に示す特定の条件の下で更新することができます。
- SELECT節にキーワードDISTINCTが含まれていない可能性があります。
- SELECT節にはサマリー関数を含めることはできません。
- SELECT句にはset関数が含まれていない可能性があります。
- SELECT節には集合演算子が含まれていない可能性があります。
- SELECT句にはORDER BY句を含めることはできません。
- FROM句には複数のテーブルを含めることはできません。
- WHERE句にサブクエリを含めることはできません。
- クエリにGROUP BYまたはHAVINGが含まれていない可能性があります。
- 計算された列は更新されないことがあります。
- INSERT問合せが機能するには、基本表のNOT NULL列をすべてビューに含める必要があります。
したがって、ビューが上記のすべてのルールを満たしている場合、そのビューを更新できます。次のコードブロックには、Rameshの年齢を更新する例があります。
SQL > UPDATE CUSTOMERS_VIEW SET AGE = 35 WHERE name = 'kodak';
これにより、最終的には基部テーブルCUSTOMERSが更新され、ビュー自体に反映されます。さて、ベーステーブルをクエリしようとすると、SELECTステートメントは次の結果を生成します。
+----+----------+-----+-----------+----------+ | ID | NAME | AGE | ADDRESS | SALARY | +----+----------+-----+-----------+----------+ | 1 | kodak | 35 | Ahmedabad | 2000.00 | | 2 | nikon | 25 | Delhi | 1500.00 | | 3 | suzuki | 23 | Kota | 2000.00 | | 4 | nissan | 25 | Mumbai | 6500.00 | | 5 | tometo | 27 | Bhopal | 8500.00 | | 6 | nakag | 22 | MP | 4500.00 | | 7 | toshiki | 24 | Indore | 10000.00 | +----+----------+-----+-----------+----------+
ビューに行を挿入する
データの行をビューに挿入することができます。UPDATEコマンドに適用されるのと同じ規則がINSERTコマンドにも適用されます。
ここでは、このビューにNOT NULL列をすべて含めていないため、CUSTOMERS_VIEWに行を挿入することはできません。そうしないと、表に挿入するときと同様にビューに行を挿入できます。
行をビューに削除する
データの行はビューから削除できます。UPDATEおよびINSERTコマンドに適用されるのと同じ規則がDELETEコマンドに適用されます。
以下は、AGE = 22のレコードを削除する例です。
SQL > DELETE FROM CUSTOMERS_VIEW WHERE age = 22;
これにより、最終的には基本表CUSTOMERSから行が削除され、ビュー自体に反映されます。さて、ベーステーブルをクエリしようとすると、SELECTステートメントは次の結果を生成します。
+----+----------+-----+-----------+----------+ | ID | NAME | AGE | ADDRESS | SALARY | +----+----------+-----+-----------+----------+ | 1 | kodak | 32 | Ahmedabad | 2000.00 | | 2 | nikon | 25 | Delhi | 1500.00 | | 3 | suzuki | 23 | Kota | 2000.00 | | 4 | nissan | 25 | Mumbai | 6500.00 | | 5 | tometo | 27 | Bhopal | 8500.00 | 7 | toshiki | 24 | Indore | 10000.00 | +----+----------+-----+-----------+----------+
ビューの削除
ビューが必要な場合は、ビューを削除する方法が必要です。構文は非常にシンプルで、以下に示します –
DROP VIEW view_name;
以下は、CUSTOMERS表からCUSTOMERS_VIEWを削除する例です。
DROP VIEW CUSTOMERS_VIEW;