SELECT-Klausel (NoSQL-Abfrage)

GILT FÜR: NoSQL

Jede Abfrage besteht aus einer SELECT-Klausel und optional FROM- und WHERE-Klauseln nach ANSI SQL-Standards. Normalerweise wird die Quelle in der FROM-Klausel aufgelistet, und die WHERE-Klausel wendet einen Filter auf die Quelle an, um eine Teilmenge der JSON-Elemente abzurufen. Dann projiziert die SELECT-Klausel die angeforderten JSON-Werte in die ausgewählte Liste.

Syntax

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 ]

Argumente

BESCHREIBUNG
<select_specification> Eigenschaften oder Wert, die für das Resultset ausgewählt werden.
'*' Gibt an, dass der Wert abgerufen werden sollte, ohne Änderungen vorzunehmen. Insbesondere, wenn der verarbeitete Wert ein Objekt ist, werden alle Eigenschaften abgerufen.
<object_property_list> Gibt die Liste der abzurufenden Eigenschaften an. Jeder zurückgegebene Wert ist ein Objekt mit den angegebenen Eigenschaften.
VALUE Gibt an, dass der JSON-Wert anstelle des vollständigen JSON-Objekts abgerufen werden sollte. Im Gegensatz zu <property_list> verpackt dieses Argument den projizierten Wert nicht in ein Objekt.
DISTINCT Hiermit wird festgelegt, dass Duplikate von voraussichtlichen Eigenschaften entfernt werden sollen.
<scalar_expression> Ausdruck, der den zu berechnenden Wert darstellt. Weitere Informationen finden Sie im Abschnitt skalare Ausdrücke .

Beispiele

In diesem ersten Beispiel werden zwei statische Zeichenfolgenwerte ausgewählt, und es gibt ein Array mit einem einzelnen Objekt zurück, das beide Werte enthält. Da die Werte unbenannt sind, wird eine sequenzielle generierte Zahl verwendet, um das entsprechende JSON-Feld zu benennen.

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

In diesem nächsten Beispiel wird die JSON-Projektion verwendet, um die genaue Struktur und die Feldnamen für das resultierende JSON-Objekt zu optimieren. Hier wird ein JSON-Objekt mit Feldern mit den Namen department und team erstellt. Das externe JSON-Objekt ist immer noch unbenannt, sodass eine generierte Zahl ($1) verwendet wird, um dieses Feld zu benennen.

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

Dieses Beispiel veranschaulicht die Vereinfachung des Resultsets aus dem vorherigen Beispiel, um das Parsen zu vereinfachen. Das VALUE-Schlüsselwort wird hier verwendet, um das Umschließen der Ergebnisse in ein anderes JSON-Objekt zu verhindern.

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

In diesem Beispiel wird das VALUE-Schlüsselwort mit einer statischen Zeichenfolge verwendet, um als Ergebnis ein Array von Zeichenfolgen zu erstellen.

SELECT VALUE "Sales"
[
  "Sales"
]

In diesem letzten Beispiel wird davon ausgegangen, dass es einen Container mit zwei Elementen mit verschiedenen Feldern unterschiedlicher Datentypen gibt.

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

Diese letzte Beispielabfrage verwendet eine Kombination aus einer SELECT-Klausel, dem VALUE-Schlüsselwort, einer FROM-Klausel und einer JSON-Projektion, um eine allgemeine Abfrage durchzuführen, deren Ergebnisse in ein JSON-Objekt umgewandelt werden, das der Client parsen kann.

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

Bemerkungen

  • Die SELECT *-Syntax ist nur gültig, wenn die FROM-Klausel genau einen Alias deklariert hat. SELECT * bietet eine Identitätsprojektion, die hilfreich sein kann, wenn keine Projektion erforderlich ist. SELECT * ist nur gültig, wenn die FROM-Klausel angegeben ist und nur eine einzelne Eingabequelle eingeführt wurde.
  • Sowohl SELECT <select_list> als auch SELECT * sind „syntaktischer Zucker“ und können alternativ durch das Verwenden einfacher SELECT-Anweisungen ausgedrückt werden:
    • SELECT * FROM ... AS from_alias ... entspricht: SELECT from_alias FROM ... AS from_alias ....
    • SELECT <expr1> AS p1, <expr2> AS p2,..., <exprN> AS pN [other clauses...] entspricht: SELECT VALUE { p1: <expr1>, p2: <expr2>, ..., pN: <exprN> }[other clauses...].