Vue d’ensemble
La clause WHERE
peut être utilisée pour appliquer des filtres au sein d’un motif de graph dans l’instruction MATCH
. Elle supporte une multitude de conditions de recherche, et plusieurs conditions peuvent être combinées en une expression logique utilisant des opérateurs comme AND
, OR
, NOT
et XOR
.
<where clause> ::= "WHERE" <search condition>
<search condition> ::= <boolean value expression>
GQL supporte trois clauses WHERE
:
- Clause
WHERE
de motif d’élément - Clause
WHERE
de motif de chemin parenthésé - Clause
WHERE
de motif de graph
La clause WHERE
de motif d’élément et la clause WHERE
de motif de chemin parenthésé peuvent être vues comme des pré-filtres appliqués avant la sélection ; tandis que la clause WHERE
de motif de graph comme des post-filtres appliqués après la sélection.
Clause WHERE de Motif d’Élément
Vous pouvez utiliser la clause WHERE
dans un motif d’élément comme prédicat pour appliquer des conditions.
La clause WHERE
de motif d’élément offre plus de conditions de recherche comparées à la spécification de propriété d’élément, qui ne permet d’appliquer que des égalités jointes basées sur des paires clé-valeur pour les propriétés.
Dans cette requête, la clause WHERE
est utilisée dans un motif de node pour filtrer les nodes étiquetés Card
où la propriété level
est supérieure à 3 :
MATCH p = (c:Card WHERE c.level > 3)-[:Transfers]->()
RETURN p
Dans cette requête, la clause WHERE
est utilisée dans un motif d’edge pour filtrer les edges qui ont les propriétés amount
et currency
, et assurer que leurs valeurs répondent aux conditions spécifiées :
MATCH p = (:Card)-[t WHERE t.amount > 10000 AND t.currency = 'USD']->()
RETURN p
Cette requête génère une erreur de syntaxe car amount
est utilisé comme s’il s’agissait d’une variable, mais elle n’a pas été déclarée. Pour spécifier une propriété dans la clause WHERE
, vous devez utiliser l’opérateur point .
pour la référencer, comme (n:Card WHERE n.amount > 100)
.
MATCH p = (:Card WHERE amount > 100)-[]->()
RETURN p
Cette requête génère une erreur de syntaxe car vous ne pouvez pas utiliser la spécification de propriété et la clause WHERE
ensemble dans un motif d’élément. Au lieu de cela, vous pouvez écrire (n:Paper WHERE n.author = "Alex" AND n.score > 5)
.
MATCH (n:Paper {author: "Alex"} WHERE n.score > 5)
RETURN n
Clause WHERE de Motif de Chemin Parenthésé
Vous pouvez utiliser la clause WHERE
dans un motif de chemin parenthésé comme prédicat pour appliquer des conditions.
Dans cette requête, la clause WHERE
est utilisée dans un motif de chemin parenthésé pour filtrer chaque edge contenu dans les chemins quantifiés :
MATCH p = ((:Card)-[t:Transfers]->(:Card) WHERE t.amount > 200){1,3}
RETURN p
L’utilisation de la clause
WHERE
dans un motif de chemin quantifié n’est pas encore supportée.
Clause WHERE de Motif de Graph
Vous pouvez utiliser la clause WHERE
comme prédicat pour le motif de graph afin d’appliquer des conditions.
Dans cette requête, la clause WHERE
est utilisée pour filtrer les personnes, chacune d’elles vivant et étant originaire de la même ville :
MATCH (p:Person)-[:LivesIn]->(c1:City),
(p)-[:IsFrom]->(c2:City)
WHERE c1 = c2
RETURN p