Introduction to Cypher
Adam Cowley
Developer Advocate - @adamcowley
Toy
Story
Toy
Story
Nodes represent
things
Toy
Story
Movie
Nodes represent
things
Toy
Story
Movie
Nodes can be identified by
one or more labels
Nodes represent
things
Toy
Story
Movie
Animated
Nodes can be identified by
one or more labels
Nodes represent
things
Toy
Story
Movie
Animated
Nodes can be identified by
one or more labels
title: Toy Story
released: 1995
Nodes represent
things
Toy
Story
Movie
Animated
Nodes can be identified by
one or more labels
title: Toy Story
released: 1995
Nodes represent
things
Nodes can hold
properties as key/value
pairs
Toy
Story
Movie
Tom
Hanks
Actor
Toy
Story
Movie
Toy
Story
Movie
Tom
Hanks
Actor
Toy
Story
Movie
Tom
Hanks
Actor
Relationships connect two nodes
Toy
Story
Movie
Tom
Hanks
Actor
Relationships connect two nodes
ACTED_IN
Toy
Story
Movie
Tom
Hanks
Actor
Relationships connect two nodes
ACTED_IN
Relationships
have a type
Toy
Story
Movie
Tom
Hanks
Actor
Relationships connect two nodes
ACTED_IN
Relationships
have a type
Relationships
have a direction
Toy
Story
Movie
Tom
Hanks
Actor
Relationships connect two nodes
ACTED_IN
roles: Woody
Relationships
have a type
Relationships
have a direction
Toy
Story
Movie
Tom
Hanks
Actor
Relationships connect two nodes
ACTED_IN
roles: Woody
Relationships
have a type
Relationships can also
hold properties as
key/value pairs
Relationships
have a direction
Cypher
Cypher is a declarative language that allows you
to identify patterns in your data using an ASCII-
art style syntax consisting of brackets, dashes
and arrows.
Cypher is a declarative language that allows you
to identify patterns in your data using an ASCII-
art style syntax consisting of brackets, dashes
and arrows.
Cypher is a declarative language that allows you
to identify patterns in your data using an ASCII-
art style syntax consisting of brackets, dashes
and arrows.
Movie
ACTED_IN
Person
Cypher is a declarative language that allows you
to identify patterns in your data using an ASCII-
art style syntax consisting of brackets, dashes
and arrows.
Movie
ACTED_IN
Person
(p:Person)-[r:ACTED_IN]->(m:Movie)
Cypher is a declarative language that allows you
to identify patterns in your data using an ASCII-
art style syntax consisting of brackets, dashes
and arrows.
Movie
ACTED_IN
Person
(p:Person)-[r:ACTED_IN]->(m:Movie)
Cypher is a declarative language that allows you
to identify patterns in your data using an ASCII-
art style syntax consisting of brackets, dashes
and arrows.
Movie
ACTED_IN
Person
(p:Person)-[r:ACTED_IN]->(m:Movie)
Cypher is a declarative language that allows you
to identify patterns in your data using an ASCII-
art style syntax consisting of brackets, dashes
and arrows.
Movie
ACTED_IN
Person
(p:Person)-[r:ACTED_IN]->(m:Movie)
Cypher is a declarative language that allows you
to identify patterns in your data using an ASCII-
art style syntax consisting of brackets, dashes
and arrows.
Movie
ACTED_IN
Person
(p:Person)-[r:ACTED_IN]->(m:Movie)
Cypher is a declarative language that allows you
to identify patterns in your data using an ASCII-
art style syntax consisting of brackets, dashes
and arrows.
Movie
ACTED_IN
Person
(p:Person)-[r:ACTED_IN]->(m:Movie)
Cypher is a declarative language that allows you
to identify patterns in your data using an ASCII-
art style syntax consisting of brackets, dashes
and arrows.
Movie
ACTED_IN
Person
(p:Person)-[r:ACTED_IN]->(m:Movie)
Cypher is a declarative language that allows you
to identify patterns in your data using an ASCII-
art style syntax consisting of brackets, dashes
and arrows.
Movie
ACTED_IN
Person
(p:Person)-[r:ACTED_IN]->(m:Movie)
Writing to Neo4j
// Create a pattern
CREATE (:Person {name: "Tom Hanks"})
-[:ACTED_IN {roles: "Woody"}]->
(:Movie {title: "Toy Story"})
Writing to Neo4j
// Find or create using MERGE
MERGE (p:Person {name: "Tom Hanks"})
Writing to Neo4j
// Find or create using MERGE
MERGE (p:Person {name: "Tom Hanks"})
MERGE (m:Movie {title: "Toy Story"})
Writing to Neo4j
// Find or create using MERGE
MERGE (p:Person {name: "Tom Hanks"})
MERGE (m:Movie {title: "Toy Story"})
MERGE (p)-[r:ACTED_IN]->(m)
Writing to Neo4j
// Find or create using MERGE
MERGE (p:Person {name: "Tom Hanks"})
MERGE (m:Movie {title: "Toy Story"})
MERGE (p)-[r:ACTED_IN]->(m)
SET r.roles = "Woody"
Reading from Neo4j
// Find a pattern in the database
MATCH (p:Person)-[r:ACTED_IN]->(m:Movie)
Reading from Neo4j
// Find a pattern in the database
MATCH (p:Person)-[r:ACTED_IN]->(m:Movie)
// Filter on a node property
WHERE m.title = "Toy Story"
// Find a pattern in the database
MATCH (p:Person)-[r:ACTED_IN]->(m:Movie)
// Filter on a node property
WHERE m.title = "Toy Story"
// Choose what to return
RETURN p.name AS actor, r.roles AS roles
Reading from Neo4j
// Find a pattern in the database
SQL Equivalent
MATCH (p:Person)-[r:ACTED_IN]->(m:Movie)
FROM/JOIN
// Filter on a node property
WHERE m.title = "Toy Story"
WHERE
// Choose what to return
RETURN p.name AS actor, r.roles AS roles SELECT
Reading from Neo4j
// Actors who acted with Tom Hanks also acted in...
MATCH (p:Person)-[r:ACTED_IN]->(m:Movie)
<-[:ACTED_IN]-(p2)-[r2:ACTED_IN]->(m2:Movie)
WHERE p.name = "Tom Hanks"
// Return their name and a list of the movie titles
RETURN p2.name AS actor, collect(m2.title) AS
movies
Reading from Neo4j
LOAD CSV WITH HEADERS FROM 'file:///stations.csv' AS row
MERGE (s:Station {id: row.id})
SET s.name = row.name,
s.zone = row.zone,
s.location = point({
latitude: toFloat(row.latitude),
longitude: toFloat(row.longitude)
})
Going Underground
LOAD CSV WITH HEADERS FROM 'file:///lines.csv' AS row
MERGE (l:Line {id: row.line})
SET l += row {
.name,
.colour,
.stripe
}
Going Underground
Going Underground
LOAD CSV WITH HEADERS FROM 'file:///stops.csv' AS row
MATCH (s1:Station {id: row.station1})
MATCH (s2:Station {id: row.station2})
MATCH (l:Line {id: row.line})
CALL apoc.create.relationship(
s1,
toUpper(replace(l.name, ' ', '_')), {}, s2
) YIELD rel
MATCH (start:Station {name: "Liverpool Street"})
MATCH (end:Station {name: "Kensington (Olympia)"})
MATCH path = allShortestPaths((start)-[*..99]-(end))
WHERE all(r in relationships(path) WHERE not r:`WATERLOO_&_CITY_LINE`)
AND all(n in nodes(path) WHERE not r:Busy)
RETURN path
● Completely Free
● Hands-on Courses
teaching Neo4j Fundamentals, Cypher,
Drivers and Graph Data Science
● Curated Learning Paths
catering for everyone from beginners to
experts
● Free Certifications
graphacademy.neo4j.com
Learn more with

