DocumentDB SQL - Zusammengesetzte SQL-Abfragen
Composite QueryMit dieser Option können Sie Daten aus vorhandenen Abfragen kombinieren und anschließend Filter, Aggregate usw. anwenden, bevor Sie die Berichtsergebnisse anzeigen, die den kombinierten Datensatz anzeigen. Composite Query ruft mehrere Ebenen verwandter Informationen zu vorhandenen Abfragen ab und präsentiert die kombinierten Daten als einzelnes und abgeflachtes Abfrageergebnis.
Mit Composite Query haben Sie auch die Möglichkeit:
Wählen Sie die Option SQL-Bereinigung aus, um Tabellen und Felder zu entfernen, die aufgrund der Attributauswahl der Benutzer nicht benötigt werden.
Setzen Sie die Klauseln ORDER BY und GROUP BY.
Legen Sie die WHERE-Klausel als Filter für die Ergebnismenge einer zusammengesetzten Abfrage fest.
Die obigen Operatoren können zusammengesetzt werden, um leistungsfähigere Abfragen zu bilden. Da DocumentDB verschachtelte Sammlungen unterstützt, kann die Komposition entweder verkettet oder verschachtelt werden.
Betrachten wir die folgenden Dokumente für dieses Beispiel.
AndersenFamily Dokument ist wie folgt.
{
"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 Dokument ist wie folgt.
{
"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 Dokument ist wie folgt.
{
"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
}
Schauen wir uns ein Beispiel für eine verkettete Abfrage an.
Es folgt die Abfrage, mit der die ID und der Standort der Familie abgerufen werden, in der sich das erste Kind befindet givenName ist Michelle.
SELECT f.id,f.location
FROM Families f
WHERE f.children[0].givenName = "Michelle"
Wenn die obige Abfrage ausgeführt wird, wird die folgende Ausgabe erzeugt.
[
{
"id": "SmithFamily",
"location": {
"state": "NY",
"county": "Queens",
"city": "Forest Hills"
}
}
]
Betrachten wir ein weiteres Beispiel für eine verkettete Abfrage.
Es folgt die Abfrage, die alle Dokumente zurückgibt, bei denen die erste untergeordnete Klasse größer als 3 ist.
SELECT *
FROM Families f
WHERE ({grade: f.children[0].grade}.grade > 3)
Wenn die obige Abfrage ausgeführt wird, wird die folgende Ausgabe erzeugt.
[
{
"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/"
}
]
Werfen wir einen Blick auf eine example von verschachtelten Abfragen.
Im Folgenden finden Sie die Abfrage, die alle übergeordneten Elemente durchläuft und das Dokument an den folgenden Ort zurückgibt familyName ist Smith.
SELECT *
FROM p IN Families.parents
WHERE p.familyName = "Smith"
Wenn die obige Abfrage ausgeführt wird, wird die folgende Ausgabe erzeugt.
[
{
"familyName": "Smith",
"givenName": "James"
}
]
Lassen Sie uns überlegen another example der verschachtelten Abfrage.
Es folgt die Abfrage, die alle zurückgibt familyName.
SELECT VALUE p.familyName
FROM Families f
JOIN p IN f.parents
Wenn die obige Abfrage ausgeführt wird, wird die folgende Ausgabe erzeugt.
[
"Wakefield",
"Miller",
"Smith",
"Curtis"
]