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 オブジェクトの正確な構造とフィールド名が微調整されています。 ここでは、departmentteam という名前のフィールドで 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...] と同等です。