Cláusula FROM (consulta NoSQL)
APLICA-SE A: NoSQL
A cláusula FROM (FROM <from_specification>
) é opcional, a menos que a origem seja filtrada ou projetada mais tarde na consulta. Uma consulta como SELECT * FROM products
enumera num contentor inteiro, independentemente do nome. Também pode utilizar o identificador ROOT
especial para o contentor em vez de utilizar o nome do contentor.
A FROM
cláusula impõe as seguintes regras por consulta:
- O contentor pode ser aliasado, como
SELECT p.id FROM products AS p
ou simplesmenteSELECT p.id FROM products p
.p
Eis o alias do contentor. O contentor não precisa necessariamente de ser nomeadoproducts
oup
.AS
é uma palavra-chave opcional para alias do identificador. - Depois de aliasado, o nome de origem original não pode ser vinculado. Por exemplo,
SELECT products.id FROM products p
é sintaticamente inválido porque o identificadorproducts
foi aliasado e já não pode ser resolvido. - Todas as propriedades referenciadas têm de ser completamente qualificadas, para evitar enlaces ambíguos na ausência de cumprimento rigoroso do esquema. Por exemplo,
SELECT id FROM products p
é sintaticamente inválida porque a propriedadeid
não está vinculada. Em vez disso, a consulta deve referenciar a propriedadeid
comp.id
(ou<alias>.<property-name>
).
Sintaxe
FROM <from_specification>
<from_specification> ::=
<from_source> {[ JOIN <from_source>][,...n]}
<from_source> ::=
<container_expression> [[AS] input_alias]
| input_alias IN <container_expression>
<container_expression> ::=
ROOT
| container_name
| input_alias
| <container_expression> '.' property_name
| <container_expression> '[' "property_name" | array_index ']'
Argumentos
Description | |
---|---|
<from_source> |
Especifica uma origem de dados, com ou sem um alias. Se o alias não for especificado, é inferido a <container_expression> partir das seguintes regras. Se a expressão for um container_name , container_name é utilizada como um alias. Se a expressão for <container_expression> , property_name é utilizada como um alias. Se a expressão for um container_name , container_name é utilizada como um alias. |
AS input_alias |
Especifica que é input_alias um conjunto de valores devolvidos pela expressão de contentor subjacente. |
input_alias IN |
Especifica que o input_alias deve representar o conjunto de valores obtidos ao iterar em todos os elementos de matriz de cada matriz devolvidos pela expressão de contentor subjacente. Qualquer valor devolvido pela expressão de contentor subjacente que não seja uma matriz é ignorado. |
<container_expression> |
Especifica a expressão de contentor a ser utilizada para obter os itens. |
ROOT |
Especifica que o item deve ser obtido a partir do contentor predefinido atualmente ligado. |
container_name |
Especifica que o item deve ser obtido a partir do contentor fornecido. O nome do contentor tem de corresponder ao nome do contentor atualmente ligado. |
input_alias |
Especifica que o item deve ser obtido a partir da outra origem definida pelo alias fornecido. |
<container_expression> '.' property_name |
Especifica que o item deve ser obtido ao aceder à property_name propriedade . |
<container_expression> '[' "property_name" \| array_index ']' |
Especifica que o item deve ser obtido ao aceder à property_name propriedade ou array_index elemento de matriz para todos os itens obtidos pela expressão de contentor especificada. |
Observações
Todos os aliases fornecidos ou inferidos nos <from_source>
(s) têm de ser exclusivos. A Sintaxe <container_expression> '.' property_name
é a mesma <container_expression> '[' "property_name" ']'
que . No entanto, a última sintaxe pode ser utilizada se um nome de propriedade contiver um caráter não identificador.
Processar propriedades em falta, elementos de matriz em falta e valores indefinidos
Se uma expressão de contentor aceder a propriedades ou elementos de matriz e esse valor não existir, esse valor é ignorado e não processado mais.
Âmbito do contexto da expressão de contentor
Uma expressão de contentor pode ter o âmbito do contentor ou o âmbito do item:
Uma expressão tem um âmbito de contentor, se a origem subjacente da expressão de contentor for
ROOT
oucontainer_name
. Esta expressão representa um conjunto de itens obtidos diretamente do contentor e não depende do processamento de outras expressões de contentor.Uma expressão tem um âmbito de item, se a origem subjacente da expressão de contentor for
input_alias
introduzida anteriormente na consulta. Esta expressão representa um conjunto de itens obtidos ao avaliar a expressão de contentor. Esta avaliação é efetuada no âmbito de cada item pertencente ao conjunto associado ao contentor aliased. O conjunto resultante é uma união de conjuntos obtidos ao avaliar a expressão de contentor para cada um dos itens no conjunto subjacente.
Exemplos
Neste primeiro exemplo, a FROM
cláusula é utilizada para especificar o contentor atual como uma origem, atribuir-lhe um nome exclusivo e, em seguida, aliasá-lo. Em seguida, o alias é utilizado para projetar campos específicos nos resultados da consulta.
SELECT VALUE {
name: e.name,
location: e.workLocation
}
FROM
employees e
[
{
"name": "Tijana Stanković",
"location": {
"office": "Redmond, WA"
}
},
{
"name": "Jean Nadeau",
"location": {
"type": "Remote"
}
}
]
Neste exemplo seguinte, a FROM
cláusula também pode reduzir a origem a um subconjunto mais pequeno. Para enumerar apenas uma subárvore em cada item, a subroota pode tornar-se a origem. Uma subroota de matriz ou objeto pode ser utilizada como uma origem.
SELECT
*
FROM
employees.employment e
[
{
"hireDateTime": "2023-01-01T06:30:00.000Z",
"weeklyHours": 40,
"team": "Retail support"
},
{
"hireDateTime": "2023-01-01T09:30:00.000Z",
"team": "Retail support"
},
{
"hireDateTime": "2023-01-01T15:30:00.000Z",
"weeklyHours": 32,
"team": "Retail support"
}
]