Share via


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 teamadlı 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şse FROM 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ğı sunulursa FROM geçerlidir.
  • SELECT * Hem hem de SELECT <select_list> "sözdizimsel ş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...].