Neo4j 常用查询语句
Neo4j 常用查询语句
Neo4j 是一个图数据库,查询语言是 Cypher,它类似于 SQL 但针对图形数据进行了优化。Cypher 语法直观易懂,适合用来处理图数据。本文将介绍一些 Neo4j 中常用的查询语句,帮助你快速掌握图数据的操作方法。
一、查询所有节点
1.1 查询所有节点
MATCH (n)
RETURN n
此查询返回图数据库中的所有节点。MATCH
用于指定查询的模式,(n)
表示匹配所有节点,RETURN
用于指定返回的内容。
1.2 查询特定标签的节点
如果你只想查询某一类节点(比如 Person
标签的节点):
MATCH (p:Person)
RETURN p
1.3 查询特定属性的节点
查询具有特定属性的节点,例如查询 Person
标签中 name
属性为 “Alice” 的节点:
MATCH (p:Person {name: 'Alice'})
RETURN p
二、查询所有关系
2.1 查询所有关系
查询数据库中所有的关系(无论类型):
MATCH ()-[r]->()
RETURN r
2.2 查询特定类型的关系
例如查询所有 KNOWS
类型的关系:
MATCH ()-[r:KNOWS]->()
RETURN r
2.3 查询有特定属性的关系
查询关系上具有特定属性的关系,例如 KNOWS
类型的关系中,属性 since
为 2020 的关系:
MATCH ()-[r:KNOWS {since: 2020}]->()
RETURN r
三、查询节点及其关系
3.1 查询节点及其关系
查询所有 Person
标签的节点及其与其他节点的关系:
MATCH (p:Person)-[r]->()
RETURN p, r
3.2 查询节点和多个关系
查询 Person
标签的节点及其与 Movie
标签节点的关系:
MATCH (p:Person)-[r]->(m:Movie)
RETURN p, r, m
3.3 查询节点和指定路径
查询与 Person
节点连接的所有路径:
MATCH p=(p:Person)-[r]->()
RETURN p
四、筛选和排序
4.1 使用 WHERE
进行过滤
使用 WHERE
子句来过滤结果。例如,查询 Person
标签中 name
为 “Alice” 且 age
大于 30 的节点:
MATCH (p:Person)
WHERE p.name = 'Alice' AND p.age > 30
RETURN p
4.2 排序
使用 ORDER BY
对查询结果进行排序,例如按 age
属性升序排列:
MATCH (p:Person)
RETURN p
ORDER BY p.age ASC
4.3 限制结果数量
使用 LIMIT
限制查询返回的结果数量。例如,只返回前 5 个节点:
MATCH (p:Person)
RETURN p
LIMIT 5
五、聚合函数
5.1 计算节点的数量
查询 Person
标签节点的数量:
MATCH (p:Person)
RETURN count(p)
5.2 聚合求和
查询 Person
标签节点的年龄总和:
MATCH (p:Person)
RETURN sum(p.age)
5.3 聚合求最大值和最小值
查询 Person
标签节点的最大年龄和最小年龄:
MATCH (p:Person)
RETURN max(p.age), min(p.age)
5.4 使用 avg
计算平均值
查询 Person
标签节点的平均年龄:
MATCH (p:Person)
RETURN avg(p.age)
六、创建节点和关系
6.1 创建节点
创建一个新的 Person
节点:
CREATE (p:Person {name: 'Alice', age: 30})
RETURN p
6.2 创建关系
创建两个节点之间的关系。例如,创建一个 Person
和 Movie
节点之间的 LIKES
关系:
MATCH (p:Person {name: 'Alice'}), (m:Movie {title: 'Inception'})
CREATE (p)-[:LIKES]->(m)
RETURN p, m
6.3 创建多个节点和关系
同时创建多个节点和关系:
CREATE (p1:Person {name: 'Alice'}), (p2:Person {name: 'Bob'})
CREATE (p1)-[:KNOWS]->(p2)
RETURN p1, p2
七、更新节点和关系
7.1 更新节点属性
更新一个节点的属性,例如修改 Person
节点的 age
属性:
MATCH (p:Person {name: 'Alice'})
SET p.age = 31
RETURN p
7.2 更新关系属性
更新关系的属性,例如修改 KNOWS
关系中的 since
属性:
MATCH (p1:Person {name: 'Alice'})-[r:KNOWS]->(p2:Person)
SET r.since = 2022
RETURN r
八、删除节点和关系
8.1 删除节点
删除节点(删除前需要确保节点没有关联关系):
MATCH (p:Person {name: 'Alice'})
DELETE p
8.2 删除关系
删除节点之间的关系:
MATCH (p1:Person {name: 'Alice'})-[r:KNOWS]->(p2:Person)
DELETE r
8.3 删除节点和关系
同时删除节点及其关联的关系:
MATCH (p:Person {name: 'Alice'})
OPTIONAL MATCH (p)-[r]->()
DELETE p, r
九、路径查询
9.1 查询单一路径
查询从 Person
节点到 Movie
节点的路径:
MATCH p=(p:Person)-[:LIKES]->(m:Movie)
RETURN p
9.2 查询具有多种关系类型的路径
查询从 Person
到 Movie
的路径,可以是 LIKES
或 WATCHED
关系:
MATCH p=(p:Person)-[:LIKES|WATCHED]->(m:Movie)
RETURN p
9.3 查询路径的长度
查询路径的长度:
MATCH p=(p:Person)-[:KNOWS*2..4]->(m:Person)
RETURN p
这个查询返回从 Person
到 Person
的路径,路径长度为 2 到 4。
十、总结
Cypher 是 Neo4j 的图数据库查询语言,它提供了一种简洁且易于理解的方式来操作图数据。本文介绍了 Neo4j 常用的查询语句,包括查询、筛选、排序、聚合、创建、更新、删除等操作。掌握这些常用查询语句将帮助你在 Neo4j 中高效地操作图数据。
希望这篇博客能够帮助你更好地理解和使用 Neo4j。如果你想深入了解更多高级功能,可以参考 Neo4j 官方文档。