Aracılığıyla paylaş


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 teamadlı 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şse FROM 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ğı sunulursa FROM geçerlidir.
  • Hem hem SELECT * de SELECT <select_list> "söz dizimsel şekerdir" ve alternatif olarak basit SELECT 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...].