DocumentDB SQL - Query SQL composite
Composite Queryconsente di combinare i dati di query esistenti e quindi applicare filtri, aggregazioni e così via prima di presentare i risultati del report, che mostrano il set di dati combinato. La query composita recupera più livelli di informazioni correlate sulle query esistenti e presenta i dati combinati come un risultato di query singolo e appiattito.
Utilizzando Composite Query, hai anche la possibilità di:
Selezionare l'opzione di eliminazione SQL per rimuovere tabelle e campi non necessari in base alle selezioni di attributi degli utenti.
Impostare le clausole ORDER BY e GROUP BY.
Imposta la clausola WHERE come filtro sul set di risultati di una query composta.
Gli operatori di cui sopra possono essere composti per formare query più potenti. Poiché DocumentDB supporta le raccolte nidificate, la composizione può essere concatenata o nidificata.
Consideriamo i seguenti documenti per questo esempio.
AndersenFamily documento è il seguente.
{
"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
}
SmithFamily documento è il seguente.
{
"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
}
WakefieldFamily documento è il seguente.
{
"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
}
Diamo un'occhiata a un esempio di query concatenata.
Di seguito è riportata la query che recupererà l'id e la posizione della famiglia in cui si trova il primo figlio givenName è Michelle.
SELECT f.id,f.location
FROM Families f
WHERE f.children[0].givenName = "Michelle"
Quando la query precedente viene eseguita, produce il seguente output.
[
{
"id": "SmithFamily",
"location": {
"state": "NY",
"county": "Queens",
"city": "Forest Hills"
}
}
]
Consideriamo un altro esempio di query concatenata.
Di seguito è riportata la query che restituirà tutti i documenti in cui il primo voto del bambino è maggiore di 3.
SELECT *
FROM Families f
WHERE ({grade: f.children[0].grade}.grade > 3)
Quando la query precedente viene eseguita, produce il seguente output.
[
{
"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,
"_rid": "Ic8LAJFujgECAAAAAAAAAA==",
"_ts": 1450541623,
"_self": "dbs/Ic8LAA==/colls/Ic8LAJFujgE=/docs/Ic8LAJFujgECAAAAAAAAAA==/",
"_etag": "\"00000500-0000-0000-0000-567582370000\"",
"_attachments": "attachments/"
},
{
"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,
"_rid": "Ic8LAJFujgEEAAAAAAAAAA==",
"_ts": 1450541624,
"_self": "dbs/Ic8LAA==/colls/Ic8LAJFujgE=/docs/Ic8LAJFujgEEAAAAAAAAAA==/",
"_etag": "\"00000700-0000-0000-0000-567582380000\"",
"_attachments": "attachments/"
}
]
Diamo un'occhiata a un file example di query annidate.
Di seguito è riportata la query che itererà tutti i genitori e quindi restituirà il documento dove familyName è Smith.
SELECT *
FROM p IN Families.parents
WHERE p.familyName = "Smith"
Quando la query precedente viene eseguita, produce il seguente output.
[
{
"familyName": "Smith",
"givenName": "James"
}
]
Consideriamo another example di query annidate.
Di seguito è riportata la query che restituirà tutti i file familyName.
SELECT VALUE p.familyName
FROM Families f
JOIN p IN f.parents
Quando la query precedente viene eseguita, produce il seguente output.
[
"Wakefield",
"Miller",
"Smith",
"Curtis"
]