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