DocumentDB SQL - clausola From
In questo capitolo, tratteremo la clausola FROM, che non funziona come una clausola FROM standard in SQL normale.
Le query vengono sempre eseguite nel contesto di una raccolta specifica e non possono unirsi tra i documenti all'interno della raccolta, il che ci fa chiedere perché abbiamo bisogno di una clausola FROM. In effetti, non lo facciamo, ma se non lo includiamo, non interrogheremo i documenti nella raccolta.
Lo scopo di questa clausola è specificare l'origine dati su cui deve operare la query. Comunemente l'intera raccolta è l'origine, ma è possibile specificare invece un sottoinsieme della raccolta. La clausola FROM <from_specification> è facoltativa a meno che l'origine non venga filtrata o proiettata in un secondo momento nella query.
Diamo di nuovo un'occhiata allo stesso esempio. Di seguito è riportato il fileAndersenFamily 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
}
Di seguito è riportato il file 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
}
Di seguito è riportato il file 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
}
Nella query precedente, "SELECT * FROM c"Indica che l'intera raccolta delle famiglie è la fonte su cui enumerare.
Documenti secondari
La sorgente può anche essere ridotta a un sottoinsieme più piccolo. Quando vogliamo recuperare solo una sottostruttura in ogni documento, la sottostruttura potrebbe quindi diventare l'origine, come mostrato nell'esempio seguente.
Quando eseguiamo la seguente query:
SELECT * FROM Families.parents
Verranno recuperati i seguenti documenti secondari.
[
[
{
"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"
}
]
]
Come risultato di questa query, possiamo vedere che vengono recuperati solo i documenti secondari principali.