Keywords in Azure Cosmos DB for NoSQL
APPLIES TO: NoSQL
Azure Cosmos DB for NoSQL's query language includes a set of reserved keywords that are used in queries for extended functionality.
BETWEEN
The BETWEEN
keyword evaluates to a boolean indicating whether the target value is between two specified values, inclusive.
You can use the BETWEEN
keyword with a WHERE
clause to express queries that filters results against ranges of string or numerical values. For example, the following query returns all items in which the price is between 17.25
and 25.50
, again inclusive.
SELECT VALUE
p.price
FROM
products p
WHERE
p.price BETWEEN 17.25 AND 25.50
[
20
]
You can also use the BETWEEN
keyword in the SELECT
clause, as in the following example.
SELECT
(p.price BETWEEN 0 AND 10) AS booleanLessThanTen,
p.price
FROM
products p
[
{
"booleanLessThanTen": false,
"price": 20.0
},
{
"booleanLessThanTen": true,
"price": 7.5
}
]
Note
In the API for NoSQL, unlike ANSI SQL, you can express range queries against properties of mixed types. For example, price
might be a number like 5.0
in some items and a string like fifteenDollars
in others. In these cases, as it is in JavaScript, the comparison between the two different types results in undefined
, so the item is skipped.
DISTINCT
The DISTINCT
keyword eliminates duplicates in the projected query results.
In this example, the query projects values for each product category. If two categories are equivalent, only a single occurrence returns in the results.
SELECT DISTINCT VALUE
p.category
FROM
products p
[
"Accessories",
"Tools"
]
You can also project values even if the target field doesn't exist. In this case, the field doesn't exist in one of the items, so the query returns an empty object for that specific unique value.
SELECT DISTINCT
p.category
FROM
products p
The results are:
[
{},
{
"category": "Accessories"
},
{
"category": "Tools"
}
]
LIKE
Returns a boolean value depending on whether a specific character string matches a specified pattern. A pattern can include regular characters and wildcard characters.
Tip
You can write logically equivalent queries using either the LIKE
keyword or the RegexMatch
system function. You'll observe the same index utilization regardless of which option you choose. The choice of which option to use is largely based on syntax preference.
Note
Because LIKE
can utilize an index, you should create a range index for properties you are comparing using LIKE
.
You can use the following wildcard characters with LIKE:
Description | Example | |
---|---|---|
% |
Any string of zero or more characters. | WHERE c.description LIKE "%SO%PS%" |
_ (underscore) |
Any single character. | WHERE c.description LIKE"%SO_PS%" |
[ ] |
Any single character within the specified range ([a-f] ) or set ([abcdef] ). |
WHERE c.description LIKE "%SO[t-z]PS%" |
[^] |
Any single character not within the specified range ([^a-f] ) or set ([^abcdef] ). |
WHERE c.description LIKE "%SO[^abc]PS%" |
The %
character matches any string of zero or more characters. For example, by placing a %
at the beginning and end of the pattern, the following query returns all items where the specified field contains the phrase as a substring:
SELECT VALUE
p.name
FROM
products p
WHERE
p.name LIKE "%driver%"
If you only used a %
character at the end of the pattern, you'd only return items with a description that started with fruit
:
SELECT VALUE
p.name
FROM
products p
WHERE
p.name LIKE "%glove"
Similarly, the wildcard at the start of the pattern indicates that you want to match values with the specified value as a prefix:
SELECT VALUE
p.name
FROM
products p
WHERE
p.name LIKE "Road%"
The NOT
keyword inverses the result of the LIKE
keyword's expression evaluation. This example returns all items that do not match the LIKE
expression.
SELECT VALUE
p.name
FROM
products p
WHERE
p.name NOT LIKE "%winter%"
You can search for patterns that include one or more wildcard characters using the ESCAPE
clause. For example, if you wanted to search for descriptions that contained the string 20%
, you wouldn't want to interpret the %
as a wildcard character. This example interprets the ^
as the escape character so you can escape a specific instance of %
.
SELECT VALUE
p.name
FROM
products p
WHERE
p.description LIKE "%20^%%" ESCAPE "^"
You can enclose wildcard characters in brackets to treat them as literal characters. When you enclose a wildcard character in brackets, you remove any special attributes. This table includes examples of literal characters.
Parsed value | |
---|---|
LIKE "20-30[%]" |
20-30% |
LIKE "[_]n" |
_n |
LIKE "[ [ ]" |
[ |
LIKE "]" |
] |
IN
Use the IN
keyword to check whether a specified value matches any value in a list. For example, the following query returns all items where the category matches at least one of the values in a list.
SELECT
*
FROM
products p
WHERE
p.category IN ("Accessories", "Clothing")
Tip
If you include your partition key in the IN
filter, your query will automatically filter to only the relevant partitions.
TOP
The TOP
keyword returns the first N
number of query results in an undefined order. As a best practice, use TOP
with the ORDER BY
clause to limit results to the first N
number of ordered values. Combining these two clauses is the only way to predictably indicate which rows TOP
affects.
You can use TOP
with a constant value, as in the following example, or with a variable value using parameterized queries.
SELECT TOP 10
*
FROM
products p
ORDER BY
p.price ASC