Azure Cosmos DB for NoSQL のキーワード
適用対象: NoSQL
Azure Cosmos DB for NoSQL のクエリ言語には、拡張機能のクエリで使用される予約済みキーワードのセットが含まれています。
BETWEEN
BETWEEN
キーワードは、ターゲット値が指定された 2 つの値 (両端を含む) の間にあるかどうかを示すブール値に評価されます。
BETWEEN
キーワードと WHERE
句を使用して、文字列値や数値の範囲に対して結果をフィルター処理するクエリを表現することができます。 たとえば、次のクエリでは、価格が 17.25
と 25.50
の間 (両端を含む) にあるすべての項目が返されます。
SELECT VALUE
p.price
FROM
products p
WHERE
p.price BETWEEN 17.25 AND 25.50
[
20
]
BETWEEN
キーワードはまた、次の例のように SELECT
句で使用することもできます。
SELECT
(p.price BETWEEN 0 AND 10) AS booleanLessThanTen,
p.price
FROM
products p
[
{
"booleanLessThanTen": false,
"price": 20.0
},
{
"booleanLessThanTen": true,
"price": 7.5
}
]
注意
NoSQL 用 API では、ANSI SQL と異なり、混合型のプロパティに対して範囲クエリを表すことができます。 たとえば、一部の項目の price
が 5.0
などの数値で、他の項目が fifteenDollars
などの文字列である場合があります。 このような場合、JavaScript の場合と同様に、2 つの異なる種類を比較した結果は undefined
になるため、項目がスキップされます。
DISTINCT
DISTINCT
キーワードでは、射影されたクエリ結果の重複が除去されます。
この例では、クエリにより各製品カテゴリの値が射影されます。 2 つのカテゴリが同一の場合、1 つの出現のみが結果に返されます。
SELECT DISTINCT VALUE
p.category
FROM
products p
[
"Accessories",
"Tools"
]
ターゲット フィールドが存在しない場合でも、値を射影することができます。 この場合、フィールドが項目の 1 つに存在しないため、クエリではその特定の一意の値に対して空のオブジェクトが返されます。
SELECT DISTINCT
p.category
FROM
products p
結果は次のようになります。
[
{},
{
"category": "Accessories"
},
{
"category": "Tools"
}
]
LIKE
特定の文字列が指定されたパターンに一致するかどうかによって、ブール値を返します。 パターンは、標準の文字とワイルドカード文字を含むことができます。
ヒント
LIKE
キーワードまたは RegexMatch
システム関数のいずれかを使用して、論理的に等価のクエリを記述できます。 どちらを選択しても、インデックスの使用率は同じになります。 どちらを選択して使用するかは、構文の好みに大きく依存します。
Note
LIKE
はインデックスを利用できるため、LIKE
を使用して比較するプロパティの範囲インデックスを作成する必要があります。
LIKE で使用できるワイルドカード文字は次のとおりです。
説明 | 例 | |
---|---|---|
% |
0 個以上の文字で構成される任意の文字列です。 | WHERE c.description LIKE "%SO%PS%" |
_ (アンダースコア) |
任意の 1 文字です。 | WHERE c.description LIKE"%SO_PS%" |
[ ] |
指定した範囲 ([a-f] ) またはセット ([abcdef] ) の任意の 1 文字。 |
WHERE c.description LIKE "%SO[t-z]PS%" |
[^] |
指定した範囲 ([^a-f] ) または セット ([^abcdef] ) 内に含まれない任意の 1 文字。 |
WHERE c.description LIKE "%SO[^abc]PS%" |
%
文字は、0 個以上の文字で構成される任意の文字列と一致します。 たとえば、パターンの先頭と末尾に %
を配置すると、次のクエリでは、指定したフィールドに、その語句が部分文字列として含まれるすべての項目が返されます。
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
句を使用して、1 つまたは複数のワイルドカード文字を含むパターンを検索できます。 たとえば、文字列 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
キーワードは、指定した値がリスト内のいずれかの値と一致するかどうかをチェックするために使用します。 たとえば、次のクエリでは、カテゴリがリスト内の値の少なくとも 1 つに一致するすべての項目が返されます。
SELECT
*
FROM
products p
WHERE
p.category IN ("Accessories", "Clothing")
ヒント
IN
フィルターにパーティション キーを含めると、クエリは関連するパーティションのみに自動的にフィルターを適用します。
TOP
TOP
キーワードは、任意の順序で最初の N
個のクエリ結果を返します。 ベスト プラクティスとして、ORDER BY
句で TOP
を使用して、最初の N
個の順序付けされた値に結果を制限します。 これらの 2 つの句を組み合わせることが、TOP
の影響を受ける行を予想どおりに指定する唯一の方法です。
TOP
は、次の例のように定数で、またはパラメーター化されたクエリを使用した変数値で使用できます。
SELECT TOP 10
*
FROM
products p
ORDER BY
p.price ASC