For example, here is a query which finds a user called 'John' and 'John’s' friends (though not his direct friends) before returning both 'John' and any friends-of-friends that are found.
MATCH (john {name: 'John'})-[:friend]->()-[:friend]->(fof)
RETURN john.name, fof.name
Resulting in:
+----------------------+
| john.name | fof.name |
+----------------------+
| "John" | "Maria" |
| "John" | "Steve" |
+----------------------+
2 rows
Next up we will add filtering to set more parts in motion:
We take a list of user names and find all nodes with names from this list, match their friends and return only those followed users who have a 'name' property starting with 'S'.
MATCH (user)-[:friend]->(follower)
WHERE user.name IN ['Joe', 'John', 'Sara', 'Maria', 'Steve'] AND follower.name =~ 'S.*'
RETURN user.name, follower.name
Resulting in:
+---------------------------+
| user.name | follower.name |
+---------------------------+
| "Joe" | "Steve" |
| "John" | "Sara" |
+---------------------------+
2 rows
CREATE命令语法
CREATE (<node-name>:<label-name>)
语法说明
语法元素 | 描述 |
---|---|
CREATE | 它是一个Neo4j CQL命令。 |
<node-name> | 它是我们要创建的节点名称。 |
<label-name> | 它是一个节点标签名称 |
注意事项 -
1、Neo4j数据库服务器使用此<node-name>将此节点详细信息存储在Database.As中作为Neo4j DBA或Developer,我们不能使用它来访问节点详细信息。
2、Neo4j数据库服务器创建一个<label-name>作为内部节点名称的别名。作为Neo4j DBA或Developer,我们应该使用此标签名称来访问节点详细信息。
多个标签到节点
语法:
CREATE (<node-name>:<label-name1>:<label-name2>.....:<label-namen>)
MATCH命令语法:
MATCH
(
<node-name>:<label-name>
)
语法说明:
语法元素 | 描述 |
---|---|
<node-name> | 它是我们将要创建的节点名称。 |
<label-name> | 它是一个节点标签名称 |
要点 -
-
Neo4j数据库服务器使用此<node-name>将此节点详细信息存储在Database.As中作为Neo4j DBA或Developer,我们不能使用它来访问节点详细信息。
-
Neo4j数据库服务器创建一个<label-name>作为内部节点名称的别名。作为Neo4j DBA或Developer,我们应该使用此标签名称来访问节点详细信息。
单个标签到关系
语法:
CREATE (<node1-name>:<label1-name>)-
[(<relationship-name>:<relationship-label-name>)]
->(<node2-name>:<label2-name>)
查询并创建联系:
MATCH (<node1-label-name>:<node1-name>),(<node2-label-name>:<node2-name>)
WHERE <condition>
CREATE (<node1-label-name>)-[<relationship-label-name>:<relationship-name>
{<relationship-properties>}]->(<node2-label-name>)
RETURN命令语法:
RETURN
<node-name>.<property1-name>,
...
<node-name>.<propertyn-name>
语法说明:
语法元素 | 描述 |
---|---|
<node-name> | 它是我们将要创建的节点名称。 |
<Property1-name>...<Propertyn-name> | 属性是键值对。 定义将分配给创建节点的属性的名称 |
- 创建客户节点
CREATE (e:Customer{id:"1001",name:"Abc",dob:"01/10/1982"})
- 创建CreditCard节点
CREATE (cc:CreditCard{id:"5001",number:"1234567890",cvv:"888",expiredate:"20/17"})
- 观察先前创建的两个节点:Customer和CreditCard
MATCH (e:Customer)
RETURN e.id,e.name,e.dob
MATCH (cc:CreditCard)
RETURN cc.id,cc.number,cc.cvv,cc.expiredate
DELETE节点子句语法
DELETE <node-name-list>
S.No. | 语法元素 | 描述 |
---|---|---|
1. | DELETE | 它是一个Neo4j CQL关键字。 |
2. | <node-name-list> | 它是一个要从数据库中删除的节点名称列表。 |
删除节点:
MATCH (e: Employee) DELETE e
DELETE节点和关系子句语法
DELETE <node1-name>,<node2-name>,<relationship-name>
S.No. | 语法元素 | 描述 |
---|---|---|
1. | DELETE | 它是一个Neo4j CQL关键字。 |
2. | <node1-name> | 它是用于创建关系<relationship-name>的一个结束节点名称。 |
3. | <node2-name> | 它是用于创建关系<relationship-name>的另一个节点名称。 |
4. | <relationship-name> | 它是一个关系名称,它在<node1-name>和<node2-name>之间创建。 |
MATCH (cc: CreditCard)-[rel]-(c:Customer)
DELETE cc,c,rel
Neo4j CQL REMOVE命令用于
- 删除节点或关系的标签
- 删除节点或关系的属性
Neo4j CQL DELETE和REMOVE命令之间的主要区别 -
- DELETE操作用于删除节点和关联关系。
- REMOVE操作用于删除标签和属性。
Neo4j CQL DELETE和REMOVE命令之间的相似性 -
- 这两个命令不应单独使用。
- 两个命令都应该与MATCH命令一起使用
REMOVE属性子句语法
REMOVE <property-name-list>
S.No. | 语法元素 | 描述 |
---|---|---|
1。 | REMOVE | 它是一个Neo4j CQL关键字。 |
2。 | <property-name-list> | 它是一个属性列表,用于永久性地从节点或关系中删除它。 |
MATCH (dc:DebitCard)
REMOVE dc.cvv
RETURN dc
REMOVE一个Label子句语法:
REMOVE <label-name-list>
S.No. | 语法元素 | 描述 |
---|---|---|
1. | REMOVE | 它是一个Neo4j CQL关键字。 |
2. | <label-name-list> | 它是一个标签列表,用于永久性地从节点或关系中删除它。 |
SET子句语法
SET <property-name-list>
S.No. | 语法元素 | 描述 |
---|---|---|
1 | SET | 它是一个Neo4j的CQL关键字。 |
2 | <property-name-list> | 它是一个属性列表,用于执行添加或更新操作以满足我们的要求。 |
MATCH (dc:DebitCard)
SET dc.atm_pin = 3456
RETURN dc
ORDER BY子句语法
ORDER BY <property-name-list> [DESC]
S.No. | Syntax Element | Description |
---|---|---|
1. | ORDER BY | It is a Neo4j CQL keyword. |
2. | <property-name-list> | It is a list of properties used in sorting. |
3. | DESC | It is a Neo4j CQL keyword used to specify descending order.It is optional. |
UNION子句语法
<MATCH Command1>
UNION
<MATCH Command2>
语法说明:
S.No. | 语法元素 | 描述 |
---|---|---|
1。 | <MATCH COMMAND1> | 它是CQL MATCH命令,由UNION子句使用。 |
2。 | <MATCH Command2> | 它是CQL MATCH命令两个由UNION子句使用。 |
3。 | UNION | 它是UNION子句的Neo4j CQL关键字。 |
注意 -
如果这两个查询不返回相同的列名和数据类型,那么它抛出一个错误。
如果属性的标签值不一样,联合是也会出现错误,。Union all :不过滤重复的记录
MATCH (cc:CreditCard)
RETURN cc.id as id,cc.number as number,cc.name as name,
cc.valid_from as valid_from,cc.valid_to as valid_to
UNION
MATCH (dc:DebitCard)
RETURN dc.id as id,dc.number as number,dc.name as name,
dc.valid_from as valid_from,dc.valid_to as valid_to
LIMIT子句语法
LIMIT <number> 限制数量
SKIP子句语法:
SKIP <number> 间隔数量
Neo4j CQL MERGE语法
MERGE (<node-name>:<label-name>
{
<Property1-name>:<Pro<rty1-Value>
.....
<Propertyn-name>:<Propertyn-Value>
})
语法说明:
S.No. | 语法元素 | 描述 |
---|---|---|
1 | MERGE | 它是一个Neo4j CQL关键字。 |
2 | <node-name> | 它是节点或关系的名称。 |
3 | <label-name> | 它是节点或关系的标签名称。 |
4 | <property_name> | 它是节点或关系的属性名称。 |
5 | <property_value> | 它是节点或关系的属性值。 |
6 | : | 使用colon(:)运算符来分隔节点或关系的属性名称和值。 |
MERGE命令是CREATE命令和MATCH命令的组合。
MERGE = CREATE + MATCH
MERGE命令在图中搜索给定模式,如果存在,则返回结果
如果它不存在于图中,则它创建新的节点/关系并返回结果。
IN操作符语法
IN[<Collection-of-values>]
语法说明:
S.No. | 语法元素 | 描述 |
---|---|---|
1。 | IN | 它是一个Neo4j CQL关键字。 |
2。 | [ | 它告诉Neo4j CQL,一个值的集合的开始。 |
3。 | ] | 它告诉Neo4j CQL,值集合的结束。 |
4。 | <Collection-of-values> | 它是由逗号运算符分隔的值的集合。 |
MATCH (e:Employee)
WHERE e.id IN [123,124]
RETURN e.id,e.name,e.sal,e.deptno
ID是自增的。
CQL自带的一些函数:
MATCH (e:Employee)
RETURN e.id,UPPER(e.name),e.sal,e.deptno
聚合函数列表
S.No. | 聚集功能 | 描述 |
---|---|---|
1。 | COUNT | 它返回由MATCH命令返回的行数。 |
2。 | MAX | 它从MATCH命令返回的一组行返回最大值。 |
3。 | MIN | 它返回由MATCH命令返回的一组行的最小值。 |
4。 | SUM | 它返回由MATCH命令返回的所有行的求和值。 |
5。 | AVG | 它返回由MATCH命令返回的所有行的平均值。 |
关系函数列表
S.No. | 功能 | 描述 |
---|---|---|
1。 | STARTNODE | 它用于知道关系的开始节点。 |
2。 | ENDNODE | 它用于知道关系的结束节点。 |
3。 | ID | 它用于知道关系的ID。 |
4。 | TYPE | 它用于知道字符串表示中的一个关系的TYPE。 |