FROM-component (NoSQL-query)
VAN TOEPASSING OP: NoSQL
De COMPONENT FROM (FROM <from_specification>
) is optioneel, tenzij de bron later in de query wordt gefilterd of geprojecteerd. Een query, zoals SELECT * FROM products
opsomming, over een hele container, ongeacht de naam. U kunt ook de speciale id ROOT
voor de container gebruiken in plaats van de containernaam te gebruiken.
Met FROM
de component worden de volgende regels per query afgedwongen:
- Voor de container kunt u een alias gebruiken, zoals
SELECT p.id FROM products AS p
of gewoonSELECT p.id FROM products p
. Hier isp
de alias voor de container. De container hoeft niet noodzakelijkerwijs een naamproducts
te hebben ofp
.AS
is een optioneel trefwoord om de id te aliasen . - Zodra de alias is gebruikt, kan de oorspronkelijke bronnaam niet worden gebonden. Is bijvoorbeeld
SELECT products.id FROM products p
syntactisch ongeldig omdat de idproducts
is gealiaseerd en niet meer kan worden omgezet. - Alle eigenschappen waarnaar wordt verwezen, moeten volledig gekwalificeerd zijn, om te voorkomen dat dubbelzinnige bindingen worden gebruikt als er geen strikte schema-naleving is. Is bijvoorbeeld
SELECT id FROM products p
syntactisch ongeldig omdat de eigenschapid
niet is gebonden. De query moet in plaats daarvan verwijzen naar de eigenschapid
met behulp vanp.id
(of<alias>.<property-name>
).
Syntaxis
FROM <from_specification>
<from_specification> ::=
<from_source> {[ JOIN <from_source>][,...n]}
<from_source> ::=
<container_expression> [[AS] input_alias]
| input_alias IN <container_expression>
<container_expression> ::=
ROOT
| container_name
| input_alias
| <container_expression> '.' property_name
| <container_expression> '[' "property_name" | array_index ']'
Argumenten
Beschrijving | |
---|---|
<from_source> |
Hiermee geeft u een gegevensbron, met of zonder alias. Als de alias niet is opgegeven, wordt deze afgeleid van de <container_expression> volgende regels. Als de expressie een container_name , wordt container_name gebruikt als een alias. Als de expressie is <container_expression> , wordt deze property_name gebruikt als alias. Als de expressie een container_name , wordt container_name gebruikt als een alias. |
ALS input_alias |
Hiermee geeft u op dat het input_alias een set waarden is die wordt geretourneerd door de onderliggende containerexpressie. |
input_alias IN |
Hiermee geeft u op dat de input_alias set waarden moet vertegenwoordigen die zijn verkregen door alle matrixelementen van elke matrix te herhalen die wordt geretourneerd door de onderliggende containerexpressie. Elke waarde die wordt geretourneerd door de onderliggende containerexpressie die geen matrix is, wordt genegeerd. |
<container_expression> |
Hiermee geeft u de containerexpressie die moet worden gebruikt om de items op te halen. |
ROOT |
Hiermee geeft u op dat het item moet worden opgehaald uit de standaardcontainer die momenteel is verbonden. |
container_name |
Hiermee geeft u op dat het item moet worden opgehaald uit de opgegeven container. De naam van de container moet overeenkomen met de naam van de container die momenteel is verbonden. |
input_alias |
Hiermee geeft u op dat het item moet worden opgehaald uit de andere bron die is gedefinieerd door de opgegeven alias. |
<container_expression> '.' property_name |
Hiermee geeft u op dat het item moet worden opgehaald door toegang te krijgen tot de property_name eigenschap. |
<container_expression> '[' "property_name" \| array_index ']' |
Hiermee geeft u op dat het item moet worden opgehaald door toegang te krijgen tot de property_name eigenschap of array_index het matrixelement voor alle items die zijn opgehaald door de opgegeven containerexpressie. |
Opmerkingen
Alle aliassen die in de <from_source>
(s) zijn opgegeven of afgeleid, moeten uniek zijn. De syntaxis <container_expression> '.' property_name
is hetzelfde als <container_expression> '[' "property_name" ']'
. De laatste syntaxis kan echter worden gebruikt als een eigenschapsnaam een niet-id bevat.
Ontbrekende eigenschappen, ontbrekende matrixelementen en niet-gedefinieerde waarden verwerken
Als een containerexpressie toegang heeft tot eigenschappen of matrixelementen en die waarde niet bestaat, wordt die waarde genegeerd en niet verder verwerkt.
Bereik van context van containerexpressie
Een containerexpressie kan een containerbereik of itembereik hebben:
Een expressie is containerbereik, als de onderliggende bron van de containerexpressie een of
ROOT
container_name
. Een dergelijke expressie vertegenwoordigt een set items die rechtstreeks uit de container zijn opgehaald en is niet afhankelijk van de verwerking van andere containerexpressies.Een expressie is itembereik, als de onderliggende bron van de containerexpressie eerder in de query wordt
input_alias
geïntroduceerd. Een dergelijke expressie vertegenwoordigt een set items die zijn verkregen door de containerexpressie te evalueren. Deze evaluatie wordt uitgevoerd in het bereik van elk item dat deel uitmaakt van de set die is gekoppeld aan de aliascontainer. De resulterende set is een samenvoeging van sets die zijn verkregen door de containerexpressie te evalueren voor elk van de items in de onderliggende set.
Voorbeelden
In dit eerste voorbeeld wordt de FROM
component gebruikt om de huidige container als bron op te geven, deze een unieke naam te geven en deze vervolgens een alias te geven. De alias wordt vervolgens gebruikt om specifieke velden in de queryresultaten te projecteren.
SELECT VALUE {
name: e.name,
location: e.workLocation
}
FROM
employees e
[
{
"name": "Tijana Stanković",
"location": {
"office": "Redmond, WA"
}
},
{
"name": "Jean Nadeau",
"location": {
"type": "Remote"
}
}
]
In dit volgende voorbeeld kan de FROM
component ook de bron beperken tot een kleinere subset. Als u slechts een substructuur in elk item wilt inventariseren, kan de subroot de bron worden. Een subhoofdmap van een matrix of object kan als bron worden gebruikt.
SELECT
*
FROM
employees.employment e
[
{
"hireDateTime": "2023-01-01T06:30:00.000Z",
"weeklyHours": 40,
"team": "Retail support"
},
{
"hireDateTime": "2023-01-01T09:30:00.000Z",
"team": "Retail support"
},
{
"hireDateTime": "2023-01-01T15:30:00.000Z",
"weeklyHours": 32,
"team": "Retail support"
}
]