子句會 SELECT 識別要在查詢結果中傳回的欄位。 然後,子句會將這些欄位投影到 JSON 結果集中。
每個查詢都包含子 SELECT 句和選擇性 FROM 和 WHERE 子句,根據 ANSI SQL 標準。 一般而言,子句中的 FROM 來源會列舉,而子 WHERE 句會在來源上套用篩選條件,以擷取 JSON 專案的子集。
語法
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 ]
Arguments
| Description | |
|---|---|
select_specification |
要為結果集選取的內容或值。 |
* |
指定應該擷取值而不進行任何變更。 具體而言,如果處理的值是物件,則會擷取所有屬性。 |
object_property_list |
指定要擷取的內容清單。 每個傳回值都是具有指定屬性的物件。 |
VALUE |
指定應擷取 JSON 值,而不是完整的 JSON 物件。 與property_list>不同<,此引數不會將投影值包裝在物件中。 |
DISTINCT |
指定應移除投影性質的重複項。 |
scalar_expression |
表示式,代表要計算的值。 |
傳回類型
傳回指定的投影欄位或值。
範例
本節包含如何使用此查詢語言建構的範例。
選取靜態字串值
在此範例中,兩個靜態字串值,並傳回一個陣列,其中包含包含這兩個值的單一物件。 由於值未命名,因此會使用循序產生的數字來命名對等的 json 欄位。
SELECT
"Cosmic", "Works"
[
{
"$1": "Cosmic",
"$2": "Works"
}
]
專案欄位
在此範例中,JSON 投影用於微調產生的 JSON 物件的確切結構和欄位名稱。 在這裡,會建立一個名為 和 model的identifier欄位的 JSON 物件。 外部 JSON 物件仍未命名,因此會使用產生的數字 ($1) 來命名此欄位。
SELECT {
identifier: p.name,
model: p.sku
}
FROM
products p
[
{
"$1": {
"identifier": "Remdriel Shoes",
"model": "61506"
}
},
{
"$1": {
"identifier": "Tirevy trunks",
"model": "73402"
}
},
...
]
專案靜態字串
在此範例中,VALUE 關鍵字會與靜態字串搭配使用,以建立字串陣列作為結果。
SELECT VALUE
"Cosmic Works"
[
"Cosmic Works"
]
複式投影
在此範例中,查詢會使用子句、VALUE關鍵字、FROM子句和 JSON 投影的SELECT組合來執行一般查詢,並將結果轉換為 JSON 物件供用戶端剖析。
SELECT VALUE {
name: p.name,
link: p.metadata.link,
firstTag: p.tags[0]["value"]
}
FROM
products p
[
{
"name": "Remdriel Shoes",
"link": "https://www.adventure-works.com/remdriel-shoes/68719521615.p",
"firstTag": "suede-leather-and-mesh"
},
{
"name": "Tirevy trunks",
"link": "https://www.adventure-works.com/tirevy-trunks/68719520573.p",
"firstTag": "polyester"
},
...
]
備註
-
SELECT *只有在子句只宣告一個別名時FROM,語法才有效。SELECT *提供身分投影,如果不需要投影,則會很有用。SELECT *只有在指定子句並僅引入單一輸入來源時才FROM有效。 - 兩者
SELECT *都是SELECT <select_list>句法糖,可以用簡單的SELECT語句來表達。 - 運算式
SELECT * FROM ... AS from_alias ...相當於SELECT from_alias FROM ... AS from_alias ...。 - 運算式
SELECT <expr1> AS p1, <expr2> AS p2,..., <exprN> AS pN [other clauses...]相當於SELECT VALUE { p1: <expr1>, p2: <expr2>, ..., pN: <exprN> }[other clauses...]。