FROM záradék (NoSQL-lekérdezés)
A KÖVETKEZŐRE VONATKOZIK: NoSQL
A FROM (FROM <from_specification>
) záradék nem kötelező, kivéve, ha a forrás szűrése vagy kivetítése a lekérdezés későbbi részében történik. Egy lekérdezés, például SELECT * FROM products
egy teljes tárolón számbavételt ad, a névtől függetlenül. A tároló neve helyett használhatja a tároló speciális azonosítóját ROOT
is.
A FROM
záradék lekérdezésenként a következő szabályokat kényszeríti ki:
- A tároló aliasos lehet, például
SELECT p.id FROM products AS p
vagy egyszerűenSELECT p.id FROM products p
.p
Itt található a tároló aliasa. A tárolónak nem feltétlenül kell nevet vagy nevetproducts
p
adni.AS
az azonosító aliasának megadása nem kötelező kulcsszó. - Az alias után az eredeti forrásnév nem kötött. Például szintaktikailag érvénytelen,
SELECT products.id FROM products p
mert az azonosítóproducts
aliasolva lett, és már nem oldható fel. - Minden hivatkozott tulajdonságnak teljes mértékben minősítettnek kell lennie, hogy ne legyenek egyértelmű kötések a szigorú sémamegtartás hiányában. Például szintaktikailag érvénytelen,
SELECT id FROM products p
mert a tulajdonságid
nincs kötve. A lekérdezésnek ehelyett a tulajdonságraid
kell hivatkoznia a (vagy<alias>.<property-name>
) használatávalp.id
.
Syntax
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 ']'
Argumentumok
Leírás | |
---|---|
<from_source> |
Egy adatforrást határoz meg aliassal vagy anélkül. Ha nincs megadva alias, a következő szabályokból következtetünk <container_expression> rá. Ha a kifejezés egy container_name , akkor container_name a rendszer aliasként használja. Ha a kifejezés az <container_expression> , akkor property_name a rendszer aliasként használja. Ha a kifejezés egy container_name , akkor container_name a rendszer aliasként használja. |
AMINT input_alias |
Megadja, hogy a input_alias mögöttes tárolókifejezés által visszaadott értékek halmaza. |
input_alias BAN |
Megadja, hogy az input_alias értékhalmaz az alapul szolgáló tárolókifejezés által visszaadott tömbök összes tömbelemére való iterálással kapott értékhalmazt adja meg. A rendszer figyelmen kívül hagyja az alapul szolgáló tárolókifejezés által visszaadott értékeket, amelyek nem tömbök. |
<container_expression> |
Megadja az elemek lekéréséhez használandó tárolókifejezést. |
ROOT |
Megadja, hogy az elemet az alapértelmezett, jelenleg csatlakoztatott tárolóból kell lekérni. |
container_name |
Megadja, hogy az elemet le kell kérni a megadott tárolóból. A tároló nevének meg kell egyeznie a jelenleg csatlakoztatott tároló nevével. |
input_alias |
Megadja, hogy az elemet a megadott alias által definiált másik forrásból kell lekérni. |
<container_expression> '.' property_name |
Megadja, hogy az elemet a tulajdonság elérésével property_name kell lekérni. |
<container_expression> '[' "property_name" \| array_index ']' |
Megadja, hogy az elemet a megadott tárolókifejezés által lekért összes elem tulajdonságához vagy array_index tömbeleméhez való hozzáféréssel property_name kell lekérni. |
Megjegyzések
Az (s) pontban <from_source>
megadott vagy kikövetkeztetett összes aliasnak egyedinek kell lennie. A szintaxis <container_expression> '.' property_name
megegyezik <container_expression> '[' "property_name" ']'
a . Az utóbbi szintaxis azonban akkor használható, ha egy tulajdonságnév egy nonidentifier karaktert tartalmaz.
Hiányzó tulajdonságok, hiányzó tömbelemek és nem definiált értékek kezelése
Ha egy tárolókifejezés hozzáfér a tulajdonságokhoz vagy tömbelemekhez, és ez az érték nem létezik, a rendszer figyelmen kívül hagyja az értéket, és nem dolgozza fel tovább.
Tárolókifejezés környezetének hatókörkezelése
A tárolókifejezések tárolóhatókörrel vagy elemhatókörrel is rendelkezhetnek:
A kifejezés tárolóhatókörű, ha a tárolókifejezés mögöttes forrása vagy
ROOT
container_name
. Az ilyen kifejezések a tárolóból közvetlenül lekért elemek készletét jelölik, és nem függnek más tárolókifejezések feldolgozásától.Egy kifejezés elemhatókörű, ha a tárolókifejezés mögöttes forrása a lekérdezés korábbi szakaszában van
input_alias
bevezetve. Az ilyen kifejezés a tárolókifejezés kiértékelésével beszerzett elemek halmazát jelöli. Ez a kiértékelés az aliasos tárolóhoz társított készlethez tartozó egyes elemek hatókörében történik. Az eredményként kapott halmaz a készletek egysége, amelyet a tárolókifejezés kiértékelésével kapunk az alapul szolgáló készlet minden egyes eleméhez.
Példák
Ebben az első példában a záradék az FROM
aktuális tároló forrásként való megadására, egyedi név megadására, majd alias megadására szolgál. Az alias ezután a lekérdezés eredményeinek adott mezőinek kivetítésére szolgál.
SELECT VALUE {
name: e.name,
location: e.workLocation
}
FROM
employees e
[
{
"name": "Tijana Stanković",
"location": {
"office": "Redmond, WA"
}
},
{
"name": "Jean Nadeau",
"location": {
"type": "Remote"
}
}
]
Ebben a következő példában a FROM
záradék kisebb részhalmazra is csökkentheti a forrást. Ha az egyes elemekben csak egy részhalmazt szeretne számba adni, az alrész lehet a forrás. Forrásként tömb- vagy objektumalkotó is használható.
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"
}
]