Udostępnij za pośrednictwem


Klauzula SELECT (zapytanie NoSQL)

DOTYCZY: NoSQL

Każde zapytanie składa się z SELECT klauzuli i opcjonalnie FROM i WHERE klauzul zgodnie ze standardami ANSI SQL. Zazwyczaj źródło w klauzuli FROM jest wyliczane, a WHERE klauzula stosuje filtr w źródle w celu pobrania podzestawu elementów JSON. Klauzula SELECT następnie projektuje żądane wartości JSON na liście wyboru.

Składnia

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 ]

Argumenty

opis
<select_specification> Właściwości lub wartość do wybrania dla zestawu wyników.
'*' Określa, że wartość powinna zostać pobrana bez wprowadzania żadnych zmian. W szczególności, jeśli przetworzona wartość jest obiektem, wszystkie właściwości są pobierane.
<object_property_list> Określa listę właściwości do pobrania. Każda zwrócona wartość jest obiektem z określonymi właściwościami.
VALUE Określa, że należy pobrać wartość JSON zamiast kompletnego obiektu JSON. Ten argument, w przeciwieństwie do <property_list> tego, nie opakowuje przewidywanej wartości w obiekcie.
DISTINCT Określa, że należy usunąć duplikaty przewidywanych właściwości.
<scalar_expression> Wyrażenie reprezentujące wartość do obliczenia. Aby uzyskać więcej informacji, zobacz sekcję wyrażenia skalarne , aby uzyskać szczegółowe informacje.

Przykłady

Ten pierwszy przykład wybiera dwie statyczne wartości ciągu i zwraca tablicę z pojedynczym obiektem zawierającym obie wartości. Ponieważ wartości nie są nazwane, generowana sekwencyjnie liczba jest używana do nazywania równoważnego pola json.

SELECT "Adventure", "Works"
[
  {
    "$1": "Adventure",
    "$2": "Works"
  }
]

W następnym przykładzie projekcja JSON jest używana do dokładnego dostosowania struktury i nazw pól dla wynikowego obiektu JSON. W tym miejscu obiekt JSON jest tworzony z polami o nazwach department i team. Zewnętrzny obiekt JSON jest nadal nienazwany, więc wygenerowany numer ($1) jest używany do nadawania nazwy temu polu.

SELECT {
    department: "Sales",
    team: "Field sales"
}
[
  {
    "$1": {
      "department": "Sales",
      "team": "Field sales"
    }
  }
]

W tym przykładzie pokazano spłaszczanie zestawu wyników z poprzedniego przykładu w celu uproszczenia analizowania. Słowo VALUE kluczowe jest używane tutaj, aby zapobiec zawijaniu wyników do innego obiektu JSON.

SELECT VALUE {
    department: "Sales",
    team: "Field sales"
}
[
  {
    "department": "Sales",
    "team": "Field sales"
  }
]

W tym przykładzie VALUE słowo kluczowe jest używane z ciągiem statycznym w celu utworzenia tablicy ciągów w wyniku.

SELECT VALUE "Sales"
[
  "Sales"
]

W tym ostatnim przykładzie przyjęto założenie, że istnieje kontener z dwoma elementami z różnymi polami różnych typów danych.

[
  {
    "team": "Field sales",
    "identity": {
      "name": "Parker McLean"
    },
    "contact": [
      "206-555-0147"
    ]
  },
  {
    "team": "Field sales",
    "identity": {
      "name": "Beibit Shayakhmet"
    },
    "contact": [
      "206-555-0178"
    ]
  }
]

W tym ostatnim przykładowym zapytaniu użyto kombinacji klauzuli, VALUE słowa kluczowegoSELECT, FROM klauzuli i projekcji JSON, aby wykonać typowe zapytanie z wynikami przekształconymi w obiekt JSON, aby klient był analizowany.

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"
  }
]

Uwagi

  • Składnia jest prawidłowa tylko wtedy, gdy FROM klauzula SELECT * zadeklarowała dokładnie jeden alias. SELECT * zapewnia projekcję tożsamości, która może być przydatna, jeśli nie jest wymagana projekcja. SELECT * jest prawidłowy tylko wtedy, gdy FROM określono klauzulę i wprowadzono tylko jedno źródło wejściowe.
  • Oba SELECT <select_list> i SELECT * są "cukrem składniowym" i mogą być również wyrażone za pomocą prostych SELECT instrukcji:
    • SELECT * FROM ... AS from_alias ... jest odpowiednikiem: SELECT from_alias FROM ... AS from_alias ....
    • SELECT <expr1> AS p1, <expr2> AS p2,..., <exprN> AS pN [other clauses...] jest odpowiednikiem: SELECT VALUE { p1: <expr1>, p2: <expr2>, ..., pN: <exprN> }[other clauses...].