neo4j教程-Cypher操作

Cypher是Neo4j图形数据库的查询语言,用于创建、查询、修改和删除节点和关系。文中介绍了CREATE命令用于创建节点和关系,MATCH命令用于查找匹配模式的节点和关系,RETURN返回查询结果,WHERE作为过滤条件,DELETE和REMOVE分别用于删除节点和关系。还涉及到属性、标签、索引和过滤条件的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Cypher基础操作

Cypher是图形存储数据库Neo4j的查询语言,Cypher是通过模式匹配Neo4j数据库中的节点和关系,从而对数据库Neo4j中的节点和关系进行一系列的相关操作。

下面,通过一张表来介绍一下常用的Neo4j操作命令及相关说明,具体如表所示。

操作命令相关说明
CREATE创建节点、关系
MATCH查找所有符合给定模式的节点、关系以及属性数据
RETURN返回查询结果
WHERE过滤条件,筛选出符合条件的数据
DELETE永久删除节点和关系
REMOVE删除节点的属性

增-CREATE命令

语法

使用CREATE命令创建节点、关系,具体语法如下:

# 创建带有标签的节点
CREATE (<node-name>:<label-name>)
# 创建带有标签、属性的节点
CREATE (<node-name>:<label-name>{<property-name>:<property-value>})
# 创建带有标签的关系
CREATE (<node1-name>:<label1-name>)-[(<relationship-name>:
	<relationship-label-name>)] ->(<node2-name>:<label2-name>)

上述语法中,CREATE是创建节点、关系的命令;

  • <node-name>表示节点名称,Neo4j使用此名称将该节点的详细信息存储在Database.As中,用作Neo4j数据库管理(注:不能使用节点名称来访问节点的详细信息);
  • <label-name>表示标签名称,是内部节点名称的别名(注:可使用标签名称访问节点的详细信息);
  • <property-name>表示属性名;
  • < property-value >表示属性值;
  • <relationship-name>表示关系;
  • <relationship-label-name>表示关系的标签。

案例练习

我们演示创建一个节点p,其中标签为Person、属性分别为“name、age、hobby”、属性值分别为“张三、18、swimming”,具体如下:

$ create (p:Person{name:'张三',age:18,hobby:'swimming'})

执行上述命令后,Web UI界面的控制台返回“Added 1 label, created 1 node, set 3 properties, completed after 15 ms.”信息,说明我们新增一个标签、创建一个节点,并设置了三个属性。

在这里插入图片描述

下面,我们演示创建标签为Likes的关系friend,其中起始节点为Jac、属性name为Jack,结束节点为Emm、属性name为Emma,具体如下:

$ create (Jac:Person{name:'Jack'})-[friend:Likes]->(Emma:Person{name:'Emma'})

执行上述命令后,Web UI界面的控制台返回“Added 2 labels, created 2 nodes, set 2 properties, created 1 relationship, completed after 3 ms.”信息,说明我们新增两个标签、创建两个节点、设置两个属性、创建一个关系(注意:标签Person是节点的标签;标签Likes是关系的标签)。

在这里插入图片描述

查看图示数据

在这里插入图片描述

在这里插入图片描述

1.match命令

语法

使用MATCH命令查找所有符合给定模式的节点、关系以及属性数据,具体语法如下:

MATCH (<node-name>:<label-name>)

上述语法中,MATCH用于查找所有符合给定模式的节点、关系以及属性数据的命令;<node-name>表示节点名称;<label-name>表示标签名称。

案例练习

演示查找数据库中标签为Person节点p的详细信息,具体如下:

$ match (p:Person)

在这里插入图片描述

从图中可看出是语法错误,若想要使用MATCH命令,则需要与RETURN命令或更新命令结合使用。

2.RETURN命令

语法

使用RETURN命令返回查询结果,具体语法如下:

RETURN (<node-name>:<property-name>)

上述语法中,RETURN是用于返回查询结果的命令;<node-name>表示节点名称;< property -name>表示属性名。

案例练习

下面,我们演示返回属性为age的节点p的所有信息,具体如下:

$ return p.age

