Aracılığıyla paylaş


FROM yan tümcesi (NoSQL sorgusu)

UYGULANANLAR: NoSQL

Kaynak sorgunun ilerleyen bölümlerinde filtrelenmediği veya yansıtılmadığı sürece FROM (FROM <from_specification>) yan tümcesi isteğe bağlıdır. gibi SELECT * FROM products bir sorgu, adından bağımsız olarak kapsayıcının tamamında numaralandırır. Kapsayıcı adını kullanmak yerine kapsayıcı için özel tanımlayıcıyı ROOT da kullanabilirsiniz.

FROM yan tümcesi sorgu başına aşağıdaki kuralları uygular:

  • Kapsayıcı, veya gibi SELECT p.id FROM products AS p SELECT p.id FROM products pdiğer adlara eklenebilir. Burada kapsayıcının p diğer adıdır. Kapsayıcının veya polarak adlandırılması products gerekmez. AS, tanımlayıcıyı diğer adla adlandırmak için isteğe bağlı bir anahtar sözcüktür.
  • Diğer ad eklendikten sonra özgün kaynak adı bağlanamaz. Örneğin, SELECT products.id FROM products p tanımlayıcı products diğer adla eklendiğinden ve artık çözümlenemediğinden, bu durum bozulmadan geçersizdir.
  • Kesin şemaya bağlı kalınmaması durumunda belirsiz bağlamalardan kaçınmak için başvuruda bulunılan tüm özelliklerin tam nitelenmiş olması gerekir. Örneğin, SELECT id FROM products p özellik bağlı olmadığından, bu durum id bozulmadan geçersizdir. Sorgu bunun yerine (veya <alias>.<property-name>) kullanarak p.id özelliğine id başvurmalıdır.

Söz dizimi

FROM <from_specification>  
  
<from_specification> ::=
        <from_source> {[ JOIN <from_source>][,...n]}  
  
<from_source> ::=
          <container_expression> [[AS] input_alias]  
        | input_alias IN <container_expression>  
  
<container_expression> ::=
        ROOT
     | container_name  
     | input_alias  
     | <container_expression> '.' property_name  
     | <container_expression> '[' "property_name" | array_index ']'

Bağımsız değişkenler

Açıklama
<from_source> Diğer adla veya diğer ad olmadan bir veri kaynağı belirtir. Diğer ad belirtilmezse, aşağıdaki kurallar kullanılarak çıkarılır <container_expression> . İfade bir container_namecontainer_name ise, diğer ad olarak kullanılır. İfade ise<container_expression>property_name, diğer ad olarak kullanılır. İfade bir container_namecontainer_name ise, diğer ad olarak kullanılır.
GİBİ input_alias öğesinin input_alias , temel kapsayıcı ifadesi tarafından döndürülen bir değer kümesi olduğunu belirtir.
input_alias İÇİNDE öğesinin input_alias , temel kapsayıcı ifadesi tarafından döndürülen her dizinin tüm dizi öğeleri üzerinde yinelenerek elde edilen değer kümesini temsil etmesi gerektiğini belirtir. Temel kapsayıcı ifadesi tarafından döndürülen ve dizi olmayan değerler yoksayılır.
<container_expression> Öğeleri almak için kullanılacak kapsayıcı ifadesini belirtir.
ROOT Öğenin varsayılan, şu anda bağlı olan kapsayıcıdan alınması gerektiğini belirtir.
container_name Öğenin sağlanan kapsayıcıdan alınması gerektiğini belirtir. Kapsayıcının adı, o anda bağlı olan kapsayıcının adıyla eşleşmelidir.
input_alias Öğenin sağlanan diğer ad tarafından tanımlanan diğer kaynaktan alınması gerektiğini belirtir.
<container_expression> '.' property_name Öğenin özelliğine erişilerek property_name alınması gerektiğini belirtir.
<container_expression> '[' "property_name" \| array_index ']' Belirtilen kapsayıcı ifadesi tarafından alınan tüm öğeler için özelliğine veya array_index dizi öğesine erişilerek property_name öğenin alınması gerektiğini belirtir.

Açıklamalar

(ler) içinde sağlanan veya çıkarılacak tüm diğer adların <from_source>benzersiz olması gerekir. Söz dizimi <container_expression> '.' property_name ile aynıdır <container_expression> '[' "property_name" ']'. Ancak, bir özellik adı bir tanımlayıcı karakter içeriyorsa, ikinci söz dizimi kullanılabilir.

Eksik özellikleri, eksik dizi öğelerini ve tanımsız değerleri işleme

Kapsayıcı ifadesi özelliklere veya dizi öğelerine erişiyorsa ve bu değer yoksayılır ve daha fazla işlenmez.

Kapsayıcı ifadesi bağlam kapsamı

Kapsayıcı ifadesi kapsayıcı kapsamlı veya öğe kapsamlı olabilir:

  • Kapsayıcı ifadesinin temel kaynağı veya container_nameise, bir ifade kapsayıcı kapsamlıdırROOT. Böyle bir ifade doğrudan kapsayıcıdan alınan bir öğe kümesini temsil eder ve diğer kapsayıcı ifadelerinin işlenmesine bağımlı değildir.

  • Kapsayıcı ifadesinin temel alınan kaynağı sorguda daha önce tanıtıldıysa, ifade öğe kapsamlıdır input_alias . Böyle bir ifade, kapsayıcı ifadesi değerlendirilerek elde edilen bir öğe kümesini temsil eder. Bu değerlendirme, diğer ad kapsayıcısıyla ilişkili kümeye ait her öğenin kapsamında gerçekleştirilir. Elde edilen küme, temel alınan kümedeki öğelerin her biri için kapsayıcı ifadesi değerlendirilerek elde edilen kümelerin birleşimidir.

Örnekler

Bu ilk örnekte, FROM yan tümcesi geçerli kapsayıcıyı kaynak olarak belirtmek, benzersiz bir ad vermek ve ardından diğer ad vermek için kullanılır. Diğer ad daha sonra sorgu sonuçlarında belirli alanları yansıtmak için kullanılır.

SELECT VALUE {
    name: e.name,
    location: e.workLocation
}
FROM
    employees e
[
  {
    "name": "Tijana Stanković",
    "location": {
      "office": "Redmond, WA"
    }
  },
  {
    "name": "Jean Nadeau",
    "location": {
      "type": "Remote"
    }
  }
]

Bu sonraki örnekte yan tümcesi, FROM kaynağı daha küçük bir alt kümeye de düşürebilir. Her öğede yalnızca bir alt ağacı listelemek için alt kök kaynak olabilir. Bir dizi veya nesne alt kökü kaynak olarak kullanılabilir.

SELECT 
    *
FROM
    employees.employment e
[
  {
    "hireDateTime": "2023-01-01T06:30:00.000Z",
    "weeklyHours": 40,
    "team": "Retail support"
  },
  {
    "hireDateTime": "2023-01-01T09:30:00.000Z",
    "team": "Retail support"
  },
  {
    "hireDateTime": "2023-01-01T15:30:00.000Z",
    "weeklyHours": 32,
    "team": "Retail support"
  }
]