CData Virtuality Server は、クエリを発行したりビュー変換を定義したりするSQL をサポートしています。これらの機能はほぼすべて標準SQLの構文と機能に従っているので、詳細についてはどのSQLリファレンスでも使用できます。
SQLでデータを操作するための4つの基本コマンドがあり、CRUD(CREATE , READ , UPDATE , およびDELETE)操作に対応しています:INSERT, SELECT, UPDATE, およびDELETE。また、プロシージャは、EXECUTE、プロシージャ・リレーショナル・コマンド、または匿名プロシージャ・ブロックで実行することができます。
SELECT Command
SELECT
コマンドは、任意の数のリレーションのレコードを検索するために使用されます。
SELECT コマンドにはいくつかの句があります:
WITH...
SELECT...
INTO...
- [
FROM... ]
- [
WHERE... ]
- [
GROUP BY... ]
- [
HAVING... ]
- [
ORDER BY... ]
- [ (
LIMIT...) | (OFFSET... [FETCH...])]
- [
OPTION... ]
OPTION以外はすべてSQL仕様で定義されています。仕様は、これらの条項が論理的に処理される順序も指定します。以下は、各ステージが次のステージに行のセットを渡す処理順序です。この処理モデルは論理的なものであり、実際のデータベースエンジンがどのように処理を行うかを表すものではないことに注意してください。しかし、これはSQLに関する質問を理解するのに有用なモデルです。
Stage | Description |
|---|---|
| Gathers all rows from all with items in the order listed. Subsequent with items and the main query can reference the |
| 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 |
| Applies a criterion to every output row from the FROM stage, further reducing the number of rows |
| Groups sets of rows with matching values in the group by columns |
| 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) |
| 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 |
| Sorts the rows returned from the |
| Returns only the specified rows (with skip and limit values) |
| 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,...)-- orINSERT INTO table (column,...) SELECT * FROM xUPDATE 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()-- orEXEC proc()-- orCALL proc()-- orEXECUTE proc(value, ...)名前付きパラメータ構文:
EXECUTE proc(name1=>value1,name4=>param4, ...)Syntax Rules
- パラメータ指定のデフォルトの順序は、プロシージャ定義での定義方法と同じです;
- パラメータは任意の順番で名前を指定できます。デフォルト値を持つパラメータやメタデータでNULL可能なパラメータは、名前付きパラメータの呼び出しから省略することができ、実行時に適切な値が渡されます;
- プロシージャが結果セットを返さない場合、
RETURN、OUT、IN_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; -- orEXPLAIN DELETE FROM table [WHERE criteria];