SELECT - Cosmos DB 中的查询语言(在 Azure 和 Fabric 中)

SELECT 子句标识在查询结果中返回的字段。 然后,该子句将这些字段投影到 JSON 结果集中。

每个查询都包含一个 SELECT 子句和(可选 FROM )以及 WHERE 每个 ANSI SQL 标准子句。 通常,枚举子句中的 FROM 源,该 WHERE 子句对源应用筛选器以检索 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 要为结果集选择的属性或值。
* 指定应在不进行任何更改的情况下检索该值。 具体而言,如果处理的值是对象,则会检索所有属性。
object_property_list 指定要检索的属性的列表。 每个返回的值都是具有指定属性的对象。
VALUE 指定应检索 JSON 值而不是完整的 JSON 对象。 与property_list>不同的<参数不会在对象中包装投影值。
DISTINCT 指定应删除投影属性的副本。
scalar_expression 表示要计算的值的表达式。

返回类型

返回指定的投影字段或值。

例子

本部分包含有关如何使用此查询语言构造的示例。

选择静态字符串值

在此示例中,有两个静态字符串值,并返回包含这两个值的单个对象的数组。 由于值未命名,因此使用顺序生成的数字来命名等效的 json 字段。

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

项目字段

在此示例中,JSON 投影用于微调生成的 JSON 对象的确切结构和字段名称。 在这里,将创建一个 JSON 对象,其中包含名为 identifiermodel. 外部 JSON 对象仍未命名,因此使用生成的数字 ($1) 来命名此字段。

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

项目静态字符串

在此示例中,VALUE 关键字与静态字符串一起使用,以创建字符串数组作为结果。

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

复杂投影

在此示例中,查询使用子句、VALUE关键字、子FROM句和 JSON 投影的组合SELECT来执行公共查询,并将结果转换为 JSON 对象供客户端分析。

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

注解

  • 仅当子句声明了一个别名时FROM,语法SELECT *才有效。 SELECT * 提供标识投影,如果不需要投影,这非常有用。 SELECT * 仅当指定子句并仅引入单个输入源时 FROM ,才有效。
  • SELECT *两者都是SELECT <select_list>语法糖,可以使用简单SELECT语句表示。
  • SELECT * FROM ... AS from_alias ...表达式等效于 SELECT from_alias FROM ... AS from_alias ....
  • SELECT <expr1> AS p1, <expr2> AS p2,..., <exprN> AS pN [other clauses...]表达式等效于 SELECT VALUE { p1: <expr1>, p2: <expr2>, ..., pN: <exprN> }[other clauses...].