SELECT záradék (NoSQL-lekérdezés)

A KÖVETKEZŐRE VONATKOZIK: NoSQL

Minden lekérdezés egy SELECT záradékból, opcionálisan FROM és WHERE záradékokból áll ansi SQL-szabványok szerint. A záradékban szereplő FROM forrás általában enumerálva van, és a WHERE záradék egy szűrőt alkalmaz a forrásra a JSON-elemek egy részhalmazának lekéréséhez. A SELECT záradék ezután a kiválasztott listában megjeleníti a kért JSON-értékeket.

Szintaxis

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 ]

Argumentumok

Description
<select_specification> Az eredményhalmazhoz kijelölendő tulajdonságok vagy értékek.
'*' Megadja, hogy az értéket módosítás nélkül kell lekérni. Pontosabban, ha a feldolgozott érték egy objektum, a rendszer minden tulajdonságot lekér.
<object_property_list> Meghatározza a lekérendő tulajdonságok listáját. Minden visszaadott érték egy objektum, amely a megadott tulajdonságokkal rendelkezik.
VALUE Megadja, hogy a JSON-értéket a teljes JSON-objektum helyett le kell kérni. Ez az argumentum, ellentétben <property_list> a nem egy objektumban lévő előrejelzett értékkel.
DISTINCT Megadja, hogy a tervezett tulajdonságok duplikált példányait el kell távolítani.
<scalar_expression> A kiszámítandó értéket képviselő kifejezés. További információt a skaláris kifejezések szakaszában talál.

Példák

Ez az első példa két statikus sztringértéket jelöl ki, és egy tömböt ad vissza egyetlen, mindkét értéket tartalmazó objektummal. Mivel az értékek névtelenek, a rendszer szekvenciálisan generált számot használ az egyenértékű json mező elnevezéséhez.

SELECT "Adventure", "Works"
[
  {
    "$1": "Adventure",
    "$2": "Works"
  }
]

Ebben a következő példában a JSON-leképezéssel finomhangoljuk az eredményül kapott JSON-objektum pontos szerkezetét és mezőnevét. Itt egy JSON-objektum jön létre a és teamnevű department mezőkkel. A külső JSON-objektum továbbra is névtelen, ezért a mező elnevezéséhez generált számot ($1) használ a rendszer.

SELECT {
    department: "Sales",
    team: "Field sales"
}
[
  {
    "$1": {
      "department": "Sales",
      "team": "Field sales"
    }
  }
]

Ez a példa az előző példában szereplő eredményhalmaz simítását mutatja be az elemzés egyszerűsítése érdekében. A VALUE kulcsszó itt arra szolgál, hogy megakadályozza az eredmények egy másik JSON-objektumba való körbefuttatását.

SELECT VALUE {
    department: "Sales",
    team: "Field sales"
}
[
  {
    "department": "Sales",
    "team": "Field sales"
  }
]

Ebben a példában a VALUE kulcsszót egy statikus sztringgel együtt használjuk a sztringek tömbjének létrehozásához.

SELECT VALUE "Sales"
[
  "Sales"
]

Ebben az utolsó példában tegyük fel, hogy van egy tároló két különböző adattípusú mezővel rendelkező elemet tartalmazó tárolóval.

[
  {
    "team": "Field sales",
    "identity": {
      "name": "Parker McLean"
    },
    "contact": [
      "206-555-0147"
    ]
  },
  {
    "team": "Field sales",
    "identity": {
      "name": "Beibit Shayakhmet"
    },
    "contact": [
      "206-555-0178"
    ]
  }
]

Ez az utolsó példaként szolgáló lekérdezés egy SELECT záradék, egy VALUE kulcsszó, egy FROM záradék és egy JSON-vetület kombinációját használja egy közös lekérdezés végrehajtásához, amelynek eredménye JSON-objektummá alakul át az ügyfél elemzéséhez.

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"
  }
]

Megjegyzések

  • A SELECT * szintaxis csak akkor érvényes, ha FROM a záradék pontosan egy aliast deklarált. SELECT * identitásvetítést biztosít, amely akkor lehet hasznos, ha nincs szükség kivetítésre. SELECT * csak akkor érvényes, ha FROM a záradék meg van adva, és csak egyetlen bemeneti forrást vezet be.
  • SELECT * Mindkettő SELECT <select_list> "szintaktikai cukor", és egyszerű SELECT utasítások használatával is kifejezhető:
    • SELECT * FROM ... AS from_alias ... a következőnek felel meg: SELECT from_alias FROM ... AS from_alias ....
    • SELECT <expr1> AS p1, <expr2> AS p2,..., <exprN> AS pN [other clauses...] a következőnek felel meg: SELECT VALUE { p1: <expr1>, p2: <expr2>, ..., pN: <exprN> }[other clauses...].