CData Virtuality Server は、クエリを発行したりビュー変換を定義したりするSQL をサポートしています。これらの機能はほぼすべて標準SQLの構文と機能に従っているので、詳細についてはどのSQLリファレンスでも使用できます。

SQLでデータを操作するための4つの基本コマンドがあり、CRUDCREATE , READ , UPDATE , およびDELETE)操作に対応しています:INSERT, SELECT, UPDATE, およびDELETE。また、プロシージャは、EXECUTE、プロシージャ・リレーショナル・コマンド、または匿名プロシージャ・ブロックで実行することができます。

SELECT Command

SELECT コマンドは、任意の数のリレーションのレコードを検索するために使用されます。

SELECT コマンドにはいくつかの句があります:

  • [ ( LIMIT ...) | ( OFFSET ... [FETCH ...])]

OPTION以外はすべてSQL仕様で定義されています。仕様は、これらの条項が論理的に処理される順序も指定します。以下は、各ステージが次のステージに行のセットを渡す処理順序です。この処理モデルは論理的なものであり、実際のデータベースエンジンがどのように処理を行うかを表すものではないことに注意してください。しかし、これはSQLに関する質問を理解するのに有用なモデルです。

Stage

Description

WITH

Gathers all rows from all with items in the order listed. Subsequent with items and the main query can reference the WITH item as if it is a table

FROM

Gathers all rows from all tables involved in the query and logically joins them with a Cartesian product, producing a single large table with all columns from all tables. Joins and join criteria are then applied to filter rows that do not match the join structure

WHERE

Applies a criterion to every output row from the FROM stage, further reducing the number of rows

GROUP BY

Groups sets of rows with matching values in the group by columns

HAVING

Applies criteria to each group of rows. Criteria can only be applied to columns that will have constant values within a group (those in the grouping columns or aggregate functions applied across the group)

SELECT

Specifies the column expressions that should be returned from the query. Expressions are evaluated, including aggregate functions based on the groups of rows, which will no longer exist after this point. The output columns are named using either column aliases or an implicit name determined by the engine. If SELECT DISTINCT is specified, duplicate removal will be performed on the rows being returned from the SELECT stage

ORDER BY

Sorts the rows returned from the SELECT stage as desired. Supports sorting on multiple columns in the specified order, ascending or descending. The output columns will be identical to those columns returned from the SELECT stage and will have the same name

LIMIT

Returns only the specified rows (with skip and limit values)

INTO

Logically applied last in processing

このモデルはSQLに関する多くの疑問を理解するために使うことができます。例えば、SELECT句でエイリアスされた列は、ORDER BY句のエイリアスによってのみ参照することができます。処理モデルの知識がないと、これはやや混乱するかもしれません。このモデルに照らし合わせると、ORDER BYステージは、SELECTステージの後に発生する唯一のステージであり、そこでカラムに名前が付けられることは明らかです。WHERE句はSELECTの前に処理されるため、列にはまだ名前が付けられておらず、エイリアスもまだ知られていません。

VALUES Command

VALUESコマンドを使用して、シンプルなテーブルを作成します。

構文:

VALUES (value,...)
VALUES (value,...), (valueX,...) ...

VALUESコマンドに1つの値を設定したものは、SELECT value, ….と同じです。VALUES複数の値セットを持つコマンドは、UNION ALLシンプルなSELECT s: SELECT value, …. UNION ALL SELECT valueX, …と等価です。

INSERT Command

INSERTコマンドは、既存のテーブルにレコードを追加するために使用します。対象テーブルは INTO句を使用して指定します。

構文:

INSERT INTO table (column,...) VALUES (value,...)
-- or
INSERT INTO table (column,...) SELECT * FROM x

UPDATE Command

UPDATEコマンドはテーブルのレコードを変更するために使用されます。この操作の結果、1つ以上のレコードが更新される場合もあれば、Criteriaに一致するレコードがない場合は更新されない場合もあります。

構文:

UPDATE table SET (column=value,...) [WHERE criteria]

DELETE Command

DELETEコマンドは、テーブルからレコードを削除するために使用されます。この操作の結果、1つ以上のレコードが削除されるか、Criteriaに一致するレコードがない場合は削除されません。

構文:

DELETE FROM table [WHERE criteria]

Rowcount

INSERT , SELECT INTO , UPDATE , DELETEコマンドは、整数の行変更カウントを報告することができます:rowcount .大量の行が変更された場合、整数の最大値が報告されます(2^31 -1)。


BEGIN UPDATE table SET column = value WHERE criteria; SELECT rowcount; END;

EXECUTE Command

EXECUTEコマンドは、Virtual プロシージャやストアドプロシージャなどのプロシージャを実行するために使用されます。プロシージャは、0個以上のスカラー入力パラメータを持つことができます。プロシージャの戻り値は、SELECTから返されるのと同じ結果セットです。EXECまたはCALLは、このコマンドの短縮形として使用できます。

構文:

EXECUTE proc()
-- or
EXEC proc()
-- or
CALL proc()
-- or
EXECUTE proc(value, ...)

名前付きパラメータ構文:

EXECUTE proc(name1=>value1,name4=>param4, ...)

Syntax Rules

  • パラメータ指定のデフォルトの順序は、プロシージャ定義での定義方法と同じです;
  • パラメータは任意の順番で名前を指定できます。デフォルト値を持つパラメータやメタデータでNULL可能なパラメータは、名前付きパラメータの呼び出しから省略することができ、実行時に適切な値が渡されます;
  • プロシージャが結果セットを返さない場合、RETURNOUTIN_OUTパラメータの値は、インライン・ビュー・クエリとして使用されると、単一の行として返されます;
  • VARIADICパラメータは、最後の位置引数として 0 回以上繰り返すことができます。

Procedural Relational Command

Relational Syntax for Calling Virtual Proceduresをご覧ください。


Anonymous Procedure Block

プロシージャ言語ブロックは、ユーザーコマンドとして実行することができます。これは、仮想プロシージャが存在せず、一連の処理をサーバー側でまとめて行う場合に有利です。

構文:

BEGIN
UPDATE table SET column = value WHERE criteria; SELECT rowcount;
END;

Syntax Rules

  • INOUTおよび パラメータはサポートされていません;RETURN
  • いずれかのステートメントが結果セットを返した場合、単一の結果が返されます。すべての返却可能な結果セットは、列と型の数が一致していなければなりません。WITHOUT RETURN句を使用して、ステートメントが必要に応じて結果セットを意図していないことを示します。

EXPLAIN Command

EXPLAINコマンドは、パフォーマンスの問題やクエリで使用されるオブジェクトの系統を検出するために、クエリを分析するために使用されます。SELECTステートメントの前にキーワードEXPLAINを付けると、CData Virtuality Server はオプティマイザからステートメント実行とデータ行程計画に関する情報を表示します。つまり、CData Virtuality Server は、クエリで使用される列のオリジン、テーブルとビューの結合方法と順序などの情報を含め、ステートメントをどのように処理するかを説明します。

構文:

EXPLAIN SELECT * FROM table;
-- or
EXPLAIN DELETE FROM table [WHERE criteria];