Introduction to Cypher

  • 1.
    Introduction to Cypher AdamCowley Developer Advocate - @adamcowley
  • 3.
  • 4.
  • 5.
  • 6.
    Toy Story Movie Nodes can beidentified by one or more labels Nodes represent things
  • 7.
    Toy Story Movie Animated Nodes can beidentified by one or more labels Nodes represent things
  • 8.
    Toy Story Movie Animated Nodes can beidentified by one or more labels title: Toy Story released: 1995 Nodes represent things
  • 9.
    Toy Story Movie Animated Nodes can beidentified by one or more labels title: Toy Story released: 1995 Nodes represent things Nodes can hold properties as key/value pairs
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
    Toy Story Movie Tom Hanks Actor Relationships connect twonodes ACTED_IN Relationships have a type
  • 16.
    Toy Story Movie Tom Hanks Actor Relationships connect twonodes ACTED_IN Relationships have a type Relationships have a direction
  • 17.
    Toy Story Movie Tom Hanks Actor Relationships connect twonodes ACTED_IN roles: Woody Relationships have a type Relationships have a direction
  • 18.
    Toy Story Movie Tom Hanks Actor Relationships connect twonodes ACTED_IN roles: Woody Relationships have a type Relationships can also hold properties as key/value pairs Relationships have a direction
  • 19.
  • 20.
    Cypher is adeclarative language that allows you to identify patterns in your data using an ASCII- art style syntax consisting of brackets, dashes and arrows.
  • 21.
    Cypher is adeclarative language that allows you to identify patterns in your data using an ASCII- art style syntax consisting of brackets, dashes and arrows.
  • 22.
    Cypher is adeclarative language that allows you to identify patterns in your data using an ASCII- art style syntax consisting of brackets, dashes and arrows. Movie ACTED_IN Person
  • 23.
    Cypher is adeclarative language that allows you to identify patterns in your data using an ASCII- art style syntax consisting of brackets, dashes and arrows. Movie ACTED_IN Person (p:Person)-[r:ACTED_IN]->(m:Movie)
  • 24.
    Cypher is adeclarative language that allows you to identify patterns in your data using an ASCII- art style syntax consisting of brackets, dashes and arrows. Movie ACTED_IN Person (p:Person)-[r:ACTED_IN]->(m:Movie)
  • 25.
    Cypher is adeclarative language that allows you to identify patterns in your data using an ASCII- art style syntax consisting of brackets, dashes and arrows. Movie ACTED_IN Person (p:Person)-[r:ACTED_IN]->(m:Movie)
  • 26.
    Cypher is adeclarative language that allows you to identify patterns in your data using an ASCII- art style syntax consisting of brackets, dashes and arrows. Movie ACTED_IN Person (p:Person)-[r:ACTED_IN]->(m:Movie)
  • 27.
    Cypher is adeclarative language that allows you to identify patterns in your data using an ASCII- art style syntax consisting of brackets, dashes and arrows. Movie ACTED_IN Person (p:Person)-[r:ACTED_IN]->(m:Movie)
  • 28.
    Cypher is adeclarative language that allows you to identify patterns in your data using an ASCII- art style syntax consisting of brackets, dashes and arrows. Movie ACTED_IN Person (p:Person)-[r:ACTED_IN]->(m:Movie)
  • 29.
    Cypher is adeclarative language that allows you to identify patterns in your data using an ASCII- art style syntax consisting of brackets, dashes and arrows. Movie ACTED_IN Person (p:Person)-[r:ACTED_IN]->(m:Movie)
  • 30.
    Cypher is adeclarative language that allows you to identify patterns in your data using an ASCII- art style syntax consisting of brackets, dashes and arrows. Movie ACTED_IN Person (p:Person)-[r:ACTED_IN]->(m:Movie)
  • 31.
    Writing to Neo4j //Create a pattern CREATE (:Person {name: "Tom Hanks"}) -[:ACTED_IN {roles: "Woody"}]-> (:Movie {title: "Toy Story"})
  • 32.
    Writing to Neo4j //Find or create using MERGE MERGE (p:Person {name: "Tom Hanks"})
  • 33.
    Writing to Neo4j //Find or create using MERGE MERGE (p:Person {name: "Tom Hanks"}) MERGE (m:Movie {title: "Toy Story"})
  • 34.
    Writing to Neo4j //Find or create using MERGE MERGE (p:Person {name: "Tom Hanks"}) MERGE (m:Movie {title: "Toy Story"}) MERGE (p)-[r:ACTED_IN]->(m)
  • 35.
    Writing to Neo4j //Find or create using MERGE MERGE (p:Person {name: "Tom Hanks"}) MERGE (m:Movie {title: "Toy Story"}) MERGE (p)-[r:ACTED_IN]->(m) SET r.roles = "Woody"
  • 36.
    Reading from Neo4j //Find a pattern in the database MATCH (p:Person)-[r:ACTED_IN]->(m:Movie)
  • 37.
    Reading from Neo4j //Find a pattern in the database MATCH (p:Person)-[r:ACTED_IN]->(m:Movie) // Filter on a node property WHERE m.title = "Toy Story"
  • 38.
    // Find apattern in the database MATCH (p:Person)-[r:ACTED_IN]->(m:Movie) // Filter on a node property WHERE m.title = "Toy Story" // Choose what to return RETURN p.name AS actor, r.roles AS roles Reading from Neo4j
  • 39.
    // Find apattern in the database SQL Equivalent MATCH (p:Person)-[r:ACTED_IN]->(m:Movie) FROM/JOIN // Filter on a node property WHERE m.title = "Toy Story" WHERE // Choose what to return RETURN p.name AS actor, r.roles AS roles SELECT Reading from Neo4j
  • 40.
    // Actors whoacted with Tom Hanks also acted in... MATCH (p:Person)-[r:ACTED_IN]->(m:Movie) <-[:ACTED_IN]-(p2)-[r2:ACTED_IN]->(m2:Movie) WHERE p.name = "Tom Hanks" // Return their name and a list of the movie titles RETURN p2.name AS actor, collect(m2.title) AS movies Reading from Neo4j
  • 42.
    LOAD CSV WITHHEADERS FROM 'file:///stations.csv' AS row MERGE (s:Station {id: row.id}) SET s.name = row.name, s.zone = row.zone, s.location = point({ latitude: toFloat(row.latitude), longitude: toFloat(row.longitude) }) Going Underground
  • 43.
    LOAD CSV WITHHEADERS FROM 'file:///lines.csv' AS row MERGE (l:Line {id: row.line}) SET l += row { .name, .colour, .stripe } Going Underground
  • 44.
    Going Underground LOAD CSVWITH HEADERS FROM 'file:///stops.csv' AS row MATCH (s1:Station {id: row.station1}) MATCH (s2:Station {id: row.station2}) MATCH (l:Line {id: row.line}) CALL apoc.create.relationship( s1, toUpper(replace(l.name, ' ', '_')), {}, s2 ) YIELD rel
  • 47.
    MATCH (start:Station {name:"Liverpool Street"}) MATCH (end:Station {name: "Kensington (Olympia)"}) MATCH path = allShortestPaths((start)-[*..99]-(end)) WHERE all(r in relationships(path) WHERE not r:`WATERLOO_&_CITY_LINE`) AND all(n in nodes(path) WHERE not r:Busy) RETURN path
  • 48.
    ● Completely Free ●Hands-on Courses teaching Neo4j Fundamentals, Cypher, Drivers and Graph Data Science ● Curated Learning Paths catering for everyone from beginners to experts ● Free Certifications graphacademy.neo4j.com Learn more with

