SELECT句は、クエリ結果で返すフィールドを識別します。 その後、この句によって、これらのフィールドが JSON 結果セットに投影されます。
すべてのクエリは、ANSI SQL 標準に従って、 SELECT 句と必要に応じて FROM 句と WHERE 句で構成されます。 通常、 FROM 句のソースが列挙され、 WHERE 句はソースにフィルターを適用して JSON 項目のサブセットを取得します。
構文
SELECT <select_specification>
<select_specification> ::=
'*'
| [DISTINCT] <object_property_list>
| [DISTINCT] VALUE <scalar_expression> [[ AS ] value_alias]
<object_property_list> ::=
{ <scalar_expression> [ [ AS ] property_alias ] } [ ,...n ]
論争
| Description | |
|---|---|
select_specification |
結果セットに対して選択するプロパティまたは値。 |
* |
変更を加えずに値を取得することを指定します。 具体的には、処理された値がオブジェクトの場合、すべてのプロパティが取得されます。 |
object_property_list |
取得するプロパティの一覧を指定します。 返される各値は、プロパティが指定されたオブジェクトです。 |
VALUE |
完全な JSON オブジェクトの代わりに JSON 値を取得することを指定します。 この引数は、 <property_list> とは異なり、投影された値をオブジェクトにラップしません。 |
DISTINCT |
投影されたプロパティの重複を削除することを指定します。 |
scalar_expression |
計算する値を表す式。 |
戻り値の型
指定した投影フィールドまたは値を返します。
例示
このセクションでは、このクエリ言語コンストラクトを使用する方法の例を示します。
静的な文字列値を選択する
この例では、2 つの静的文字列値を返し、両方の値を含む単一のオブジェクトを持つ配列を返します。 値は名前が付いていないため、連続して生成された番号を使用して、同等の json フィールドに名前を付けます。
SELECT
"Cosmic", "Works"
[
{
"$1": "Cosmic",
"$2": "Works"
}
]
プロジェクト フィールド
この例では、JSON プロジェクションを使用して、結果の JSON オブジェクトの正確な構造とフィールド名を微調整します。 ここでは、 identifier と modelという名前のフィールドを使用して JSON オブジェクトが作成されます。 外部の JSON オブジェクトはまだ名前が付いていないため、生成された数値 ($1) を使用してこのフィールドの名前を付けます。
SELECT {
identifier: p.name,
model: p.sku
}
FROM
products p
[
{
"$1": {
"identifier": "Remdriel Shoes",
"model": "61506"
}
},
{
"$1": {
"identifier": "Tirevy trunks",
"model": "73402"
}
},
...
]
プロジェクトの静的文字列
この例では、VALUE キーワードを静的文字列と共に使用して、結果として文字列の配列を作成します。
SELECT VALUE
"Cosmic Works"
[
"Cosmic Works"
]
複雑な射影
この例では、クエリでは、 SELECT 句、 VALUE キーワード、 FROM 句、JSON プロジェクションの組み合わせを使用して、クライアントが解析するために JSON オブジェクトに変換された結果を含む一般的なクエリを実行します。
SELECT VALUE {
name: p.name,
link: p.metadata.link,
firstTag: p.tags[0]["value"]
}
FROM
products p
[
{
"name": "Remdriel Shoes",
"link": "https://www.adventure-works.com/remdriel-shoes/68719521615.p",
"firstTag": "suede-leather-and-mesh"
},
{
"name": "Tirevy trunks",
"link": "https://www.adventure-works.com/tirevy-trunks/68719520573.p",
"firstTag": "polyester"
},
...
]
注釈
-
SELECT *構文は、FROM句でエイリアスが 1 つだけ宣言されている場合にのみ有効です。SELECT *は ID プロジェクションを提供します。これは、プロジェクションが不要な場合に役立ちます。SELECT *は、FROM句が指定され、1 つの入力ソースのみが導入された場合にのみ有効です。 -
SELECT <select_list>とSELECT *はどちらも構文糖であり、単純なSELECTステートメントを使用して表現できます。 - 式
SELECT * FROM ... AS from_alias ...は、SELECT from_alias FROM ... AS from_alias ...と同じです。 - 式
SELECT <expr1> AS p1, <expr2> AS p2,..., <exprN> AS pN [other clauses...]は、SELECT VALUE { p1: <expr1>, p2: <expr2>, ..., pN: <exprN> }[other clauses...]と同じです。