Schlüsselwörter in Azure Cosmos DB for NoSQL

GILT FÜR: NoSQL

Die Abfragesprache von Azure Cosmos DB for NoSQL enthält eine Reihe reservierter Schlüsselwörter, die in Abfragen für erweiterte Funktionalitäten verwendet werden.

Zwischen

Das BETWEEN-Schlüsselwort wird zu einem booleschen Wert ausgewertet, der angibt, ob der Zielwert zwischen zwei angegebenen Werten (einschließlich) liegt.

Sie können das Schlüsselwort BETWEEN mit einer WHERE-Klausel verwenden, um Abfragen zu formulieren, die Ergebnisse nach Bereichen von Zeichenfolgen oder numerischen Werten filtern. Die folgende Abfrage gibt beispielsweise alle Elemente zurück, in denen der Preis zwischen 17.25 und 25.50 liegt, wiederum einschließlich.

SELECT VALUE
    p.price
FROM
    products p
WHERE
    p.price BETWEEN 17.25 AND 25.50
[
  20
]

Sie können auch das Schlüsselwort BETWEEN in der SELECT-Klausel verwenden, wie im folgenden Beispiel gezeigt.

SELECT 
    (p.price BETWEEN 0 AND 10) AS booleanLessThanTen,
    p.price
FROM
    products p
[
  {
    "booleanLessThanTen": false,
    "price": 20.0
  },
  {
    "booleanLessThanTen": true,
    "price": 7.5
  }
]

Hinweis

In der API für NoSQL können Sie – im Gegensatz zu ANSI SQL – Bereichsabfragen für Eigenschaften gemischter Typen formulieren. Beispielsweise kann price in einigen Elementen eine Zahl (z. B. 5.0) und in anderen eine Zeichenfolge (z. B. fifteenDollars) sein. In diesen Fällen gibt der Vergleich zwischen den beiden unterschiedlichen Typen wie in Java das Ergebnis undefined zurück, sodass das Element übersprungen wird.

DISTINCT

Das Schlüsselwort DISTINCT entfernt Duplikate aus den projizierten Abfrageergebnissen.

In diesem Beispiel projiziert die Abfrage Werte für jede Produktkategorie. Wenn zwei Kategorien gleichwertig sind, wird nur ein einzelnes Vorkommen in den Ergebnissen zurückgegeben.

SELECT DISTINCT VALUE
    p.category
FROM
    products p
[
  "Accessories",
  "Tools"
]

Sie können auch Werte projizieren, auch wenn das Zielfeld nicht vorhanden ist. In diesem Fall ist das Feld in einem der Elemente nicht vorhanden, sodass die Abfrage ein leeres Objekt für diesen bestimmten eindeutigen Wert zurückgibt.

SELECT DISTINCT
    p.category
FROM
    products p

Die Ergebnisse lauten wie folgt:

[
  {},
  {
    "category": "Accessories"
  },
  {
    "category": "Tools"
  }
]

LIKE

Gibt einen booleschen Wert zurück, der davon abhängt, ob eine bestimmte Zeichenkette mit einem angegebenen Muster übereinstimmt. Ein Muster kann normale Zeichen und Platzhalterzeichen einschließen.

Tipp

Sie können logisch gleichwertige Abfragen entweder mithilfe des LIKE Schlüsselworts oder der RegexMatch Systemfunktion schreiben. Sie werden beobachten, dass unabhängig von der ausgewählten Option derselbe Index verwendet wird. Die Entscheidung, welche Option zu verwenden ist, hängt weitgehend von der bevorzugten Syntax ab.

Hinweis

Da LIKE einen Index verwenden kann, sollten Sie einen Bereichsindex erstellen für Eigenschaften, die Sie mit LIKE vergleichen.

Sie können folgende Platzhalterzeichen mit „LIKE“ verwenden:

