Поделиться через


SELECT — язык запросов в Cosmos DB (в Azure и Fabric)

Предложение SELECT определяет поля, возвращаемые в результатах запроса. Затем предложение проецит эти поля в результирующий набор JSON.

Каждый запрос состоит из SELECT предложения и при необходимости FROM и WHERE предложений в соответствии со стандартами ANSI SQL. Как правило, источник в FROM предложении перечисляется, и WHERE предложение применяет фильтр к источнику для получения подмножества элементов JSON.

Синтаксис

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 создается с полями с именем identifier и model. Внешний объект 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"
]

Сложная проекция

В этом примере запрос использует сочетание предложения, ключевого SELECT слова, VALUEFROM предложения и проекции JSON для выполнения общего запроса с результатами, преобразованным в объект 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"
  },
  ...
]

Замечания

  • Синтаксис SELECT * действителен только в том случае, если FROM предложение объявило ровно один псевдоним. SELECT * предоставляет проекцию удостоверений, которая может быть полезна, если проекция не требуется. SELECT * является допустимым только в том случае, если FROM указано предложение и введено только один источник входных данных.
  • Оба SELECT <select_list> и SELECT * являются синтаксическим сахаром и могут быть выражены с помощью простых 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...].