Partilhar via


Cláusula SELECT (consulta NoSQL)

APLICA-SE A: NoSQL

Cada consulta consiste em uma SELECT cláusula e opcionalmente FROM e WHERE cláusulas, de acordo com os padrões ANSI SQL. Normalmente, a FROM fonte na cláusula é enumerada e a WHERE cláusula aplica um filtro na origem para recuperar um subconjunto de itens JSON. Em SELECT seguida, a cláusula 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

Description
<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. Esse argumento, ao contrário <property_list> disso, não encapsula 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, consulte a seção de expressões escalares para obter detalhes.

Exemplos

Este primeiro exemplo seleciona dois valores de cadeia de caracteres estática e retorna uma matriz com um único objeto contendo 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 VALUE palavra-chave é usada aqui para impedir o encapsulamento dos resultados em outro objeto JSON.

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

Neste exemplo, a VALUE palavra-chave é 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 há 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 SELECT cláusula, a VALUE palavra-chave, uma FROM cláusula 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"
  }
]

Observações

  • A SELECT * sintaxe só é válida se FROM a cláusula tiver declarado exatamente um alias. SELECT * fornece uma projeção de identidade, que pode ser útil se nenhuma projeção for necessária. SELECT * só é válida se FROM a cláusula for especificada e introduzida apenas uma única fonte de entrada.
  • Ambos SELECT <select_list> e SELECT * são "açúcar sintático" e podem ser expressos alternativamente usando afirmações simples SELECT :
    • 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 a: SELECT VALUE { p1: <expr1>, p2: <expr2>, ..., pN: <exprN> }[other clauses...].