执行上述命令后,查看Web UI界面控制台的返回结果,具体如图所示。

在这里插入图片描述

从图中可看出是语法错误,若想要使用RETURN命令,则需要与METCH命令或CREATE命令结合使用。

查询案例练习(正确版)

题目1:我们演示查询数据库中节点p的详细信息,具体如下:

$ match (p:Person) return p.name,p.age,p.hobby

在这里插入图片描述

若想要使用RETURN命令,则需要与METCH命令或CREATE命令结合使用。

题目2:我们演示查询数据库中所有节点的详细信息,具体如下:

$ match (n) return n

在这里插入图片描述

如果我们要按照某种条件查询呢?–WHERE命令

3.WHERE命令

语法

使用WHERE命令查询符合条件的数据,具体语法如下:

WHERE <condition>

上述语法中,WHERE是用于查询符合条件的数据命令,该命令需要与MATCH命令和RETURN命令结合使用;<condition>表示查询的条件。

案例练习

演示查询符合条件“p.name=‘张三’”的节点详细信息,具体如下:

$ match (p:Person) where p.name='张三' return p

在这里插入图片描述

和sql很像!

1.-DELETE命令

语法

使用DELETE命令永久的删除节点或关系,具体语法如下:

# 删除节点
DELETE <node-name-list>
# 删除节点及关联的关系
DELETE <node1-name>,<node2-name>,<relationship-name>

上述语法中,DELETE是用于永久删除节点或关系的命令,该命令需要与MATCH命令结合使用,删除满足某个条件的节点;<node-name-list>表示节点名称列表;<relationship-name>表示关系名称。

案例练习

题目1:我们演示删除属性name为张三的节点,具体如下:

$ match (p{name:'Bob'}) delete p

在这里插入图片描述

执行“match (p:Person) return p”命令,然后查看Web UI界面控制台的返回结果,如图所示。

在这里插入图片描述

若是想要清空数据库中的节点或者关系,则可以执行“match (n) detach delete n”命令,但是该命令要慎用。

题目2:我们演示删除属性name分别为Jack和Emma的节点以及相关联的关系,具体如下:

$ match (Jac{name:'Jack'})-[friend]->(Emm{name:'Emma'}) delete Jac,Emm,friend

在这里插入图片描述

2.REMOVE命令

语法

使用REMOVE命令删除节点的属性,具体语法如下:

# 删除节点的属性
REMOVE <property-name-list>

上述语法中,REMOVE是用于删除节点的属性的命令,该命令需要与MATCH命令结合使用;<property-name-list>表示节点的属性名称列表。

案例练习

我们演示删除节点的属性hobby,由于上述小节中演示删除了数据库中的所有节点,导致数据库中无任何节点,因此,需要先执行创建节点的命令,然后再执行删除属性hobby的命令,具体如下:

$ create (p:Person{name:'Bob',age:22,hobby:'go dancing'})
$ match (p:Person) remove p.hobby

创建节点

在这里插入图片描述

删除属性

在这里插入图片描述

$match (n) detach delete n
#清空Neo4j数据库中的节点和关系数据

其他

先行工作

插入节点、关系

create (Jac:Person{name:'Jack',age:19})-[friend:Likes]->(Emma:Person{name:'Emma',age:17})-[girlfriend:Likes]->(Rose:Person{name:'Rose',age:17})

在这里插入图片描述

列访问、排序和分页

查询节点姓名、年龄并按照年龄排序返回前十个

SQL语句

SELECT p.name, p.age
FROM Person as p
ORDER BY p.age DESC
LIMIT 10;

Neo4j语句

MATCH (p:Person)
RETURN p.name, p.age
ORDER BY p.age DESC
LIMIT 10;

在这里插入图片描述

索引(Indexing)

如果要通过此节点标签和属性组合快速匹配,则可以在导入期间创建索引,这很有意义。

CREATE INDEX ON :Person(name);

过滤

Cypher中具有完整的集合支持,不仅包括IN运算符,还包括集合函数、谓词和转换。

查找名字在’Bob’,'Emma’中的节点

MATCH (p:Person)
WHERE p.name IN ['Bob','Emma']
RETURN p.name, p.age;

