Sdílet prostřednictvím


Klauzule SELECT (dotaz NoSQL)

PLATÍ PRO: NoSQL

Každý dotaz se skládá z SELECT klauzule a volitelně FROM a WHERE klauzulí podle standardů ANSI SQL. Obvykle se zdroj v FROM klauzuli vyčíslí a WHERE klauzule použije filtr na zdroj k načtení podmnožina položek JSON. Klauzule SELECT pak v seznamu select prodá požadované hodnoty JSON.

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

Popis
<select_specification> Vlastnosti nebo hodnota, které se mají vybrat pro sadu výsledků.
'*' Určuje, že hodnota by se měla načíst bez provedení jakýchkoli změn. Konkrétně pokud je zpracovaná hodnota 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 hodnota JSON má načíst místo kompletního objektu JSON. Tento argument není na rozdíl od <property_list> zalomení předpokládané hodnoty v objektu.
DISTINCT Určuje, že duplicity projektovaných vlastností by měly být odebrány.
<scalar_expression> Výraz představující hodnotu, která se má vypočítat. Další informace najdete v části skalárních výrazů , kde najdete podrobnosti.

Příklady

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

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. Zde se vytvoří objekt JSON s pojmenovanými department poli a team. Vnější objekt JSON je stále nepojmenovaný, takže vygenerované číslo ($1) se používá k pojmenování tohoto pole.

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

Tento příklad znázorňuje zploštění sady výsledků z předchozího příkladu, aby se zjednodušilo parsování. 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í příklad dotazu používá kombinaci klauzule, VALUE klíčového SELECT slova, FROM klauzule a projekce JSON k provedení společného dotazu s výsledky transformovanými na objekt JSON, aby klient parsoval.

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á pouze 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í nutná žádná projekce. SELECT * je platná pouze v případě, že FROM je zadaná klauzule a zavádí se pouze jeden vstupní zdroj.
  • Oba SELECT <select_list> a SELECT * jsou "syntaktický cukr" a mohou být alternativně vyjádřeny pomocí jednoduchých SELECT příkazů:
    • SELECT * FROM ... AS from_alias ... je ekvivalentní: SELECT from_alias FROM ... AS from_alias ....
    • SELECT <expr1> AS p1, <expr2> AS p2,..., <exprN> AS pN [other clauses...] je ekvivalentní: SELECT VALUE { p1: <expr1>, p2: <expr2>, ..., pN: <exprN> }[other clauses...].