SELECT 句 (NoSQL クエリ)
適用対象: NoSQL
すべてのクエリは ANSI SQL 標準に従って、SELECT
句とオプションの FROM
および WHERE
句で構成されます。 通常、FROM
句のソースが列挙され、JSON 項目のサブセットを取得するためにそのソースに WHERE
句のフィルターが適用されます。 SELECT
句は、要求された 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 ]
引数
説明 | |
---|---|
<select_specification> |
結果セットで選択されるプロパティまたは値。 |
'*' |
変更を加えずに値を取得することを指定します。 具体的には、処理された値がオブジェクトである場合、すべてのプロパティが取得されます。 |
<object_property_list> |
取得するプロパティの一覧を指定します。 返される各値は、指定されたプロパティを持つオブジェクトです。 |
VALUE |
完全な JSON オブジェクトではなく JSON 値を取得することを指定します。 この引数は、<property_list> とは異なり、オブジェクト内のプロジェクションされた値をラップしません。 |
DISTINCT |
投影されたプロパティの重複を削除するよう指定します。 |
<scalar_expression> |
計算する値を表す式。 詳細については、「スカラー式」セクションを参照してください。 |
例
この最初の例では、2 つの静的文字列値を選択し、両方の値を格納する単一のオブジェクトがある配列を返します。 値には名前が付けられていないため、連続の生成された数値を使用して、同等の json フィールドに名前が付けられます。
SELECT "Adventure", "Works"
[
{
"$1": "Adventure",
"$2": "Works"
}
]
この次の例では、JSON プロジェクションを使用して、結果の JSON オブジェクトの正確な構造とフィールド名が微調整されています。 ここでは、department
と team
という名前のフィールドで JSON オブジェクトが作成されます。 外側の JSON オブジェクトにはまだ名前が付けられていないため、生成された数値 ($1
) を使用してこのフィールドに名前が付けられます。
SELECT {
department: "Sales",
team: "Field sales"
}
[
{
"$1": {
"department": "Sales",
"team": "Field sales"
}
}
]
この例では、解析を簡略化するために、前の例の結果セットをフラット化する方法を示しています。 VALUE
キーワードは、結果が別の JSON オブジェクトにラップされないようにするためにここで使用されています。
SELECT VALUE {
department: "Sales",
team: "Field sales"
}
[
{
"department": "Sales",
"team": "Field sales"
}
]
この例では、VALUE
キーワードを静的文字列と共に使用して、結果として文字列の配列を作成しています。
SELECT VALUE "Sales"
[
"Sales"
]
この最後の例では、異なるデータ型のさまざまなフィールドを持つ 2 つの項目を含むコンテナーがあると仮定しています。
[
{
"team": "Field sales",
"identity": {
"name": "Parker McLean"
},
"contact": [
"206-555-0147"
]
},
{
"team": "Field sales",
"identity": {
"name": "Beibit Shayakhmet"
},
"contact": [
"206-555-0178"
]
}
]
この最後のクエリ例では、SELECT
句、VALUE
キーワード、FROM
句、および JSON プロジェクションの組み合わせを使用して、共通のクエリを実行し、クライアントが解析するために結果が JSON オブジェクトに変換されます。
SELECT VALUE {
name: e.identity.name,
team: e.team,
phone: e.contact[0]
}
FROM
employees e
[
{
"name": "Parker McLean",
"team": "Field sales",
"phone": "206-555-0147"
},
{
"name": "Beibit Shayakhmet",
"team": "Field sales",
"phone": "206-555-0178"
}
]
解説
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...]
と同等です。