Azure Cosmos DB for NoSQL 中的关键字
适用范围: NoSQL
Azure Cosmos DB for NoSQL 的查询语言包括一组用于扩展功能的查询中的保留关键字。
BETWEEN
BETWEEN
关键字 (keyword) 的计算结果为一个布尔值,指示目标值是否介于两个指定值(包括该值)之间。
可以使用 BETWEEN
关键字和 WHERE
字句来表达针对字符串或数值范围的筛选结果的查询。 例如,以下查询返回价格在 17.25
和 25.50
之间的所有项,包含该值。
SELECT VALUE
p.price
FROM
products p
WHERE
p.price BETWEEN 17.25 AND 25.50
[
20
]
还可以在 SELECT
子句中使用 BETWEEN
关键字,如以下示例所示。
SELECT
(p.price BETWEEN 0 AND 10) AS booleanLessThanTen,
p.price
FROM
products p
[
{
"booleanLessThanTen": false,
"price": 20.0
},
{
"booleanLessThanTen": true,
"price": 7.5
}
]
注意
与 ANSI SQL 不同,在 API for NoSQL 中,可以针对混合类型的属性表达范围查询。 例如,在某些项中,price
可能是类似于 5.0
的数字;而在其他一些项中,它可能是类似于 fifteenDollars
的字符串。 在这些情况下(与在 JavaScript 中一样),两个不同类型之间的比较会生成 undefined
,因此会跳过该项。
DISTINCT
DISTINCT
关键字可消除投影查询结果中的重复项。
在此示例中,查询将投影产品类别的值。 如果两个类别等效,则结果中只返回一个匹配项。
SELECT DISTINCT VALUE
p.category
FROM
products p
[
"Accessories",
"Tools"
]
即使目标字段不存在,也可以投影值。 在这种情况下,某个项中不存在字段,因此查询返回该特定唯一值的空对象。
SELECT DISTINCT
p.category
FROM
products p
结果有:
[
{},
{
"category": "Accessories"
},
{
"category": "Tools"
}
]
LIKE
根据特定字符串是否与指定的模式匹配,返回布尔值。 模式可以包含常规字符和通配符。
提示
可以使用 LIKE
关键字或 RegexMatch
系统函数编写在逻辑上等效的查询。 无论选择哪一种,索引利用率都将相同。 对选项的选择很大程度上基于语法首选项。
注意
由于 LIKE
可以利用索引,因此你应为你要使用 LIKE
来比较的属性创建范围索引。
可以将以下通配符与 LIKE 配合使用:
说明 | 示例 | |
---|---|---|
% |
包含零个或多个字符的任意字符串。 | WHERE c.description LIKE "%SO%PS%" |
_ (下划线) |
任何单个字符。 | WHERE c.description LIKE"%SO_PS%" |
[ ] |
指定范围 ([a-f] ) 或集合 ([abcdef] ) 内的任何单个字符。 |
WHERE c.description LIKE "%SO[t-z]PS%" |
[^] |
不在指定范围 ([^a-f] ) 或集合 ([^abcdef] ) 内的任何单个字符。 |
WHERE c.description LIKE "%SO[^abc]PS%" |
%
字符匹配包含零个或多个字符的任意字符串。 例如,通过在模式的开头和末尾放置 %
,以下查询返回指定字段包含 substring 短语的所有项:
SELECT VALUE
p.name
FROM
products p
WHERE
p.name LIKE "%driver%"
如果只在模式结尾使用 %
字符,则只会返回带有以 fruit
开头的说明的项:
SELECT VALUE
p.name
FROM
products p
WHERE
p.name LIKE "%glove"
同样,模式开头的通配符指示要匹配指定值作为前缀的值:
SELECT VALUE
p.name
FROM
products p
WHERE
p.name LIKE "Road%"
NOT
关键字反转 LIKE
关键字表达式计算的结果。 此示例返回与 LIKE
表达式不匹配的所有项。
SELECT VALUE
p.name
FROM
products p
WHERE
p.name NOT LIKE "%winter%"
可以使用 ESCAPE
子句搜索包含一个或多个通配符的模式。 例如,如果要搜索包含字符串 20%
的说明,则不需要将 %
解释为通配符。 此示例将 ^
解释为转义字符,以便可以转义 %
的特定实例。
SELECT VALUE
p.name
FROM
products p
WHERE
p.description LIKE "%20^%%" ESCAPE "^"
可以将通配符括在中括号内,以便将它们视为文本字符。 将通配符放在中括号内时,其所有特殊属性均会去除。 此表包含文本字符的示例。
分析值 | |
---|---|
LIKE "20-30[%]" |
20-30% |
LIKE "[_]n" |
_n |
LIKE "[ [ ]" |
[ |
LIKE "]" |
] |
IN
使用 IN
关键字可以检查指定的值是否与列表中的任一值匹配。 例如,以下查询返回类别与列表中至少一个值匹配的所有项。
SELECT
*
FROM
products p
WHERE
p.category IN ("Accessories", "Clothing")
提示
如果在 IN
筛选器中包含分区键,则查询会自动地仅筛选出相关分区。
TOP
TOP
关键字以未定义的顺序返回前 N
个查询结果。 最佳做法是将 TOP
与 ORDER BY
子句配合使用,将结果限制为前 N
个有序值。 要预见性地指示哪些行受到 TOP
的影响,只能结合使用这两个子句。
可以结合一个常量值使用 TOP
(如以下示例中所示),或者在参数化查询中结合一个变量值使用 TOP。
SELECT TOP 10
*
FROM
products p
ORDER BY
p.price ASC