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 dieFROM
-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 dieFROM
-Klausel angegeben ist und nur eine einzelne Eingabequelle eingeführt wurde. - Beide
SELECT <select_list>
sindSELECT *
"syntaktischer Zucker" und können alternativ mit einfachenSELECT
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...]
.