该 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句和 JSON 投影的组合FROM来执行公共查询,并将结果转换为 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_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...].