WHERE

The WHERE clause is optional and is used to filter results based on predicates (conditions).

Supported Comparison Operators

Operator Description
= Equal to
<> Not equal to
< Less than
<= Less than or equal to
> Greater than
>= Greater than or equal to
CONTAINS String contains substring
ENDS WITH String ends with substring
IN Value is in list
STARTS WITH String starts with substring

Combining Predicates

Predicates can be combined using the logical operators AND, OR, and NOT.

Use parentheses to control precedence when combining multiple predicates.

Examples:

WHERE (actor.name = "john doe" OR movie.rating > 8.8) AND movie.votes <= 250)
WHERE actor.age >= director.age AND actor.age > 32

Inline Property Filters

You can specify equality predicates directly within node patterns using curly braces:

(:President {name:"Jed Bartlett"})-[:WON]->(:State)

This requires that the president node’s name property equals “Jed Bartlett”.

Inline predicates are functionally equivalent to predicates specified in the WHERE clause.

Pattern Predicates

You can also filter based on graph patterns. These two queries are equivalent and both return presidents and the states they won:

MATCH (p:President), (s:State) WHERE (p)-[:WON]->(s) RETURN p, s
MATCH (p:President)-[:WON]->(s:State) RETURN p, s

Pattern predicates can be negated and combined with logical operators. This query returns presidents who did not win in states where they were governors:

MATCH (p:President), (s:State) WHERE NOT (p)-[:WON]->(s) AND (p)-[:GOVERNOR]->(s) RETURN p, s

Label Filtering

Nodes can be filtered by label in the WHERE clause:

MATCH (n)-[:R]->() WHERE n:L1 OR n:L2 RETURN n 

Best Practice: When possible, specify labels directly in the node pattern of the MATCH clause for better performance.