DocumentDB SQL - cláusula From
Neste capítulo, abordaremos a cláusula FROM, que não funciona em nada como uma cláusula FROM padrão no SQL regular.
As consultas sempre são executadas no contexto de uma coleção específica e não podem ser unidas aos documentos da coleção, o que nos faz perguntar por que precisamos de uma cláusula FROM. Na verdade, não fazemos isso, mas se não o incluirmos, não estaremos consultando os documentos da coleção.
O objetivo desta cláusula é especificar a fonte de dados na qual a consulta deve operar. Normalmente, a coleção inteira é a fonte, mas pode-se especificar um subconjunto da coleção. A cláusula FROM <from_specification> é opcional, a menos que a fonte seja filtrada ou projetada posteriormente na consulta.
Vamos dar uma olhada no mesmo exemplo novamente. A seguir está oAndersenFamily documento.
{
"id": "AndersenFamily",
"lastName": "Andersen",
"parents": [
{ "firstName": "Thomas", "relationship": "father" },
{ "firstName": "Mary Kay", "relationship": "mother" }
],
"children": [
{
"firstName": "Henriette Thaulow",
"gender": "female",
"grade": 5,
"pets": [ { "givenName": "Fluffy", "type": "Rabbit" } ]
}
],
"location": { "state": "WA", "county": "King", "city": "Seattle" },
"isRegistered": true
}
A seguir está o SmithFamily documento.
{
"id": "SmithFamily",
"parents": [
{ "familyName": "Smith", "givenName": "James" },
{ "familyName": "Curtis", "givenName": "Helen" }
],
"children": [
{
"givenName": "Michelle",
"gender": "female",
"grade": 1
},
{
"givenName": "John",
"gender": "male",
"grade": 7,
"pets": [
{ "givenName": "Tweetie", "type": "Bird" }
]
}
],
"location": {
"state": "NY",
"county": "Queens",
"city": "Forest Hills"
},
"isRegistered": true
}
A seguir está o WakefieldFamily documento.
{
"id": "WakefieldFamily",
"parents": [
{ "familyName": "Wakefield", "givenName": "Robin" },
{ "familyName": "Miller", "givenName": "Ben" }
],
"children": [
{
"familyName": "Merriam",
"givenName": "Jesse",
"gender": "female",
"grade": 6,
"pets": [
{ "givenName": "Charlie Brown", "type": "Dog" },
{ "givenName": "Tiger", "type": "Cat" },
{ "givenName": "Princess", "type": "Cat" }
]
},
{
"familyName": "Miller",
"givenName": "Lisa",
"gender": "female",
"grade": 3,
"pets": [
{ "givenName": "Jake", "type": "Snake" }
]
}
],
"location": { "state": "NY", "county": "Manhattan", "city": "NY" },
"isRegistered": false
}
Na consulta acima, “SELECT * FROM c”Indica que a coleção inteira de Famílias é a fonte sobre a qual enumerar.
Sub-documentos
A fonte também pode ser reduzida a um subconjunto menor. Quando queremos recuperar apenas uma subárvore em cada documento, a sub-raiz pode se tornar a fonte, conforme mostrado no exemplo a seguir.
Quando executamos a seguinte consulta -
SELECT * FROM Families.parents
Os seguintes subdocumentos serão recuperados.
[
[
{
"familyName": "Wakefield",
"givenName": "Robin"
},
{
"familyName": "Miller",
"givenName": "Ben"
}
],
[
{
"familyName": "Smith",
"givenName": "James"
},
{
"familyName": "Curtis",
"givenName": "Helen"
}
],
[
{
"firstName": "Thomas",
"relationship": "father"
},
{
"firstName": "Mary Kay",
"relationship": "mother"
}
]
]
Como resultado dessa consulta, podemos ver que apenas os subdocumentos pais são recuperados.