Klauzule SELECT (dotaz NoSQL)

PLATÍ PRO: NoSQL

Každý dotaz se skládá z SELECT klauzule a volitelně FROM i WHERE klauzulí podle standardů ANSI SQL. Zdroj v FROM klauzuli se obvykle vyčíslí a WHERE klauzule použije filtr na zdroj a načte podmnožinu položek JSON. Klauzule SELECT pak promítá požadované hodnoty JSON v seznamu výběrů.

Syntaxe

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 ]

Argumenty

Description
<select_specification> Vlastnosti nebo hodnota, které mají být vybrány pro sadu výsledků.
'*' Určuje, že hodnota se má načíst bez provedení jakýchkoli změn. Konkrétně pokud je zpracovanou hodnotou objekt, načtou se všechny vlastnosti.
<object_property_list> Určuje seznam vlastností, které se mají načíst. Každá vrácená hodnota je objekt se zadanými vlastnostmi.
VALUE Určuje, že se má načíst hodnota JSON místo úplného objektu JSON. Tento argument na rozdíl od <property_list> nezalamuje projektovanou hodnotu v objektu.
DISTINCT Určuje, že mají být odebrány duplicity předpokládaných vlastností.
<scalar_expression> Výraz představující hodnotu, která se má vypočítat. Další informace najdete v části Skalární výrazy .

Příklady

Tento první příklad vybere dvě statické řetězcové hodnoty a vrátí pole s jedním objektem obsahujícím obě hodnoty. Vzhledem k tomu, že hodnoty nejsou bez názvu, použije se k pojmenování ekvivalentního pole JSON sekvenční vygenerované číslo.

SELECT "Adventure", "Works"
[
  {
    "$1": "Adventure",
    "$2": "Works"
  }
]

V tomto dalším příkladu se projekce JSON používá k vyladění přesné struktury a názvů polí výsledného objektu JSON. Tady se vytvoří objekt JSON s poli s názvy department a team. Vnější objekt JSON je stále nepojmenovaný, takže k pojmenování tohoto pole se použije vygenerované číslo ($1).

SELECT {
    department: "Sales",
    team: "Field sales"
}
[
  {
    "$1": {
      "department": "Sales",
      "team": "Field sales"
    }
  }
]

Tento příklad znázorňuje zploštětí sady výsledků z předchozího příkladu, aby se zjednodušila analýza. Klíčové VALUE slovo se zde používá k zabránění zabalení výsledků do jiného objektu JSON.

SELECT VALUE {
    department: "Sales",
    team: "Field sales"
}
[
  {
    "department": "Sales",
    "team": "Field sales"
  }
]

V tomto příkladu VALUE se klíčové slovo používá se statickým řetězcem k vytvoření pole řetězců jako výsledku.

SELECT VALUE "Sales"
[
  "Sales"
]

V tomto posledním příkladu předpokládejme, že existuje kontejner se dvěma položkami s různými poli různých datových typů.

[
  {
    "team": "Field sales",
    "identity": {
      "name": "Parker McLean"
    },
    "contact": [
      "206-555-0147"
    ]
  },
  {
    "team": "Field sales",
    "identity": {
      "name": "Beibit Shayakhmet"
    },
    "contact": [
      "206-555-0178"
    ]
  }
]

Tento poslední ukázkový dotaz používá kombinaci klauzule, klíčového SELECTVALUE slova, FROM klauzule a projekce JSON k provedení běžného dotazu s výsledky transformovanými na objekt JSON, který má klient analyzovat.

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"
  }
]

Poznámky

  • Syntaxe SELECT * je platná jenom v případě, že FROM klauzule deklarovala přesně jeden alias. SELECT * poskytuje projekci identity, která může být užitečná, pokud není potřeba žádnou projekci. SELECT * je platný pouze v případě, že FROM je klauzule zadána a zavádí pouze jeden vstupní zdroj.
  • Oba a SELECT <select_list>SELECT * jsou "syntaktický cukr" a mohou být alternativně vyjádřeny pomocí jednoduchých SELECT příkazů:
    • SELECT * FROM ... AS from_alias ... odpovídá: SELECT from_alias FROM ... AS from_alias ....
    • SELECT <expr1> AS p1, <expr2> AS p2,..., <exprN> AS pN [other clauses...] odpovídá: SELECT VALUE { p1: <expr1>, p2: <expr2>, ..., pN: <exprN> }[other clauses...].