Editor's Notes

  • #3 Graphs essentially consist of nodes, and these nodes represent things, they represent entities. In this case it's a MacBook, it could be a product, a car, a location, it's something physical.We can identify these nodes with one or more labels.
  • #4 Graphs essentially consist of nodes, and these nodes represent things, they represent entities. In this case it's a MacBook, it could be a product, a car, a location, it's something physical.We can identify these nodes with one or more labels.
  • #5 Graphs essentially consist of nodes, and these nodes represent things, they represent entities. In this case it's a MacBook, it could be a product, a car, a location, it's something physical.We can identify these nodes with one or more labels.
  • #6 Graphs essentially consist of nodes, and these nodes represent things, they represent entities. In this case it's a MacBook, it could be a product, a car, a location, it's something physical.We can identify these nodes with one or more labels.
  • #7 Graphs essentially consist of nodes, and these nodes represent things, they represent entities. In this case it's a MacBook, it could be a product, a car, a location, it's something physical.We can identify these nodes with one or more labels.
  • #8 Graphs essentially consist of nodes, and these nodes represent things, they represent entities. In this case it's a MacBook, it could be a product, a car, a location, it's something physical.We can identify these nodes with one or more labels.
  • #9 Graphs essentially consist of nodes, and these nodes represent things, they represent entities. In this case it's a MacBook, it could be a product, a car, a location, it's something physical.We can identify these nodes with one or more labels.
  • #10 Graphs essentially consist of nodes, and these nodes represent things, they represent entities. In this case it's a MacBook, it could be a product, a car, a location, it's something physical.We can identify these nodes with one or more labels.
  • #11 Graphs essentially consist of nodes, and these nodes represent things, they represent entities. In this case it's a MacBook, it could be a product, a car, a location, it's something physical.We can identify these nodes with one or more labels.
  • #12 Graphs essentially consist of nodes, and these nodes represent things, they represent entities. In this case it's a MacBook, it could be a product, a car, a location, it's something physical.We can identify these nodes with one or more labels.
  • #13 Graphs essentially consist of nodes, and these nodes represent things, they represent entities. In this case it's a MacBook, it could be a product, a car, a location, it's something physical.We can identify these nodes with one or more labels.
  • #14 Graphs essentially consist of nodes, and these nodes represent things, they represent entities. In this case it's a MacBook, it could be a product, a car, a location, it's something physical.We can identify these nodes with one or more labels.
  • #15 Graphs essentially consist of nodes, and these nodes represent things, they represent entities. In this case it's a MacBook, it could be a product, a car, a location, it's something physical.We can identify these nodes with one or more labels.
  • #16 Graphs essentially consist of nodes, and these nodes represent things, they represent entities. In this case it's a MacBook, it could be a product, a car, a location, it's something physical.We can identify these nodes with one or more labels.
  • #17 Graphs essentially consist of nodes, and these nodes represent things, they represent entities. In this case it's a MacBook, it could be a product, a car, a location, it's something physical.We can identify these nodes with one or more labels.
  • #18 Graphs essentially consist of nodes, and these nodes represent things, they represent entities. In this case it's a MacBook, it could be a product, a car, a location, it's something physical.We can identify these nodes with one or more labels.
  • #19 Graphs essentially consist of nodes, and these nodes represent things, they represent entities. In this case it's a MacBook, it could be a product, a car, a location, it's something physical.We can identify these nodes with one or more labels.
  • #21 And the way we query this structure of known term relationships is with a language called cypher. Cypher is a declarative query language that allows you to identify patterns in your data. In this case, a customer who is rated a product. We do that by drawing the patterns on screen using an ASCII-art style syntax.
  • #22 And the way we query this structure of known term relationships is with a language called cypher. Cypher is a declarative query language that allows you to identify patterns in your data. In this case, a customer who is rated a product. We do that by drawing the patterns on screen using an ASCII-art style syntax.
  • #23 And the way we query this structure of known term relationships is with a language called cypher. Cypher is a declarative query language that allows you to identify patterns in your data. In this case, a customer who is rated a product. We do that by drawing the patterns on screen using an ASCII-art style syntax.
  • #24 And the way we query this structure of known term relationships is with a language called cypher. Cypher is a declarative query language that allows you to identify patterns in your data. In this case, a customer who is rated a product. We do that by drawing the patterns on screen using an ASCII-art style syntax.
  • #25 And the way we query this structure of known term relationships is with a language called cypher. Cypher is a declarative query language that allows you to identify patterns in your data. In this case, a customer who is rated a product. We do that by drawing the patterns on screen using an ASCII-art style syntax.
  • #26 And the way we query this structure of known term relationships is with a language called cypher. Cypher is a declarative query language that allows you to identify patterns in your data. In this case, a customer who is rated a product. We do that by drawing the patterns on screen using an ASCII-art style syntax.
  • #27 And the way we query this structure of known term relationships is with a language called cypher. Cypher is a declarative query language that allows you to identify patterns in your data. In this case, a customer who is rated a product. We do that by drawing the patterns on screen using an ASCII-art style syntax.
  • #28 And the way we query this structure of known term relationships is with a language called cypher. Cypher is a declarative query language that allows you to identify patterns in your data. In this case, a customer who is rated a product. We do that by drawing the patterns on screen using an ASCII-art style syntax.
  • #29 And the way we query this structure of known term relationships is with a language called cypher. Cypher is a declarative query language that allows you to identify patterns in your data. In this case, a customer who is rated a product. We do that by drawing the patterns on screen using an ASCII-art style syntax.
  • #30 And the way we query this structure of known term relationships is with a language called cypher. Cypher is a declarative query language that allows you to identify patterns in your data. In this case, a customer who is rated a product. We do that by drawing the patterns on screen using an ASCII-art style syntax.
  • #31 And the way we query this structure of known term relationships is with a language called cypher. Cypher is a declarative query language that allows you to identify patterns in your data. In this case, a customer who is rated a product. We do that by drawing the patterns on screen using an ASCII-art style syntax.
  • #32 And the way we query this structure of known term relationships is with a language called cypher. Cypher is a declarative query language that allows you to identify patterns in your data. In this case, a customer who is rated a product. We do that by drawing the patterns on screen using an ASCII-art style syntax.