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ě, žeFROM
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ě, žeFROM
je zadaná klauzule a zavádí se pouze jeden vstupní zdroj. - Oba
SELECT <select_list>
aSELECT *
jsou "syntaktický cukr" a mohou být alternativně vyjádřeny pomocí jednoduchýchSELECT
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...]
.