SELECT yan tümcesi (NoSQL sorgusu)
UYGULANANLAR: NoSQL
Her sorgu ANSI SQL standartlarına göre bir SELECT
yan tümceden ve isteğe bağlı olarak FROM
ve WHERE
yan tümcelerinden oluşur. Genellikle yan tümcesindeki FROM
kaynak numaralandırılır ve WHERE
yan tümcesi, JSON öğelerinin bir alt kümesini almak için kaynağa bir filtre uygular. Yan tümcesi SELECT
daha sonra istenen JSON değerlerini seçme listesine dönüştürür.
Söz dizimi
SELECT <select_specification>
<select_specification> ::=
'*'
| [DISTINCT] <object_property_list>
| [DISTINCT] VALUE <scalar_expression> [[ AS ] value_alias]
<object_property_list> ::=
{ <scalar_expression> [ [ AS ] property_alias ] } [ ,...n ]
Bağımsız değişkenler
Açıklama | |
---|---|
<select_specification> |
Sonuç kümesi için seçilecek özellikler veya değer. |
'*' |
Herhangi bir değişiklik yapmadan değerin alınması gerektiğini belirtir. Özellikle işlenen değer bir nesneyse, tüm özellikler alınır. |
<object_property_list> |
Alınacak özelliklerin listesini belirtir. Döndürülen her değer, belirtilen özelliklere sahip bir nesnedir. |
VALUE |
JSON değerinin tam JSON nesnesi yerine alınması gerektiğini belirtir. Bu bağımsız değişken, aksine <property_list> bir nesnede öngörülen değeri sarmalamaz. |
DISTINCT |
Öngörülen özelliklerin yinelenenlerinin kaldırılması gerektiğini belirtir. |
<scalar_expression> |
Hesaplanacak değeri temsil eden ifade. Daha fazla bilgi için ayrıntılar için skaler ifadeler bölümüne bakın. |
Örnekler
Bu ilk örnek iki statik dize değeri seçer ve her iki değeri de içeren tek bir nesneye sahip bir dizi döndürür. Değerler adlandırılmadığından, eşdeğer json alanını adlandırmak için sıralı bir sayı kullanılır.
SELECT "Adventure", "Works"
[
{
"$1": "Adventure",
"$2": "Works"
}
]
Bu sonraki örnekte JSON projeksiyonu, sonuçta elde edilen JSON nesnesi için tam yapı ve alan adlarında ince ayar yapmak için kullanılır. Burada ve team
adlı department
alanlarla bir JSON nesnesi oluşturulur. Dış JSON nesnesi hala adlandırılmamış olduğundan, bu alanı adlandırmak için oluşturulan bir sayı ($1
) kullanılır.
SELECT {
department: "Sales",
team: "Field sales"
}
[
{
"$1": {
"department": "Sales",
"team": "Field sales"
}
}
]
Bu örnekte, ayrıştırma işlemini basitleştirmek için önceki örnekteki sonuç kümesinin düzleştirilmesi gösterilmektedir. Anahtar VALUE
sözcüğü burada sonuçların başka bir JSON nesnesine kaydırılmasını önlemek için kullanılır.
SELECT VALUE {
department: "Sales",
team: "Field sales"
}
[
{
"department": "Sales",
"team": "Field sales"
}
]
Bu örnekte, VALUE
sonuç olarak bir dizi dize oluşturmak için statik dize ile anahtar sözcüğü kullanılır.
SELECT VALUE "Sales"
[
"Sales"
]
Bu son örnekte, farklı veri türlerinde çeşitli alanlara sahip iki öğe içeren bir kapsayıcı olduğunu varsayalım.
[
{
"team": "Field sales",
"identity": {
"name": "Parker McLean"
},
"contact": [
"206-555-0147"
]
},
{
"team": "Field sales",
"identity": {
"name": "Beibit Shayakhmet"
},
"contact": [
"206-555-0178"
]
}
]
Bu son örnek sorgu, istemcinin SELECT
VALUE
ayrıştırmak için JSON nesnesine dönüştürülen sonuçları içeren ortak bir sorgu gerçekleştirmek için yan tümcesi, FROM
anahtar sözcük, yan tümce ve JSON projeksiyonunun bir bileşimini kullanır.
SELECT VALUE {
name: e.identity.name,
team: e.team,
phone: e.contact[0]
}
FROM
employees e
[
{
"name": "Parker McLean",
"team": "Field sales",
"phone": "206-555-0147"
},
{
"name": "Beibit Shayakhmet",
"team": "Field sales",
"phone": "206-555-0178"
}
]
Açıklamalar
- Söz
SELECT *
dizimi yalnızca yan tümcesi tam olarak bir diğer ad bildirmişseFROM
geçerlidir.SELECT *
bir kimlik projeksiyonu sağlar. Bu projeksiyon gerekli değilse yararlı olabilir.SELECT *
yalnızca yan tümcesi belirtilirse ve yalnızca tek bir giriş kaynağı sunulursaFROM
geçerlidir. - Hem hem
SELECT *
deSELECT <select_list>
"söz dizimsel şekerdir" ve alternatif olarak basitSELECT
ifadeler kullanılarak ifade edilebilir:SELECT * FROM ... AS from_alias ...
eşdeğerdir:SELECT from_alias FROM ... AS from_alias ...
.SELECT <expr1> AS p1, <expr2> AS p2,..., <exprN> AS pN [other clauses...]
eşdeğerdir:SELECT VALUE { p1: <expr1>, p2: <expr2>, ..., pN: <exprN> }[other clauses...]
.