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ót nem feltétlenül kell elnevezniproducts
vagyp
.AS
az azonosító aliasának megadása nem kötelező kulcsszó. - Az alias létrehozása 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 elkerülje a kétértelmű kötéseket 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 (vagy<alias>.<property-name>
) használatával kell hivatkoznia a tulajdonságra.id
p.id
Szintaxis
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
Description | |
---|---|
<from_source> |
Egy adatforrást ad 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 aliasként lesz használva. Ha a kifejezés , <container_expression> akkor property_name aliasként lesz használva. Ha a kifejezés egy container_name , akkor container_name aliasként lesz használva. |
MÁSKÉNT input_alias |
Azt adja meg, hogy az input_alias a mögöttes tárolókifejezés által visszaadott értékek halmaza. |
input_alias IN |
Azt adja meg, hogy az input_alias értékkészlet a mögöttes tárolókifejezés által visszaadott tömbök összes tömbelemére való iterálással kapott értékkészletet adja meg. A rendszer figyelmen kívül hagyja a mögöttes 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-e 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 property_name tulajdonság eléréséhez kell lekérni. |
<container_expression> '[' "property_name" \| array_index ']' |
Megadja, hogy az elemet a property_name megadott tárolókifejezés által lekért összes elem tulajdonságához vagy array_index tömbeleméhez való hozzáféréssel kell lekérni. |
Megjegyzések
A(z) (s)ben <from_source>
megadott vagy kikövetkeztetett összes aliasnak egyedinek kell lennie. A szintaxis <container_expression> '.' property_name
ugyanaz, mint <container_expression> '[' "property_name" ']'
a . Ez utóbbi szintaxis azonban akkor használható, ha egy tulajdonságnév nem azonosító 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 elem hatókörrel is rendelkezhetnek:
Egy 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 alapjául szolgáló forrást a lekérdezésben korábban vezették
input_alias
be. 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 aliasozott 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 mögöttes készlet minden eleméhez tartozó tárolókifejezés kiértékelésével kapott halmazok egyesítését jelenti.
Példák
Ebben az első példában a FROM
záradék az 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ési eredmények 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 alroot lehet a forrás. Forrásként tömb vagy objektum alroot 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"
}
]