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,...)
-- 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可能なパラメータは、名前付きパラメータの呼び出しから省略することができ、実行時に適切な値が渡されます;
- プロシージャが結果セットを返さない場合、
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
IN
OUT
および パラメータはサポートされていません;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];