DocumentDB SQL - Bileşik SQL Sorguları
Composite Query, birleştirilmiş veri kümesini gösteren rapor sonuçlarını sunmadan önce mevcut sorgulardaki verileri birleştirmenizi ve ardından filtreler, toplamalar vb. uygulamanızı sağlar. Bileşik Sorgu, mevcut sorgularla ilgili birden çok düzeyde ilgili bilgiyi alır ve birleştirilmiş verileri tek ve düzleştirilmiş bir sorgu sonucu olarak sunar.
Bileşik Sorguyu kullanarak, şu seçeneğe de sahipsiniz:
Kullanıcıların öznitelik seçimlerine göre gerekli olmayan tabloları ve alanları kaldırmak için SQL budama seçeneğini seçin.
ORDER BY ve GROUP BY yan tümcelerini ayarlayın.
WHERE yan tümcesini bir bileşik sorgunun sonuç kümesi üzerinde bir filtre olarak ayarlayın.
Yukarıdaki operatörler, daha güçlü sorgular oluşturmak için oluşturulabilir. DocumentDB iç içe geçmiş koleksiyonları desteklediğinden, kompozisyon birleştirilebilir veya iç içe olabilir.
Bu örnek için aşağıdaki belgeleri ele alalım.
AndersenFamily belge aşağıdaki gibidir.
{
"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 belge aşağıdaki gibidir.
{
"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 belge aşağıdaki gibidir.
{
"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
}
Birleştirilmiş sorgu örneğine bir göz atalım.
Aşağıda, ilk çocuğun bulunduğu ailenin kimliğini ve konumunu alacak olan sorgu yer almaktadır. givenName Michelle.
SELECT f.id,f.location
FROM Families f
WHERE f.children[0].givenName = "Michelle"
Yukarıdaki sorgu yürütüldüğünde aşağıdaki çıktıyı üretir.
[
{
"id": "SmithFamily",
"location": {
"state": "NY",
"county": "Queens",
"city": "Forest Hills"
}
}
]
Birleştirilmiş sorguya başka bir örnek verelim.
Aşağıda, birinci çocuk notunun 3'ten büyük olduğu tüm belgeleri döndürecek sorgu bulunmaktadır.
SELECT *
FROM Families f
WHERE ({grade: f.children[0].grade}.grade > 3)
Yukarıdaki sorgu yürütüldüğünde aşağıdaki çıktıyı üretir.
[
{
"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/"
}
]
Bir göz atalım example iç içe geçmiş sorgular.
Aşağıda, tüm üst öğeleri yineleyecek ve ardından belgeyi nereye iade edecek familyName Smith.
SELECT *
FROM p IN Families.parents
WHERE p.familyName = "Smith"
Yukarıdaki sorgu yürütüldüğünde aşağıdaki çıktıyı üretir.
[
{
"familyName": "Smith",
"givenName": "James"
}
]
Hadi düşünelim another example iç içe geçmiş sorgu.
Aşağıdakilerin tümünü döndürecek sorgu familyName.
SELECT VALUE p.familyName
FROM Families f
JOIN p IN f.parents
Yukarıdaki sorgu yürütüldüğünde, aşağıdaki çıktıyı üretir.
[
"Wakefield",
"Miller",
"Smith",
"Curtis"
]