Beschreibung Beispiel
% Eine Zeichenfolge aus null oder mehr Zeichen WHERE c.description LIKE "%SO%PS%"
_(Unterstrich) Ein einzelnes Zeichen. WHERE c.description LIKE"%SO_PS%"
[ ] Jedes beliebige einzelne Zeichen innerhalb des angegebenen Bereichs ([a-f]) oder der angegebenen Gruppe ([abcdef]). WHERE c.description LIKE "%SO[t-z]PS%"
[^] Jedes beliebige einzelne Zeichen außerhalb des angegebenen Bereichs ([^a-f]) oder der angegebenen Gruppe ([^abcdef]). WHERE c.description LIKE "%SO[^abc]PS%"

Das Zeichen % entspricht einer Zeichenfolge aus null oder mehr Zeichen. Wenn Sie beispielsweise ein % an den Anfang und das Ende des Musters setzen, gibt die folgende Abfrage alle Elemente zurück, in denen das angegebene Feld den Ausdruck als Teilzeichenfolge enthält:

SELECT VALUE
    p.name
FROM
    products p
WHERE
    p.name LIKE "%driver%"

Wenn Sie das Zeichen % nur am Ende des Musters verwendet hätten, würden nur Elemente mit einer Beschreibung zurückgegeben, die mit fruit beginnen:

SELECT VALUE
    p.name
FROM
    products p
WHERE
    p.name LIKE "%glove"

Ebenso gibt der Platzhalter am Anfang des Musters an, dass Sie Werte mit dem angegebenen Wert als Präfix abgleichen möchten:

SELECT VALUE
    p.name
FROM
    products p
WHERE
    p.name LIKE "Road%"

Das NOT-Schlüsselwort invertiert das Ergebnis der Ausdrucksauswertung des LIKE-Schlüsselworts. Dieses Beispiel gibt alle Elemente zurück, die nicht mit dem LIKE-Ausdruck übereinstimmen.

SELECT VALUE
    p.name
FROM
    products p
WHERE
    p.name NOT LIKE "%winter%"

Mithilfe der ESCAPE-Klausel können Sie nach Mustern suchen, die ein oder mehrere Platzhalterzeichen enthalten. Wenn Sie beispielsweise nach Beschreibungen suchen möchten, in denen die Zeichenfolge 20% enthalten ist, sollten Sie das % nicht als Platzhalterzeichen interpretieren. In diesem Beispiel wird das ^ als Escapezeichen interpretiert, sodass Sie eine bestimmte Instanz von % mit Escapezeichen versehen können.

SELECT VALUE
    p.name
FROM
    products p
WHERE
    p.description LIKE "%20^%%" ESCAPE "^"

Sie können Platzhalterzeichen in eckige Klammern einschließen, um sie als Literalzeichen zu behandeln. Wenn Sie ein Platzhalterzeichen in Klammern einschließen, entfernen Sie alle besonderen Attribute. Diese Tabelle enthält Beispiele für Literalzeichen.

Geparster Wert
LIKE "20-30[%]" 20-30%
LIKE "[_]n" _n
LIKE "[ [ ]" [
LIKE "]" ]

IN

Verwenden Sie das Schlüsselwort IN, um zu überprüfen, ob ein angegebener Wert mit einem Wert in einer Liste übereinstimmt. Die folgende Abfrage gibt beispielsweise alle Elemente zurück, bei denen die Kategorie mindestens einem der Werte in einer Liste entspricht.

SELECT
    *
FROM
    products p
WHERE
    p.category IN ("Accessories", "Clothing")

Tipp

Wenn Sie Ihren Partitionsschlüssel in den IN-Filter einbeziehen, filtert Ihre Abfrage automatisch nur nach den relevanten Partitionen.

TOP

Das Schlüsselwort TOP gibt die ersten N Abfrageergebnisse in einer nicht definierten Reihenfolge zurück. Es empfiehlt sich, TOP mit der ORDER BY-Klausel zu verwenden, um die Ergebnisse auf die ersten N geordneten Werte zu beschränken. Die Kombination dieser beiden Klauseln ist die einzige Möglichkeit, um zuverlässig anzugeben, welche Zeilen von TOP betroffen sind.

Sie können TOP mit einem konstanten Wert wie im folgenden Beispiel verwenden, oder mit einem Variablenwert mithilfe von parametrisierten Abfragen.

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