DocumentDB SQL - Bergabung
Dalam database relasional, klausa Gabungan digunakan untuk menggabungkan rekaman dari dua tabel atau lebih dalam database, dan kebutuhan untuk menggabungkan seluruh tabel sangat penting saat mendesain skema yang dinormalisasi. Karena DocumentDB berurusan dengan model data dokumen bebas skema yang didenormalisasi, GABUNG di DocumentDB SQL adalah padanan logis dari "selfjoin".
Mari pertimbangkan ketiga dokumen seperti pada contoh sebelumnya.
Berikut ini adalah AndersenFamily dokumen.
{
"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
}
Berikut ini adalah SmithFamily dokumen.
{
"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
}
Berikut ini adalah WakefieldFamily dokumen.
{
"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
}
Mari kita lihat contoh untuk memahami cara kerja klausa JOIN.
Berikut ini adalah query yang akan menggabungkan sub dokumen root to children.
SELECT f.id
FROM Families f
JOIN c IN f.children
Ketika query di atas dijalankan, maka akan menghasilkan keluaran sebagai berikut.
[
{
"id": "WakefieldFamily"
},
{
"id": "WakefieldFamily"
},
{
"id": "SmithFamily"
},
{
"id": "SmithFamily"
},
{
"id": "AndersenFamily"
}
]
Dalam contoh di atas, gabungannya adalah antara root dokumen dan sub-root turunan yang membuat produk silang antara dua objek JSON. Berikut adalah beberapa hal yang perlu diperhatikan -
Di klausa FROM, klausa JOIN adalah iterator.
Dua dokumen pertama WakefieldFamily dan SmithFamily berisi dua anak, sehingga kumpulan hasil juga berisi produk silang yang menghasilkan objek terpisah untuk setiap anak.
Dokumen ketiga AndersenFamily hanya berisi satu anak, oleh karena itu hanya ada satu objek yang sesuai dengan dokumen ini.
Mari kita lihat contoh yang sama, namun kali ini kita mengambil nama anak juga untuk pemahaman yang lebih baik tentang klausa JOIN.
Berikut ini adalah query yang akan menggabungkan sub dokumen root to children.
SELECT
f.id AS familyName,
c.givenName AS childGivenName,
c.firstName AS childFirstName
FROM Families f
JOIN c IN f.children
Ketika query di atas dijalankan, itu menghasilkan keluaran sebagai berikut.
[
{
"familyName": "WakefieldFamily",
"childGivenName": "Jesse"
},
{
"familyName": "WakefieldFamily",
"childGivenName": "Lisa"
},
{
"familyName": "SmithFamily",
"childGivenName": "Michelle"
},
{
"familyName": "SmithFamily",
"childGivenName": "John"
},
{
"familyName": "AndersenFamily",
"childFirstName": "Henriette Thaulow"
}
]