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


Предложение SELECT (запрос NoSQL)

ОБЛАСТЬ ПРИМЕНЕНИЯ: NoSQL

Каждый запрос состоит из SELECT предложения и при необходимости FROM и WHERE предложений в соответствии со стандартами ANSI SQL. Как правило, источник в предложении FROM перечисляется, а предложение WHERE применяет фильтр к этому источнику для получения подмножества элементов JSON. Затем предложение SELECT проецирует запрошенные значения 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 ]

Аргументы

Description
<select_specification> Свойства или значения, выбираемые для результирующего набора.
'*' Указывает, что значение необходимо извлечь без внесения изменений. В частности, если обработанное значение является объектом, извлекаются все свойства.
<object_property_list> Указывает список свойств, которые требуется извлечь. Каждое возвращаемое значение — это объект с указанными свойствами.
VALUE Указывает, что следует извлечь только значение JSON, а не весь объект JSON. Этот аргумент, в отличие от <property_list> проецируемого значения в объекте, не упаковывается в проектное значение.
DISTINCT Указывает, что необходимо удалить дубликаты проецируемых свойств.
<scalar_expression> Выражение, представляющее вычисляемое значение. Дополнительные сведения см . в разделе скалярных выражений .

Примеры

Первый пример выбирает два статических строковых значения и возвращает массив с одним объектом, содержащим оба значения. Так как значения не именуются, для имени эквивалентного поля JSON используется последовательно созданное число.

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

В следующем примере проекция JSON используется для точной настройки точных структур и имен полей для результирующего объекта JSON. Здесь объект JSON создается с полями с именем department и team. Внешний объект JSON по-прежнему не именован, поэтому созданное число ($1) используется для имени этого поля.

SELECT {
    department: "Sales",
    team: "Field sales"
}
[
  {
    "$1": {
      "department": "Sales",
      "team": "Field sales"
    }
  }
]

В этом примере показано выравнивание результирующих наборов из предыдущего примера для упрощения синтаксического анализа. Ключевое VALUE слово используется здесь для предотвращения упаковки результатов в другой объект JSON.

SELECT VALUE {
    department: "Sales",
    team: "Field sales"
}
[
  {
    "department": "Sales",
    "team": "Field sales"
  }
]

В этом примере VALUE ключевое слово используется со статической строкой для создания массива строк в качестве результата.

SELECT VALUE "Sales"
[
  "Sales"
]

В этом последнем примере предполагается, что контейнер с двумя элементами с различными полями различных типов данных.

[
  {
    "team": "Field sales",
    "identity": {
      "name": "Parker McLean"
    },
    "contact": [
      "206-555-0147"
    ]
  },
  {
    "team": "Field sales",
    "identity": {
      "name": "Beibit Shayakhmet"
    },
    "contact": [
      "206-555-0178"
    ]
  }
]

В этом последнем примере запроса используется сочетание предложения, ключевого SELECT слова, VALUE FROM предложения и проекции JSON для выполнения общего запроса с результатами, преобразованным в объект JSON для анализа клиента.

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

Замечания

  • Синтаксис 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...].