上一篇主要讲了CREATE, MATCH, RETURN的使用, 本篇主要讲解节点之间的关系维护, WHERE, DELETE, REMOVE, SET, ORDER BY命令.
Neo4j关系被分为两种类型, 分别为单向关系和双向关系, 在几种情况中, 我们可以使用CREATE语句创建两个节点之间的关系:
- 在两个现有节点之间创建无属性关系
- 在两个现有节点之间创建有属性关系
- 在两个新节点之间创建无属性关系
- 在两个新节点之间创建有属性关系
- 在WHERE子句的两个节点之间创建属性关系
现在我们将要创建两个节点之间的关系:

创建标签之间的关系同样使用的是CREATE语句:
CREATE (node-name:label-name) - [relation-name:relation-lable-name] -> (node2-name:label2-name)
语法元素 | 描述 |
---|---|
relation-name | 关系名称 |
relation-label-name | 关系标签名称 |
这样就创建了节点1和节点2之间的关系。
示例:
CREATE (u1:User1)-[r1:儿子]->(u2:User2)

如上, 我们创建了两个节点, 4节点为3节点的儿子, 在左侧的Relationship中能看到出现了一个[儿子]的关系。
WHERE语句
WHER语句和SQL中的WHERE一样, 用来过滤MATCH查询的结果
语法结构:
WHERE <条件>
复杂语法结构:
WHERE <条件> <运算符> <条件>
支持的运算符如下:
运算符 | 描述 |
---|---|
AND | 与 |
OR | 或 |
NOT | 非 |
XOR | 异或 |
= | 等于 |
<> | 不等于 |
< | 小于 |
> | 大于 |
<= | 小于等于 |
>= | 大于等于 |
示例:
上一讲中已经创建了一个student, 为了方便演示, 我再创建几个student节点
create (s:student {id: "2", name:"lisi", age:"33"})
create (s:student {id: "3", name:"wangwu", age:"22"})
create (s:student {id: "4", name:"zhaoliu", age:"55"})
此时我们已经有四个student节点

接下来我们查询age大于25的节点:
match (s:student) where s.age>"25" return s

此时查询出了lisi和zhaoliu两个节点
注意: 条件的值需要使用双引号括起来
当然我们也可以同时查询多个标签:
match (s:student),(b:Book) where s.age>"25" and b.name="neo4j入门" return s, b

WHERE子句也可以创建关系
语法结构
MATCH (<node1-label-name>:<node1-name>),(<node2-label-name>:<node2-name)
WHERE <条件>
CREATE (node-name:label-name) - [relation-name:relation-lable-name] -> (node2-name:label2-name)
上面命令一些描述前面都已经写过了, 这里就不多赘述, 直接上示例语句:
match (s:student),(b:Book) where s.id>"1" and b.name="neo4j入门" create (s)-[r:购买{source:"jd"}]->(b) return r
这个语句的意思是创建了student的id大于1的节点在jd上购买了neo4j入门这本书的关系, 如图:

DELETE语句
- 删除节点
- 删除节点及相关节点的关系
语法:
DELETE [<node-name>...]
注意: 删除多个需要用逗号来分隔
示例:
删除两个节点之间的关系:
MATCH (u1:User1)-[r:`儿子`]->(u2:User2) return r

删除节点:
MATCH (n:User1) delete n

注意: 删除节点前需要先删除节点之间的关系, 否则会报错
REMOVE语句
- 删除节点或关系的标签
- 删除节点或关系的属性
使用起来比较简单, 示例如下, 我们删除Book中的price属性:
MATCH (n:Book) remove n.price return n
此时book中的price属性已经被删除了, 如图:

SET语句
- 向现有的节点或关系添加新的属性
- 添加或更新属性值
SET [<property-name-list>...]
使用起来也很简单, 我们向book中添加一个author的属性:
match (b:Book) set b.author='ququ' return b

ORDER BY 排序
ORDER BY可以对MATCH的查询结果进行升序或者降序排序, 默认情况下是使用升序, 如果需要降序, 需要使用DESC
ORDER BY <property-name-list> [DESC]
实例: 我们使用年龄将User进行降序排序
MATCH (n:student) RETURN n order by n.age desc

这一篇就先写到这, 主要就是讲解了节点之间的关系维护, WHERE, DELETE, REMOVE, SET命令. 注意, DELETE, REMOVE等等命令必须配合MATCH才能使用
网友评论