Azure Cosmos DB for NoSQL のキーワード

適用対象: NoSQL

Azure Cosmos DB for NoSQL のクエリ言語には、拡張機能のクエリで使用される予約済みキーワードのセットが含まれています。

BETWEEN

BETWEEN キーワードは、ターゲット値が指定された 2 つの値 (両端を含む) の間にあるかどうかを示すブール値に評価されます。

BETWEEN キーワードと WHERE 句を使用して、文字列値や数値の範囲に対して結果をフィルター処理するクエリを表現することができます。 たとえば、次のクエリでは、価格が 17.2525.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 と異なり、混合型のプロパティに対して範囲クエリを表すことができます。 たとえば、一部の項目の price5.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