Share via


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űen SELECT p.id FROM products p. p Itt található a tároló aliasa. A tárolót nem feltétlenül kell elnevezni products vagy p. 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ág id nincs kötve. A lekérdezésnek ehelyett a (vagy<alias>.<property-name>) használatával kell hivatkoznia a tulajdonságra.idp.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 ROOTcontainer_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"
  }
]