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
klauzulaSELECT *
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, gdyFROM
określono klauzulę i wprowadzono tylko jedno źródło wejściowe. - Oba
SELECT <select_list>
iSELECT *
są "cukrem składniowym" i mogą być również wyrażone za pomocą prostychSELECT
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...]
.