当前位置: 首页 > news >正文

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 创建关系

创建两个节点之间的关系。例如,创建一个 PersonMovie 节点之间的 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 查询具有多种关系类型的路径

查询从 PersonMovie 的路径,可以是 LIKESWATCHED 关系:

MATCH p=(p:Person)-[:LIKES|WATCHED]->(m:Movie)
RETURN p

9.3 查询路径的长度

查询路径的长度:

MATCH p=(p:Person)-[:KNOWS*2..4]->(m:Person)
RETURN p

这个查询返回从 PersonPerson 的路径,路径长度为 2 到 4。


十、总结

Cypher 是 Neo4j 的图数据库查询语言,它提供了一种简洁且易于理解的方式来操作图数据。本文介绍了 Neo4j 常用的查询语句,包括查询、筛选、排序、聚合、创建、更新、删除等操作。掌握这些常用查询语句将帮助你在 Neo4j 中高效地操作图数据。

希望这篇博客能够帮助你更好地理解和使用 Neo4j。如果你想深入了解更多高级功能,可以参考 Neo4j 官方文档。

相关文章:

  • 数据库系统概论(四)关系操作,关系完整性与关系代数
  • 【学习笔记】检索增强生成(RAG)技术
  • 传统智慧焕新,打造现代养生生活
  • 基于物联网的园林防火监测系统
  • 网络原理 ——TCP 协议
  • AMP混合精度训练 详细解析
  • 代码随想录回文子序列
  • 如何判断你的PyTorch是GPU版还是CPU版?
  • C++泛型编程(一):模板详解
  • 47-dify案例分享-魔搭+Dify王炸组合!10分钟搭建你的专属 生活小助理
  • 利用【指针引用】对【非空单循环链表】进行删除操作
  • C/C++ | 高频手撕整理(1) —— strstr,memcpy,memmove函数模拟实现
  • ARM架构的微控制器总线矩阵优先级与配置
  • DeepSeek 的长上下文扩展机制
  • 【MCP】详细了解MCP协议:和function call的区别何在?如何使用MCP?
  • 0803分页_加载更多-网络ajax请求2-react-仿低代码平台项目
  • 【多线程】五、线程同步 条件变量
  • 逆向|dy|a_bogus|1.0.1.19-fix.01
  • RK3568 Debian调试记录
  • 基于强化学习的智能交通控制系统设计
  • 辽宁省信访局副局长于江调任辽宁省监狱管理局局长
  • 印方称与巴基斯坦军队在克什米尔交火
  • 涉军民事案件类型日益增多,最高法新规明晰管辖争议问题
  • 从息屏24小时到息屏1小时,姚明在深圳开启落地试点
  • 又双叒叕出差太空了!神二十成功出发,神十九乘组扫榻以待
  • 俄外长拉夫罗夫将出席金砖国家外长会