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 SELECT
VALUE
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ě, žeFROM
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ě, žeFROM
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ýchSELECT
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...]
.