前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Neo4j 之 Cypher 笔记

Neo4j 之 Cypher 笔记

作者头像
EmoryHuang
发布2022-10-31 16:15:43
1.3K0
发布2022-10-31 16:15:43
举报
文章被收录于专栏:EmoryHuang's Blog

Neo4j 之 Cypher 笔记

Cypher 简介

Cypher 是 Neo4j 提出的图查询语言,是一种声明式的图数据库查询语言,如同关系数据库中的 SQL,它拥有精简的语法和强大的表现力,能够精准且高效地对图数据进行查询和更新。

代码语言:javascript
复制
# Alice 居住在北京
(Alice:Person) -[:LIVES_IN]-> (:City {name: 'Beijing'})

节点与关系

在 Neo4j 中,数据以节点关系的形式存储在数据库中。

节点

在 Cypher 中节点的表示方法非常简单,形式如下:

代码语言:javascript
复制
(node-name:label-name)
{
    property-name: property-value,
    property-name: property-value,
    ...
}

下面是一些示例:

代码语言:javascript
复制
()                  # 匿名的节点
(Alice)             # 节点名(变量名)为 Alice
(:Person)           # 类型为 Person 的节点
(Alice:Person)      # 节点名为 Alice,类型为 Person
(Alice:Person {name: "Alice"})          # 指定特定属性
(Alice:Person {name: "Alice", age: 12})

和 SQL 很相似,Cypher 语言的关键字不区分大小写,但是属性值,标签,关系类型和变量是区分大小写的。

关系

关系通常用箭头来表示:

在 Cypher 中,关系分为三种:符号 --,表示有关系,忽略关系的类型和方向;符号 --><--,表示有方向的关系;通过 [r] 为关系定义一个变量名,命名方法与节点类似。

代码语言:javascript
复制
-->                 # 非直接相连的关系
-[role]->           # 关系名(变量名)为 role
-[:LIVES_IN]->      # 类型为 LIVES_IN 的关系
-[role:LIVES_IN]->  # 关系名为 role,类型为 LIVES_IN
-[role:LIVES_IN {roles: ["Neo"]}]->     # 指定特定属性

变长路径的表示方式是:[*N..M]NM 表示路径长度的最小值和最大值

代码语言:javascript
复制
(a)-[*2]->(b)       # 表示路径长度为2,起始节点是a,终止节点是b;
(a)-[*3..5]->(b)    # 表示路径长度的最小值是3,最大值是5,起始节点是a,终止节点是b;
(a)-[*..5]->(b)     # 表示路径长度的最大值是5,起始节点是a,终止节点是b;
(a)-[*3..]->(b)     # 表示路径长度的最小值是3,起始节点是a,终止节点是b;
(a)-[*]->(b)        # 表示不限制路径长度,起始节点是a,终止节点是b;

模式

将节点和关系组合起来,得出一个模式,就像最开始展示的:

代码语言:javascript
复制
# Alice 居住在北京
(Alice:Person) -[:LIVES_IN]-> (:City {name: 'Beijing'})

Cypher 关键字

与 SQL 类似,Cypher 中也有类似于 SELECTFROMWHERE 的关键字。

MATCH & RETURN

MATCH 用于检索图数据库中的节点和关系,RETURN 则返回匹配结果,两者通常结合使用。

OPTIONAL MATCH 可选的,对于找不到的匹配项,会用 null 代替

代码语言:javascript
复制
# 节点查找
# 查找所有电影
MATCH (m:Movie)
RETURN m

# 查找所有姓名为 Alice 的人
MATCH (p:Person {name: "Alice"})
RETURN p

# 关系查找
# 查找所有与成龙有关的电影的名字(一跳)
MATCH (p:Person {name: "jackie chan"}) --> (m:Movie)
RETURN m.name

# 查找成龙与电影之间的关系(一跳)
MATCH (p:Person {name: "jackie chan"}) -[r]-> (m:Movie)
RETURN R

CREATE & DELETE

使用 CREATE 关键字能够创建节点、关系、模式,只要加上关键词 CREATE

DELETE 用于删除节点和关系。

注意,删除节点前需先删除与该节点有关联的所有边。

代码语言:javascript
复制
# 创建节点 Alice,类型为 Person
CREATE (Alice:Person {name: "Alice", age: 12})
# 创建关系 Alice 认识 Bob
CREATE (Alice) -[:KNOWS]-> (Bob:Person {name:"Bob"})

# 删除所有名为 Alice 的人物节点
MATCH (p:Person {name: "Alice"})
DELETE p
# 删除所有名为 Alice 的人物节点,并删除与其有关联的所有关系
MATCH (p:Person {name: "Alice"})
DETACH DELETE p

WHERE

WHERE 用于为 MATCH,OPTIONAL MATCH 和 WITH 语句添加过滤条件。

代码语言:javascript
复制
# 查找所有2000年之后的电影
MATCH (m:Movie)
WHERE m.year > 2000
RETURN m

WITH

WITH 用于向后面的语句传递指定结果,并可以改变结果集中实体的形式和数量。

代码语言:javascript
复制
# 查询五部评分最高的电影,并查找与这五部电影有关系的人物
MATCH (m:Movie)
WITH m ORDER BY m.score DESC LIMIT 5
MATCH (m:Movie)-[r]-(p:Person)
RETURN p

ORDER BY

ORDER BY 用于对结果进行排序。

代码语言:javascript
复制
# 查找所有人物节点,返回姓名和年龄,并按人物姓名排序
MATCH (p:Person)
RETURN p.name, p.age
ORDER BY p.name

SKIP & LIMIT

SKIP 用于跳过指定行数的结果,LIMIT 用于保留指定行数的结果。

代码语言:javascript
复制
# 查找所有人物的姓名,跳过前3个人
MATCH (p:Person)
RETURN p.name
SKIP 3

# 查找所有人物节点,按年龄排序,保留前5个
MATCH (p:Person)
RETURN p
ORDER BY p.age
LIMIT 5

SET & REMOVE

SET 用于设置节点和关系的属性,REMOVE 用于移除节点和关系的属性。

代码语言:javascript
复制
MATCH (p:Person {name: "Bob"})
SET p.age = 18
RETURN p.age

MATCH (p:Person {name: "Bob"})
REMOVE p.age
RETURN p

MERGE

MERGE 用于保证元素一定存在,作用为查询节点和边,若查不到就创建该节点和边。

代码语言:javascript
复制
# 查找人物成龙和电影十二生肖,再查找之间的出演关系,若找不到该关系,则创建该关系
MATCH (p:Person {name: "jackie chan"}), (m:Movie {name: "十二生肖"})
MERGE (p)-[r:ACT_IN]->(m)
RETURN n.name, r, m.name

参考资料

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-02-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Neo4j 之 Cypher 笔记
    • Cypher 简介
      • 节点与关系
        • 节点
        • 关系
        • 模式
      • Cypher 关键字
        • MATCH & RETURN
        • CREATE & DELETE
        • WHERE
        • WITH
        • ORDER BY
        • SKIP & LIMIT
        • SET & REMOVE
        • MERGE
      • 参考资料
      相关产品与服务
      数据库
      云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档