Cypher Query Language Reference
Cypher Query Language Reference
Quick Reference Card
Pattern Matching
-- Node patterns(n) -- Any node(n:Person) -- Node with label(n:Person {name: 'Alice'}) -- Node with label and properties
-- Relationship patterns-[r]-> -- Any directed relationship-[r:KNOWS]-> -- Typed relationship-[r:KNOWS {since: 2020}]-> -- Relationship with properties-[r*1..3]-> -- Variable length (1 to 3 hops)-[r]- -- Undirected relationshipMATCH Clauses
-- Basic matchMATCH (n:Person) RETURN n
-- Pattern with relationshipMATCH (a:Person)-[:KNOWS]->(b:Person) RETURN a, b
-- Variable-length pathsMATCH (a)-[:KNOWS*1..3]->(b) RETURN a, b
-- Multiple patternsMATCH (a:Person), (b:Person)WHERE a.age > b.ageRETURN a, bWHERE Conditions
-- ComparisonWHERE n.age > 18WHERE n.name = 'Alice'WHERE n.age >= 18 AND n.age <= 65
-- String operationsWHERE n.name STARTS WITH 'A'WHERE n.name ENDS WITH 'son'WHERE n.name CONTAINS 'ali'
-- Null checksWHERE n.email IS NOT NULLWHERE n.phone IS NULL
-- List operationsWHERE n.age IN [18, 21, 25]WHERE n.tags CONTAINS 'developer'
-- ExistenceWHERE EXISTS { MATCH (n)-[:KNOWS]->() }CREATE Statements
-- Create nodeCREATE (n:Person {name: 'Alice', age: 30})
-- Create relationshipMATCH (a:Person {name: 'Alice'}), (b:Person {name: 'Bob'})CREATE (a)-[:KNOWS {since: 2020}]->(b)
-- Create pathCREATE (a:Person {name: 'Alice'})-[:KNOWS]->(b:Person {name: 'Bob'})UPDATE Operations
-- Set propertiesMATCH (n:Person {name: 'Alice'})SET n.age = 31, n.city = 'NYC'
-- Add labelMATCH (n:Person {name: 'Alice'})SET n:Employee
-- Remove propertyMATCH (n:Person {name: 'Alice'})REMOVE n.age
-- Replace all propertiesMATCH (n:Person {name: 'Alice'})SET n = {name: 'Alice Smith', age: 31}DELETE Operations
-- Delete relationshipMATCH (a)-[r:KNOWS]->(b)DELETE r
-- Delete node (must delete relationships first)MATCH (n:Person {name: 'Alice'})DELETE n
-- Delete node and relationshipsMATCH (n:Person {name: 'Alice'})DETACH DELETE nAggregations
-- CountMATCH (n:Person) RETURN count(n)
-- Sum, Avg, Min, MaxMATCH (n:Person) RETURN avg(n.age), min(n.age), max(n.age)
-- Group byMATCH (n:Person)RETURN n.city, count(n), avg(n.age)
-- CollectMATCH (p:Person)-[:KNOWS]->(f)RETURN p.name, collect(f.name) AS friendsOrdering and Limiting
-- Order byMATCH (n:Person)RETURN n.name, n.ageORDER BY n.age DESC
-- LimitMATCH (n:Person)RETURN nLIMIT 10
-- SkipMATCH (n:Person)RETURN nORDER BY n.ageSKIP 10LIMIT 10Functions
String Functions:
RETURN toLower('HELLO') -- 'hello'RETURN toUpper('hello') -- 'HELLO'RETURN trim(' hello ') -- 'hello'RETURN substring('hello', 0, 3) -- 'hel'Math Functions:
RETURN abs(-5) -- 5RETURN round(3.14159) -- 3RETURN ceil(3.1) -- 4RETURN floor(3.9) -- 3RETURN sqrt(16) -- 4List Functions:
RETURN size([1,2,3]) -- 3RETURN head([1,2,3]) -- 1RETURN tail([1,2,3]) -- [2, 3]RETURN range(1, 10) -- [1,2,3,4,5,6,7,8,9,10]Path Functions:
MATCH p = (a)-[:KNOWS*1..3]->(b)RETURN length(p), nodes(p), relationships(p)Complex Queries
Shortest Path:
MATCH p = shortestPath((a:Person {name: 'Alice'})-[:KNOWS*..5]->(b:Person {name: 'Bob'}))RETURN pAll Shortest Paths:
MATCH p = allShortestPaths((a)-[:KNOWS*..5]->(b))WHERE a.name = 'Alice' AND b.name = 'Bob'RETURN pCASE Expressions:
MATCH (n:Person)RETURN n.name, CASE WHEN n.age < 18 THEN 'Minor' WHEN n.age >= 18 AND n.age < 65 THEN 'Adult' ELSE 'Senior' END AS ageGroupUNION:
MATCH (n:Person) RETURN n.nameUNIONMATCH (n:Company) RETURN n.nameWITH Clause (pipeline):
MATCH (n:Person)WITH n, n.age AS ageWHERE age > 18RETURN n.name, ageORDER BY age DESCLIMIT 5Performance Tips
- Use indexes for frequent lookups
- Add LIMIT when possible
- Use PROFILE to analyze queries
- Avoid Cartesian products
- Use variable-length paths carefully
Example Query Plan:
PROFILEMATCH (a:Person)-[:KNOWS*1..3]->(b:Person)WHERE a.name = 'Alice'RETURN b.nameLIMIT 10HeliosDB Extensions
HTAP Hints
-- Force OLTP executionMATCH /*+ OLTP */ (n:Person {id: 123}) RETURN n
-- Force OLAP executionMATCH /*+ OLAP */ (n:Person) RETURN count(n), avg(n.age)
-- Suggest index usageMATCH (n:Person /*+ INDEX(name) */) WHERE n.name = 'Alice' RETURN nVector Similarity (HeliosDB Extension)
-- Find similar nodes by embeddingMATCH (n:Document)WHERE vectorSimilarity(n.embedding, $queryEmbedding) > 0.8RETURN n.text, vectorSimilarity(n.embedding, $queryEmbedding) AS scoreORDER BY score DESCLIMIT 10Geospatial Queries (HeliosDB Extension)
-- Find nearby locationsMATCH (n:Location)WHERE distance(n.coordinates, point({latitude: 40.7128, longitude: -74.0060})) < 1000RETURN n.name, distance(n.coordinates, point({latitude: 40.7128, longitude: -74.0060})) AS distanceMetersORDER BY distanceMetersFull-Text Search (HeliosDB Extension)
-- Full-text search on propertiesMATCH (n:Document)WHERE fulltext(n.content, 'machine learning graph database')RETURN n.title, fulltextScore(n.content, 'machine learning graph database') AS scoreORDER BY score DESCLIMIT 10Complete Syntax Guide: 100+ pages in full documentation Last Updated: November 14, 2025