Freigeben über


SELECT - Abfragesprache in Cosmos DB (in Azure und Fabric)

Die SELECT Klausel identifiziert Felder, die in Abfrageergebnissen zurückgegeben werden sollen. Die Klausel übergibt diese Felder dann in das JSON-Resultset.

Jede Abfrage besteht aus einer SELECT Klausel und optional FROM und WHERE Klauseln pro ANSI SQL-Standards. In der Regel wird die Quelle in der FROM Klausel aufgezählt, und die WHERE Klausel wendet einen Filter auf die Quelle an, um eine Teilmenge von JSON-Elementen abzurufen.

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 ]

Arguments

Description
select_specification Eigenschaften oder Wert, die für das Resultset ausgewählt werden sollen.
* Gibt an, dass der Wert ohne Änderungen abgerufen werden soll. 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 soll. Dieses Argument schließt im Gegensatz zu <property_list> den projizierten Wert nicht in ein Objekt um.
DISTINCT Gibt an, dass Duplikate von projizierten Eigenschaften entfernt werden sollen.
scalar_expression Ausdruck, der den zu berechnenden Wert darstellt.

Rückgabetypen

Gibt die projizierten Felder oder Werte wie angegeben zurück.

Examples

Dieser Abschnitt enthält Beispiele für die Verwendung dieses Abfragesprachenkonstrukts.

Auswählen statischer Zeichenfolgenwerte

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

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

Projektfelder

In diesem Beispiel wird die JSON-Projektion verwendet, um die exakten Struktur- und Feldnamen für das resultierende JSON-Objekt zu optimieren. Hier wird ein JSON-Objekt mit Feldern namens identifier und model. Das externe JSON-Objekt ist weiterhin unbenannt, sodass eine generierte Zahl ($1) zum Benennen dieses Felds verwendet wird.

SELECT {
  identifier: p.name,
  model: p.sku
}
FROM
  products p
[
  {
    "$1": {
      "identifier": "Remdriel Shoes",
      "model": "61506"
    }
  },
  {
    "$1": {
      "identifier": "Tirevy trunks",
      "model": "73402"
    }
  },
  ...
]

Statische Project-Zeichenfolge

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

SELECT VALUE
  "Cosmic Works"
[
  "Cosmic Works"
]

Komplexe Projektion

In diesem Beispiel verwendet die Abfrage eine Kombination aus einer SELECT Klausel, dem VALUE Schlüsselwort, einer Klausel und einer FROM JSON-Projektion, um eine gemeinsame Abfrage mit den Ergebnissen auszuführen, die in ein JSON-Objekt umgewandelt wurden, damit der Client analysiert werden kann.

SELECT VALUE {
  name: p.name,
  link: p.metadata.link,
  firstTag: p.tags[0]["value"]
}
FROM
  products p
[
  {
    "name": "Remdriel Shoes",
    "link": "https://www.adventure-works.com/remdriel-shoes/68719521615.p",
    "firstTag": "suede-leather-and-mesh"
  },
  {
    "name": "Tirevy trunks",
    "link": "https://www.adventure-works.com/tirevy-trunks/68719520573.p",
    "firstTag": "polyester"
  },
  ...
]

Bemerkungen

  • Die SELECT * Syntax ist nur gültig, wenn FROM die Klausel genau einen Alias deklariert hat. SELECT * stellt eine Identitätsprojektion bereit, die nützlich sein kann, wenn keine Projektion erforderlich ist. SELECT * ist nur gültig, wenn FROM eine Klausel angegeben und nur eine einzige Eingabequelle eingeführt wurde.
  • Beide SELECT <select_list> sind SELECT * syntaktischer Zucker und können mit einfachen SELECT Aussagen ausgedrückt werden.
  • Der Ausdruck SELECT * FROM ... AS from_alias ... ist gleichbedeutend mit SELECT from_alias FROM ... AS from_alias ....
  • Der Ausdruck SELECT <expr1> AS p1, <expr2> AS p2,..., <exprN> AS pN [other clauses...] ist gleichbedeutend mit SELECT VALUE { p1: <expr1>, p2: <expr2>, ..., pN: <exprN> }[other clauses...].