Compartir vía


SELECT - Lenguaje de consulta en Cosmos DB (en Azure y Fabric)

La SELECT cláusula identifica los campos que se van a devolver en los resultados de la consulta. A continuación, la cláusula proyecta esos campos en el conjunto de resultados JSON.

Cada consulta consta de una SELECT cláusula y, opcionalmente FROM , y WHERE cláusulas, según los estándares DE ANSI SQL. Normalmente, el origen de la FROM cláusula se enumera y la WHERE cláusula aplica un filtro en el origen para recuperar un subconjunto de elementos JSON.

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 Propiedades o valor que se va a seleccionar para el conjunto de resultados.
* Especifica que el valor se debe recuperar sin realizar ningún cambio. En concreto, si el valor procesado es un objeto , se recuperan todas las propiedades.
object_property_list Especifica la lista de propiedades que se van a recuperar. Cada valor devuelto es un objeto con las propiedades especificadas.
VALUE Especifica que el valor JSON se debe recuperar en lugar del objeto JSON completo. Este argumento, a diferencia <de property_list> no ajusta el valor proyectado en un objeto .
DISTINCT Especifica que se deben quitar los duplicados de las propiedades proyectadas.
scalar_expression Expresión que representa el valor que se va a calcular.

Tipos de retorno

Devuelve los campos o valores proyectados según se especifica.

Examples

Esta sección contiene ejemplos de cómo usar esta construcción del lenguaje de consulta.

Selección de valores de cadena estáticos

En este ejemplo, dos valores de cadena estáticos y devuelve una matriz con un único objeto que contiene ambos valores. Dado que los valores no tienen nombre, se usa un número generado secuencial para asignar un nombre al campo json equivalente.

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

Campos de Project

En este ejemplo, la proyección JSON se usa para ajustar la estructura exacta y los nombres de campo del objeto JSON resultante. En este caso, se crea un objeto JSON con campos denominados identifier y model. El objeto JSON externo todavía no tiene nombre, por lo que se usa un número generado ($1) para asignar un nombre a este campo.

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

Cadena estática del proyecto

En este ejemplo, la palabra clave VALUE se usa con una cadena estática para crear una matriz de cadenas como resultado.

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

Proyección compleja

En este ejemplo, la consulta usa una combinación de una SELECT cláusula , la VALUE palabra clave , una FROM cláusula y la proyección JSON para realizar una consulta común con los resultados transformados en un objeto JSON para que el cliente analice.

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

Observaciones

  • La SELECT * sintaxis solo es válida si FROM la cláusula ha declarado exactamente un alias. SELECT * proporciona una proyección de identidad, que puede ser útil si no se necesita ninguna proyección. SELECT * solo es válido si FROM se especifica la cláusula y solo se introduce un único origen de entrada.
  • Tanto SELECT <select_list> como SELECT * son azúcar sintáctica y se pueden expresar mediante instrucciones simples SELECT .
  • La expresión SELECT * FROM ... AS from_alias ... es equivalente a SELECT from_alias FROM ... AS from_alias ....
  • La expresión SELECT <expr1> AS p1, <expr2> AS p2,..., <exprN> AS pN [other clauses...] es equivalente a SELECT VALUE { p1: <expr1>, p2: <expr2>, ..., pN: <exprN> }[other clauses...].