Create (clause)
Not to be confused with the CREATE statement from the DDL, the CREATE clause in openCypher is
similar to the INSERT clause of SQL and allows you to insert records into your node and relationship
tables. We describe the generic semantics of the CREATE clause below.
We will use the example database for demonstration, whose schema and data import commands are given here.
Insert new nodes
The following query inserts a single node record, (Alice, 35), into the User node table:
CREATE (u:User {name: 'Alice', age: 35});The properties to be set are specified using a mapping: {prop1 : val1, prop2 : val2, ...}.
You can now query the database for a User node with name Alice:
MATCH (a:User)WHERE a.name = 'Alice'RETURN a.*;┌────────┬───────┐│ a.name │ a.age ││ STRING │ INT64 │├────────┼───────┤│ Alice │ 35 │└────────┴───────┘Any node property that is not specified in the mapping but exists in the schema will be set to NULL. For example, the following query will set the age property of the inserted node record to NULL.
CREATE (u:User {name: 'Dimitri'});MATCH (a:User)WHERE a.name = 'Dimitri'RETURN a.*;┌─────────┬───────┐│ a.name │ a.age ││ STRING │ INT64 │├─────────┼───────┤│ Dimitri │ │└─────────┴───────┘Insert new relationships
You can insert records to your relationship tables by
first binding two variables s and t to nodes, and then
“drawing” a relationship pattern between s and t.
For example, the following creates a Follows relationship
from the User node with name Adam to the User node with
name Noura.
MATCH (u1:User), (u2:User)WHERE u1.name = 'Adam' AND u2.name = 'Noura'CREATE (u1)-[:Follows {since: 2011}]->(u2);Similar to node records, any relationship property that is not
specified in the insert statement will be set to NULL.
General semantics
The general semantics of CREATE is described here. You can specify
an arbitrary graph pattern P after the CREATE clause.
Then, for each tuple t that was produced before the CREATE statement,
each node n and relationship r that is not bound by t is inserted
as a new node and relationship. For example, the following query
adds a Follows relationship with since=2022 from User node Zhang
to every other User node (including from Zhang to Zhang) in the database:
MATCH (a:User), (b:User)WHERE a.name = "Zhang"CREATE (a)-[:Follows {since:2022}]->(b);This is because the a variable matches to User node Zhang and the b variable matches to any
node in the User table. As a result, this query creates a Follows relationship from the User node
Zhang to every other User node.