该 SELECT 子句标识在查询结果中返回的字段。 然后,该子句将这些字段投影到 JSON 结果集中。
每个查询都由一个 SELECT 子句以及可选的 FROM 和 WHERE 子句组成,这符合 ANSI SQL 标准。 通常,会对 FROM 子句中的源进行枚举,而 WHERE 子句则对该源应用筛选条件,以检索 JSON 项的一个子集。
Syntax
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 对象的确切结构和字段名称。 这里,创建了一个 JSON 对象,其中包含名为 identifier 和 model 的字段。 外部 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"
]
复杂投影
在此示例中,该查询结合使用了 SELECT 子句、VALUE 关键字、FROM 子句和 JSON 投影,以执行一种常见查询,并将结果转换为供客户端解析的 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"
},
...
]
注解
- 仅当
FROM子句恰好声明了一个别名时,SELECT *语法才有效。SELECT *提供标识投影,如果不需要投影,这非常有用。SELECT *仅在指定了FROM子句且只引入了单个输入源时才有效。 -
SELECT <select_list>和SELECT *都是语法糖,都可以使用简单的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...].