Предложение 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...]
.