適用于 NoSQL 的 Azure Cosmos DB 關鍵字

適用於:NoSQL

適用于 NoSQL 的 Azure Cosmos DB 查詢語言包含一組保留關鍵字,用於查詢以取得擴充功能。

BETWEEN

關鍵字 BETWEEN 會評估為布林值,指出目標值是否介於兩個指定的值之間,包含。

您可以使用 BETWEEN 關鍵字搭配 WHERE 子句來表示針對字串或數值範圍篩選結果的查詢。 例如,下列查詢會傳回價格介於 和 25.50 之間的 17.25 所有專案,同樣包含 。

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
  }
]

注意

在 NoSQL 的 API 中,不同于 ANSI SQL,您可以針對混合類型的屬性工作表達範圍查詢。 例如,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

根據特定字元字串是否符合指定的模式,傳回布林值。 模式中可以包含一般字元及萬用字元。

提示

您可以使用 關鍵字或 RegexMatch 系統函式,以 LIKE 邏輯方式撰寫對等查詢。 不論您選擇的選項為何,您都會觀察相同的索引使用率。 要使用的選項主要以語法喜好設定為基礎。

注意

因為 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%"

% 字元會比對任何有零個或多個字元的字串。 例如,藉由將 放在 % 模式的開頭和結尾,下列查詢會傳回指定欄位包含子字串之片語的所有專案:

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 會以未定義的順序傳回第一 N 個查詢結果數目。 最佳做法是搭配 ORDER BY 子句使用 TOP ,將結果限制為已排序值的第一 N 個數目。 結合這兩個子句是可預測指出哪些資料列 TOP 影響的唯一方式。

您可以使用 TOP 常數值,如下列範例所示,或使用參數化查詢搭配變數值。

SELECT TOP 10
    *
FROM
    products p
ORDER BY
    p.price ASC