在这里插入图片描述

按多个数字和文本谓词过滤

现在,让我们尝试找到一些名字以“ B”开头的大于17岁的节点。

sql语句

SELECT p.name, p.age
FROM Person AS p
WHERE p.name LIKE 'B%' AND p.age > 17;

LIKE操作者通过所取代STARTS WITH(也有CONTAINSENDS WITH)所有其中的三个索引支持。

MATCH (p:Person)
WHERE p.name STARTS WITH "B" AND p.age > 17
RETURN p.name, p.age;

在这里插入图片描述

还可以使用正则表达式,例如p.name =~ "B."

想学习更多请参考:史上最全-Neo4j相关资源传送门 - 知乎 (zhihu.com)

neo4j api neo4j学习资料 neo4j教程neo4j官方API(官方各种API的文档整理).7z │ neo4j数据迁移--初探(一).htm │ neo4j笔记.docx │ neo4j错误码状态码.html │ └─01.neo4j学习博客汇总 │ index.html └─neo4j_cypherCypher(神奇的WITH).html │ cypher_index.html │ Cypher查询语言--Neo4j 综合(四) - divenswu - 博客园.html │ Cypher查询语言--Neo4j中的SQL - 爱上包子 - 博客园.html │ DETACH DELETE n 删除node n ,并删除所有与n相关的关系.html │ Neo4j - NOT IN query.html │ Neo4j CQL - (11)- REMOVE删除 DELETE.html │ Neo4j Cypher 复杂查询详解在之With - 何源浩的博客 - CSDN博客.html │ neo4j 中使用sparql查询.html │ Neo4j 中文社区,致力于 Neo4j 的技术研究。.html │ Neo4j 使用cypher语言进行查询 - MHL - 博客园.html │ Neo4j 第一篇:在Windows环境中安装Neo4j - 悦光阴 - 博客园.html │ Neo4j 第三篇:Cypher查询入门 - 悦光阴 - 博客园.html │ Neo4j 第二篇:图形数据库 - 悦光阴 - 博客园.html │ Neo4j 第五篇:批量更新数据 - 悦光阴 - 博客园.html │ Neo4j 第四篇:使用C更新和查询Neo4j - 悦光阴 - 博客园.html │ Neo4J(Cypher语句)初识.html │ Neo4J(Cypher语句)学习 - 赵晓雷的专栏 - CSDN博客.html │ Neo4j_事务&深度遍历.html │ neo4j中的分组查询.html │ Neo4jCypher学习总结.html │ NEO4J亿级数据导入导出以及数据更新 - 耶和华靠近伤心的人,拯救灵性痛悔的人 - CS.html │ Neo4j入门点滴(一):Cypher.html │ Neo4j入门点滴(三):用Cypher完善图.html │ Neo4j入门点滴(二):模式与模式匹配.html │ Neo4j入门点滴(五):Windows Shell for Cypher.html │ Neo4j入门点滴(四):Cypher查询优化.html │ Neo4J几种数据导入方式的效率对比 - 何源浩的博客 - CSDN博客.html │ Neo4j模糊查询及分页查询 - c1052981766的专栏 - CSDN博客.html │ neo4j笔记 - Neo4j 中文社区.html │ Neo4j语句 - zhuweiba_321的博客 - CSDN博客.html │ Neo4j语句 - 阿里云.html │ 【程裕强的专栏】大数据学习笔记(1.01^365=37.78,0.99^365=0.025.html │ 五岳之巅-Neo4j入门点滴-博文目录.html │ 关于Neo4jCypher批量更新和批量插入优化的5个建议 - 逆水行舟 - CSDN博.html │ 图数据库-Neo4j介绍与Cypher入门.html │ 图数据库Cypher语言 - 活的洒脱怪我咯的专栏 - CSDN博客.html │ 图数据库neo4j-jdbc的使用 - 活的洒脱怪我咯的专栏 - CSDN博客.html │ 数据分页处理系列之三:Neo4j图数据分页处理.html │ 暖暖动听.html │ 飘涯 - 简书.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小邹子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值