The RETURN
clause defines what to include in the query result set.
In the RETURN
part of your query, you define which parts of the pattern you are interested in.
It can be nodes, relationships, or properties on these.
Tip If what you actually want is the value of a property, make sure to not return the full node/relationship. This will improve performance. |
Return nodes
To return a node, list it in the RETURN
statement.
Query
MATCH (n { name: "B" }) RETURN n
The example will return the node.
Result
n |
---|
1 row |
|
Try this query live create (_0 {`age`:55, `happy`:"Yes!", `name`:"A"}) create (_1 {`name`:"B"}) create (_0)-[:`BLOCKS`]->(_1) create (_0)-[:`KNOWS`]->(_1) ; match (n {name: "B"}) return n
Return relationships
To return a relationship, just include it in the RETURN
list.
Query
MATCH (n { name: "A" })-[r:KNOWS]->(c) RETURN r
The relationship is returned by the example.
Result
r |
---|
1 row |
|
Try this query live create (_0 {`age`:55, `happy`:"Yes!", `name`:"A"}) create (_1 {`name`:"B"}) create (_0)-[:`BLOCKS`]->(_1) create (_0)-[:`KNOWS`]->(_1) ; match (n {name: "A"})-[r:KNOWS]->(c) return r
Return property
To return a property, use the dot separator, like this:
Query
MATCH (n { name: "A" }) RETURN n.name
The value of the property name
gets returned.
Result
n.name |
---|
1 row |
|
Try this query live create (_0 {`age`:55, `happy`:"Yes!", `name`:"A"}) create (_1 {`name`:"B"}) create (_0)-[:`BLOCKS`]->(_1) create (_0)-[:`KNOWS`]->(_1) ; match (n {name: "A"}) return n.name
Return all elements
When you want to return all nodes, relationships and paths found in a query, you can use the *
symbol.
Query
MATCH p=(a { name: "A" })-[r]->(b) RETURN *
This returns the two nodes, the relationship and the path used in the query.
Result
a | b | p | r |
---|---|---|---|
2 rows | |||
|
|
|
|
|
|
|
|
Try this query live create (_0 {`age`:55, `happy`:"Yes!", `name`:"A"}) create (_1 {`name`:"B"}) create (_0)-[:`BLOCKS`]->(_1) create (_0)-[:`KNOWS`]->(_1) ; match p=(a {name: "A"})-[r]->(b) return *
Variable with uncommon characters
To introduce a placeholder that is made up of characters that are
outside of the english alphabet, you can use the `
to enclose the variable, like this:
Query
MATCH (`This isn't a common variable`) WHERE `This isn't a common variable`.name='A' RETURN `This isn't a common variable`.happy
The node with name "A" is returned
Result
`This isn't a common variable`.happy |
---|
1 row |
|
Try this query live create (_0 {`age`:55, `happy`:"Yes!", `name`:"A"}) create (_1 {`name`:"B"}) create (_0)-[:`BLOCKS`]->(_1) create (_0)-[:`KNOWS`]->(_1) ; match (`This isn't a common variable`) where `This isn't a common variable`.name='A' return `This isn't a common variable`.happy
Column alias
If the name of the column should be different from the expression used, you can rename it by using AS
<new name>.
Query
MATCH (a { name: "A" }) RETURN a.age AS SomethingTotallyDifferent
Returns the age property of a node, but renames the column.
Result
SomethingTotallyDifferent |
---|
1 row |
|
Try this query live create (_0 {`age`:55, `happy`:"Yes!", `name`:"A"}) create (_1 {`name`:"B"}) create (_0)-[:`BLOCKS`]->(_1) create (_0)-[:`KNOWS`]->(_1) ; match (a {name: "A"}) return a.age AS SomethingTotallyDifferent
Optional properties
If a property might or might not be there, you can still select it as usual. It will be treated as NULL
if it is missing
Query
MATCH (n) RETURN n.age
This example returns the age when the node has that property, or null
if the property is not there.
Result
n.age |
---|
2 rows |
|
|
Try this query live create (_0 {`age`:55, `happy`:"Yes!", `name`:"A"}) create (_1 {`name`:"B"}) create (_0)-[:`BLOCKS`]->(_1) create (_0)-[:`KNOWS`]->(_1) ; match (n) return n.age
Other expressions
Any expression can be used as a return item — literals, predicates, properties, functions, and everything else.
Query
MATCH (a { name: "A" }) RETURN a.age > 30, "I'm a literal",(a)-->()
Returns a predicate, a literal and function call with a pattern expression parameter.
Result
a.age > 30 | "I'm a literal" | (a)-->() |
---|---|---|
1 row | ||
|
|
|
Try this query live create (_0 {`age`:55, `happy`:"Yes!", `name`:"A"}) create (_1 {`name`:"B"}) create (_0)-[:`BLOCKS`]->(_1) create (_0)-[:`KNOWS`]->(_1) ; match (a {name: "A"}) return a.age > 30, "I'm a literal", (a)-->()
Unique results
DISTINCT
retrieves only unique rows depending on the columns that have been selected to output.
Query
MATCH (a { name: "A" })-->(b) RETURN DISTINCT b
The node named B is returned by the query, but only once.
Result
b |
---|
1 row |
|
Try this query live create (_0 {`age`:55, `happy`:"Yes!", `name`:"A"}) create (_1 {`name`:"B"}) create (_0)-[:`BLOCKS`]->(_1) create (_0)-[:`KNOWS`]->(_1) ; match (a {name: "A"})-->(b) return distinct b