Complex Patterns
Advanced pattern matching techniques.
Multiple Patterns
Matching Separate Patterns
// Match multiple independent patterns
MATCH
(a:Person {name: 'Alice'}),
(b:Person {name: 'Bob'})
RETURN a, b
Connecting Patterns
// Alice knows someone who knows Bob
MATCH
(a:Person {name: 'Alice'})-[:KNOWS]->(friend),
(friend)-[:KNOWS]->(b:Person {name: 'Bob'})
RETURN friend.name
Multiple Path Patterns
// Find common connections through different paths
MATCH
(a:Person)-[:WORKS_AT]->(c:Company),
(a)-[:LIVES_IN]->(city:City)
RETURN a.name, c.name, city.name
OPTIONAL MATCH
Returns NULL for missing parts instead of filtering out.
Basic Optional Match
// Get all persons, with their company if they have one
MATCH (p:Person)
OPTIONAL MATCH (p)-[:WORKS_AT]->(c:Company)
RETURN p.name, c.name // c.name is NULL if no company
Multiple Optionals
// Person with optional company and optional location
MATCH (p:Person)
OPTIONAL MATCH (p)-[:WORKS_AT]->(c:Company)
OPTIONAL MATCH (p)-[:LIVES_IN]->(city:City)
RETURN p.name, c.name, city.name
Optional with WHERE
MATCH (p:Person)
OPTIONAL MATCH (p)-[:KNOWS]->(friend)
WHERE friend.active = true
RETURN p.name, friend.name
Cyclic Patterns
Self-Referencing
// Find mutual relationships
MATCH (a:Person)-[:KNOWS]->(b:Person)-[:KNOWS]->(a)
RETURN a.name, b.name
Triangles
// Find friend triangles (A knows B, B knows C, C knows A)
MATCH
(a)-[:KNOWS]->(b),
(b)-[:KNOWS]->(c),
(c)-[:KNOWS]->(a)
RETURN a.name, b.name, c.name
Named Paths
Capturing Paths
// Capture entire path
MATCH p = (a:Person)-[:KNOWS*1..3]->(b:Person)
WHERE a.name = 'Alice' AND b.name = 'Bob'
RETURN p, length(p) as hops
Path Functions
// Analyze paths
MATCH p = (a)-[:KNOWS*]->(b)
RETURN
nodes(p) as pathNodes,
relationships(p) as pathRels,
length(p) as numHops
Pattern Comprehensions
Basic Comprehension
// Collect friends into a list
MATCH (a:Person {name: 'Alice'})
RETURN [(a)-[:KNOWS]->(b) | b.name] as friends
With Filter
// Only active friends
MATCH (a:Person {name: 'Alice'})
RETURN [(a)-[:KNOWS]->(b) WHERE b.active | b.name] as activeFriends