SELECT yan tümcesi (NoSQL sorgusu)
ŞUNUN IÇIN GEÇERLIDIR: 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 yan tümcesi, JSON öğelerinin WHERE
bir alt kümesini almak için kaynağa bir filtre uygular. Yan tümcesi SELECT
daha sonra seçme listesinde istenen JSON değerlerini projeler.
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
Description | |
---|---|
<select_specification> |
Sonuç kümesi için seçilecek özellikler veya değer. |
'*' |
Değerin herhangi bir değişiklik yapılmadan 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 |
Tam JSON nesnesi yerine JSON değerinin alınması gerektiğini belirtir. Bu bağımsız değişken, aksine <property_list> nesnedeki ö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ı olarak oluşturulan bir sayı kullanılır.
SELECT "Adventure", "Works"
[
{
"$1": "Adventure",
"$2": "Works"
}
]
Bu sonraki örnekte, elde edilen JSON nesnesi için tam yapı ve alan adlarında ince ayar yapmak için JSON projeksiyonu kullanılır. Burada ve team
adlı department
alanlarla bir JSON nesnesi oluşturulur. Dış JSON nesnesi hala adlandırılmamıştır, bu nedenle 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ırmayı 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 dize dizisi 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, VALUE
istemcinin ayrıştırmak için bir SELECT
JSON nesnesine dönüştürülen sonuçlarla ortak bir sorgu gerçekleştirmek için yan tümcesi, anahtar sözcüğü, yan FROM
tümcesi 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, yansıtma gerekmezse yararlı olabilir.SELECT *
yalnızca yan tümcesi belirtilirse ve yalnızca tek bir giriş kaynağı sunulursaFROM
geçerlidir. SELECT *
Hem hem deSELECT <select_list>
"sözdizimsel ş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...]
.