Cláusula SELECT (consulta NoSQL)
APLICA-SE A: NoSQL
Toda consulta consiste em uma cláusula SELECT
e as cláusulas opcionais FROM
e WHERE
de acordo com os padrões ANSI-SQL. Normalmente, a origem na cláusula FROM
é enumerada e a cláusula WHERE
aplica um filtro na origem para recuperar um subconjunto de itens JSON. Em seguida, a cláusula SELECT
projeta os valores JSON solicitados na lista de seleção.
Sintaxe
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 ]
Argumentos
Descrição | |
---|---|
<select_specification> |
Propriedades ou valor a ser selecionado para o conjunto de resultados. |
'*' |
Especifica que o valor deve ser recuperado sem fazer alterações. Especificamente, se o valor processado for um objeto, todas as propriedades serão recuperadas. |
<object_property_list> |
Especifica a lista de propriedades a serem recuperadas. Cada valor retornado é um objeto com as propriedades especificadas. |
VALUE |
Especifica que o valor JSON deve ser recuperado em vez do objeto JSON completo. Este argumento, ao contrário de <property_list> , não envolve o valor projetado em um objeto. |
DISTINCT |
Especifica que duplicatas de propriedades projetadas devem ser removidas. |
<scalar_expression> |
Expressão que representa o valor a ser calculado. Para obter mais informações, confira a seção expressões escalares para obter detalhes. |
Exemplos
Este primeiro exemplo seleciona dois valores de cadeia de caracteres estáticos e retorna uma matriz com um único objeto que contém ambos os valores. Como os valores não são nomeados, um número gerado sequencial é usado para nomear o campo json equivalente.
SELECT "Adventure", "Works"
[
{
"$1": "Adventure",
"$2": "Works"
}
]
Neste próximo exemplo, a projeção JSON é usada para ajustar a estrutura exata e os nomes de campo para o objeto JSON resultante. Aqui, um objeto JSON é criado com campos chamados department
e team
. O objeto JSON externo ainda não tem nome, portanto, um número gerado ($1
) é usado para nomear esse campo.
SELECT {
department: "Sales",
team: "Field sales"
}
[
{
"$1": {
"department": "Sales",
"team": "Field sales"
}
}
]
Este exemplo ilustra o nivelamento do conjunto de resultados do exemplo anterior para simplificar a análise. A palavra-chave VALUE
é usada aqui para impedir a quebra de linha dos resultados em outro objeto JSON.
SELECT VALUE {
department: "Sales",
team: "Field sales"
}
[
{
"department": "Sales",
"team": "Field sales"
}
]
Neste exemplo, a palavra-chave VALUE
é usada com uma cadeia de caracteres estática para criar uma matriz de cadeias de caracteres como resultado.
SELECT VALUE "Sales"
[
"Sales"
]
Neste exemplo final, suponha que haja um contêiner com dois itens com vários campos de tipos de dados diferentes.
[
{
"team": "Field sales",
"identity": {
"name": "Parker McLean"
},
"contact": [
"206-555-0147"
]
},
{
"team": "Field sales",
"identity": {
"name": "Beibit Shayakhmet"
},
"contact": [
"206-555-0178"
]
}
]
Esta consulta de exemplo final usa uma combinação de uma cláusula SELECT
, a palavra-chave VALUE
, uma cláusula FROM
e projeção JSON para executar uma consulta comum com os resultados transformados em um objeto JSON para o cliente analisar.
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"
}
]
Comentários
- A sintaxe
SELECT *
só será válida se a cláusulaFROM
tiver declarado exatamente um alias.SELECT *
fornece uma projeção de identidade, que pode ser útil se nenhuma projeção é necessária.SELECT *
só é válido se a cláusulaFROM
for especificada e introduzida uma única fonte de entrada. - Ambos
SELECT <select_list>
sãoSELECT *
"açúcar sintático" e podem ser expressos alternativamente usando declarações simplesSELECT
:SELECT * FROM ... AS from_alias ...
é equivalente a:SELECT from_alias FROM ... AS from_alias ...
.SELECT <expr1> AS p1, <expr2> AS p2,..., <exprN> AS pN [other clauses...]
é equivalente:SELECT VALUE { p1: <expr1>, p2: <expr2>, ..., pN: <exprN> }[other clauses...]
.