Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (日本語) » SQL Anywhere サーバ - SQL リファレンス » SQL の使用 » SQL 文 » SQL 文 (A ~ D)

 

CREATE VIEW 文

この文は、データベース上にビューを作成するために使用します。ビューを使うと、格納されている方法とは異なる形でデータを参照できます。

構文
CREATE [ OR REPLACE ] VIEW
[ owner.]view-name [ ( column-name, ... ) ]
AS select-statement
[ WITH CHECK OPTION ]
パラメータ
  • OR REPLACE 句   OR REPLACE (CREATE OR REPLACE VIEW) を指定すると、新しいビューが作成されるか、同じ名前の既存のビューが置き換えられます。OR REPLACE 句を使用した場合、既存のパーミッションは保持されます。

  • AS 句   ビューのベースとなる SELECT 文です。SELECT 文はローカル・テンポラリ・テーブルを参照してはなりません。SELECT 文に ORDER BY 句または GROUP BY 句を記述したり、UNION にすることはできます。ただし、SELECT 文に ORDER BY 句を指定すると、FIRST 句や TOP 句と一緒に使用する場合などは特に、ビュー定義の結果に影響を及ぼすことがあります。

  • WITH CHECK OPTION 句   WITH CHECK OPTION 句を指定すると、SELECT 文で定義された条件を満たさないビューへの更新や挿入が拒否されます。

備考

CREATE VIEW 文は、指定したビューを作成します。所有者を指定すると、別のユーザが所有するビューを作成できます。別のユーザのビューを作成するには、DBA 権限が必要です。

SELECT、DELETE、UPDATE、INSERT 文の中では、ビュー名をテーブル名の代わりに使用できます。ただし、ビューは物理的にはテーブルとしてデータベースの中に存在しません。ビューは使用するたびに引き出されます。ビューは、CREATE VIEW 文で指定された SELECT 文の結果として引き出されます。ビューの中で使用するテーブル名は、テーブルの所有者のユーザ ID を使って指定してください。別のユーザ ID ではテーブルを検索できなかったり、間違ったテーブルが取得される可能性があります。

ビューを定義する SELECT 文が GROUP BY 句と集合関数を含まないか、または UNION 句を伴わない場合は、ビューを更新できます。ビューを更新すると、基本となるテーブルも更新されます。

ビューのカラムには column-name リスト内で指定した名前が与えられます。column name リストを指定しないと、ビューのカラムは select リスト項目から名前が与えられます。select リストのすべての項目がユニークな名前になるように指定します。select リスト項目からの名前を使用するには、各項目を単純なカラム名にするか、エイリアス名を指定します。SELECT 文を参照してください。

一般的に、ビューはカタログに定義されているテーブルやビュー (およびその属性) を参照します。一方、ビューは SQL 変数も参照できます。この場合、ビューを参照するクエリが実行されると、SQL 変数の値が使用されます。SQL 変数を参照するビューは、変数がビューを実行するためのパラメータとして機能することから、「パラメータ化されたビュー」と呼ばれます。

パラメータ化されたビューは、等価の SELECT ブロックの本体を FROM 句内の派生テーブルとしてクエリに埋め込む手段を提供します。パラメータ化されたビューは、ビューで参照されている SQL 変数を入力パラメータとして取るようなストアド・プロシージャに埋め込まれたクエリで、特に便利です。

CREATE VIEW 文が実行されるときに SQL 変数が存在している必要はありません。ただし、ビューを参照するクエリの実行時に SQL 変数が定義されていないと、「カラムが見つからりません。」というエラーが返されます。

パーミッション

ビュー定義内のテーブルに対する RESOURCE 権限と SELECT パーミッションが必要です。

関連する動作

オートコミット。

参照
標準と互換性
  • SQL/2003   コア機能。ただし、パラメータ化されたビューはベンダ拡張です。

次の例は、男性従業員の情報のみを表示するビューを作成します。このビューはベース・テーブルと同じカラム名を持ちます。

CREATE VIEW MaleEmployees
AS SELECT *
FROM Employees
WHERE Sex = 'M';

次の例は、従業員と所属する部署を表示するビューを作成します。

CREATE VIEW EmployeesAndDepartments
  AS SELECT Surname, GivenName, DepartmentName
  FROM Employees JOIN Departments
  ON Employees.DepartmentID = Departments.DepartmentID;

次の例は、前の例で作成された EmployeesAndDepartments ビューを置き換えます。置き換え後のビューには、各従業員の住所の市、州、国が表示されます。

CREATE OR REPLACE VIEW EmployeesAndDepartments
  AS SELECT Surname, GivenName, City, State, Country
  FROM Employees JOIN Departments
  ON Employees.DepartmentID = Departments.DepartmentID;

次の例は、パラメータ化されたビューを変数 var1 と var2 に基づいて作成します。この 2 つはどちらも Employees テーブルまたは Departments テーブルの属性ではありません。

CREATE VIEW EmployeesByState
  AS SELECT Surname, GivenName, DepartmentName
  FROM Employees JOIN Departments
  ON Employees.DepartmentID = Departments.DepartmentID
  WHERE Employees.State = var1 and Employees.Status = var2;

変数は、変数が式として許可されている任意のコンテキストで、ビューの SELECT 文に出現させることができます。たとえば、次のパラメータ化されたビューでは、パラメータ var1 を LIKE 述部のパターンとして使用しています。

CREATE VIEW ProductsByDescription
  AS SELECT *
  FROM Products
  WHERE Products.Description LIKE var1;

このビューを使用するには、ビューを参照するクエリの実行前に変数 var1 が定義されている必要があります。たとえば、次の例はプロシージャ、関数、またはバッチ文に使用できます。

BEGIN
DECLARE var1 CHAR(20);
SET var1 = '%cap%';
SELECT * FROM ProductsByDescription
END