图数据库Neo4j学习二——cypher基本语法

1命名规范

  1. 名称应以字母字符开头,不以数字开头,名称不应包含符号,下划线除外
  2. 可以很长,最多65535( 2^16 - 1) 或65534字符,具体取决于 Neo4j 的版本
  3. 名称区分大小写。:PERSON和:Person是:person三个不同的标签,并且n和N是两个不同的变量。
  4. 前导和尾随空白字符将被自动删除。例如,
MATCH (  a  ) RETURN a
相当于
MATCH (a) RETURN a
  1. 以下是推荐的命名约定:
类型规范案例
节点标签驼峰式,以大写字符开头正例 :VehicleOwner 反例 :vehicle_owner
关系类型大写,使用下划线分隔单词正例 :OWNS_VEHICLE 反例 ::ownsVehicle

2 数据库操作

在关系型数据库mysql中,我们可以通过show databases来查看我们有哪些数据库,如下图所示
在这里插入图片描述
在图数据库neo4j中,我们想要查看有哪些数据库,他的查看语句于也是show databases,这点在语法规则上和mysql一样的。

2.1查询数据库

show databases

在这里插入图片描述
neo4j:系统默认的图数据库
system:系统库

2.2切换数据库

语法规则::use 数据库名

//切换到系统库
:use system

//切换到neo4j库
:use neo4j

下图表示,当前在system这个数据库下,我们现在要切换到neo4j这个数据库下
在这里插入图片描述

2.3创建数据库

//企业版才支持命令创建数据库
create database neo4j_hutao

社区版使用命令创建将会报如下错误
在这里插入图片描述

3节点操作

3.1创建节点

语法规则:CREATE (节点名称)

//(1)创建一个节点n
CREATE (n)

//(2)创建两个节点n和m
CREATE (n), (m)

//(3)创建一个节点n,并且为这个节点设置标签为User
CREATE (n:User)

//(4)创建一个节点n,设置标签,并且为这个节点添加属性
CREATE (n:User{userName:'胡涛', userAge:25, userSex:'男'}),

//(5)创建多个节点n,设置标签,并且为这个节点添加属性
CREATE (n1:User{userName:'胡涛1', userAge:25, userSex:'男'}),
    (n2:User{userName:'胡涛2', userAge:26, userSex:'男'})

如下,是我们使用上述的第五个命令创建的两个节点,胡涛1和胡涛2

在这里插入图片描述

3.2查询节点

当我们创建了节点以后,怎么查看我们的节点嗯?
语法规则:MATCH (节点)RETURN 节点

//(1)查找所有的节点
MATCH(n) RETURN n

在这里插入图片描述

//(2)查找指定标签(User)的节点,同理这里我们可以把User换成其他节点的标签
MATCH(n:User) RETURN n

在这里插入图片描述

//(3)查找某个指定属性的节点,即根据节点的属性进行查询
MATCH(n:User) WHERE n.userName = '胡涛1' RETURN n
或者
MATCH(n:User{userName:'胡涛1'}) RETURN n

这两种方式有什么区别嗯?
MATCH ( 节点 ) WHERE 节点属性
在这里插入图片描述
查询使用 WHERE n.userName = '胡涛1’子句来指定过滤条件,该条件要求节点的“userName”属性等于“胡涛1”。这个查询将遍历所有的“User”节点,并将符合条件的节点返回。这个查询可以使用索引来提高查询性能。
MATCH ( 节点 { 节点属性 } )
在这里插入图片描述
这个查询使用了节点属性的内联语法,“{userName:‘胡涛1’}”,来明确指定要匹配的属性和属性值。这个查询将直接在索引中查找名称为“胡涛1”的用户节点,并将其返回。这个查询通常比第一个查询更快,因为它直接利用了索引。
查询小技巧
如果要查询节点的某个属性等于特定值,最好使用内联语法来指定属性和属性值,这将利用索引并且可以更快地返回结果。
如果您需要更复杂的过滤条件,例如使用大于、小于、不等于等运算符,或者需要使用多个属性来过滤节点,则可以使用“WHERE”子句来构建查询。

//(4)返回节点的属性
MATCH(n:User) WHERE n.userName = '胡涛1' RETURN n.userName,n.userAge

当我查询节点的属性时,此时返回给我们的就不在是图,而是一个列表信息了
在这里插入图片描述

某些查询,我们可能无法使用节点属性的内敛语法,因此可能需要我们构造一些复杂的where子语句,或者使用特定的方法,此处不在展开,只介绍一些入门的示例。

//(5) 通匹符 * 查询 User节点中,userName带某个关键字的,例如名字中包含《涛》
match (n:User) where n.userName =~'.*涛.*' return n

//(6) starts with查询某个关键字开头的,例如名字中是《胡》开头的,同理还有其他方法 ends with /contains
match (n:User) where n.userName starts with '胡' return n

在这里插入图片描述
在这里插入图片描述

3.3删除节点

如果你上面已经学会了,查询节点,那么其实删除节点你也学会了
删除语法和查看语法一样,区别:查看是RETURN,删除是DELETE

将我们上面的查询语句中的 RETURN换成DELETE即可。
//(1)删除所有的节点
MATCH(n) DELETE n

//(2)删除指定标签中,某个指定属性的节点
MATCH(n:User{userName:'胡涛1'}) DELETE n

在这里插入图片描述

3.4修改节点

语法同样和查询语句类似,因为无论查询、删除、修改,我们都是用 match来匹配的
查询:match ( 节点) return 节点
删除:match ( 节点) delete 节点
修改:match ( 节点) set 节点的属性

//将胡涛1的年龄修改为18岁,并返回修改结果
MATCH (u:User {userName: '胡涛1'}) SET u.userAge = 18 RETURN u

在这里插入图片描述

4关系操作

4.1创建关系

准备工作:提前创建好两个不同节点,这两个节点,可以是同标签,也可以不同标签

//准备User节点
CREATE (n1:User{userName:'小跟班', userAge:28, userSex:'男'}),
(n2:User{userName:'西子', userAge:28, userSex:'女'}),
(n3:User{userName:'念念', userAge:28}),
(n4:User{userName:'老司')

在这里插入图片描述

语法规则CREATE (节点1) - [:关系] 箭头 (节点2)
箭头

  1. –>:表示从一个节点指向另一个节点的有向关系。例如,(a) --> (b) 表示从节点 a 指向节点 b 的有向关系(一个横杠,一个箭头)
  2. <–:表示从一个节点指向另一个节点的相反方向的有向关系。例如,(a) <-- (b) 表示从节点 b 指向节点 a 的有向关系(一个横杠,一个箭头)
  3. –:表示表示两个节点之间没有方向性的关系,即无向关系。例如,(a) – (b) 表示节点 a 和节点 b 之间的无向关系(两个横杆)

注意:Neo4J中,关系的创建不能是无向的,但是查询和使用可以

CREATE (节点1) - [:关系] -> (节点2)

//(1)创建a指向b的关系
MATCH (a:User{userName:'西子'}), (b:User{userName:'小跟班'}) CREATE (a)-[:老公]->(b)

这里我们直接创建了一个没有任何属性的关系,这个关系就叫做老公,效果如下所示
在这里插入图片描述
CREATE (节点1) - [:关系{属性}] -> (节点2)

//(2)创建a指向b的关系,并且包含属性
MATCH (a:User{userName:'西子'}), (b:User{userName:'念念'}) CREATE (a)-[:RELATION{name:'闺蜜'}]->(b)

这里我们创建一个关系,该关系叫做RELATION,并且有个属性name,name为闺蜜
在这里插入图片描述
CREATE (节点1) <- [:关系{属性}] - (节点2)

//(4)创建两个关系:(a->b)  (c<-c)
MATCH (a:User{userName:'西子'}), (b:User{userName:'老司'}), (c:User{userName:'念念'})
CREATE (a)-[:RELATION{name:'哥们'}]->(b),(c)<-[:RELATION{name:'媳妇'}]-(b)

最后我们得到如下这么一个关系
在这里插入图片描述
为了方便查看,我们选择RELATION关系呈现时,选择name属性,同样对于User节点,我们也可以选择需要展示的属性,最终效果如下所示
在这里插入图片描述

4.2查询关系

语法规则:MATCH (节点1) - [:关系] -> (节点2)

//(1)查看所有关系
MATCH ()-[r]-() RETURN DISTINCT r

在这里插入图片描述

//(2)查询指定的关系类型,以及指定的关系属性
MATCH ()-[r:RELATION{name:'媳妇'}]-() RETURN DISTINCT r

在这里插入图片描述

//(3)查询指定类型的关系的节点
MATCH (n1)-[r:RELATION]-(n2) RETURN n1,n2

前面两个查询,我们都是return关系,在这里我们return的节点n1和n2,我们不难发现,在这里我们返回的节点-关系-节点
当我们只返回关系时,只有关系的文本或者表格
当我们只返回节点时,是可以把关系一并返回的,并且可以构成一个图

在这里插入图片描述

//(4)查询指定类型的关系的节点的属性和节点
MATCH (n1)-[r:RELATION]-(n2) RETURN n1.userName,n2

这里,节点1我们返回用户名,节点2整个返回,依然可以看到,还能形成一个图。
在这里插入图片描述
查看table,我们可以发现,节点1确实只返回了用户名,而节点2返回了所有的属性,但是,我们也并没有找到关于n1和n2之间的关系,但是n1和n2确实在关系拓扑图中能看到。
在这里插入图片描述

这是因为Neo4j 是一个图数据库,它的数据模型是基于节点和关系的图形结构,其中节点表示实体,关系表示实体之间的连接。当执行一个查询并返回节点时,Neo4j 将返回所有与查询结果相关的节点,并将这些节点按照它们之间的关系组织成一个图形结构。
即使在查询中没有返回关系,Neo4j 仍然可以根据节点之间的关系来构建图形结构。这是因为关系在 Neo4j 中是由节点来表示的,每个关系都包含指向起始节点和结束节点的引用。因此,当返回节点时,Neo4j 可以通过这些节点之间的关系引用来构建图形结构。

需要注意的是单纯使用cypher查询的话,是不会构成关系图的,构成这个关系图拓扑是Neo4j Browser这个工具为我们画的

4.3删除关系

删除语法和查看语法类似,区别在查看是RETURN,删除是DELETE
语法规则:MATCH (节点1) - [r:关系] -> (节点2) DELETE r

//(1)删除查询出来的关系r
MATCH (f:User{userName:'老司'})
-[r:RELATION{name:'媳妇'}]-
(s:User{userName:'念念'}) 
DELETE r

//(2)删除所有关系r
MATCH ()-[r]-() DELETE r

在这里插入图片描述
删除老司和念念之间的关系后,在查看,就发现他们两个之间关系没了
在这里插入图片描述

4.4修改关系

//(1)我们把删除掉的关系创建回来
MATCH (a:User{userName:'念念'}), (b:User{userName:'老司'})
CREATE (a)<-[:RELATION{name:'媳妇'}]-(b)

//(2)接着我们将关系中的name属性,改成小心肝
MATCH (a:User{userName:'念念'})-[r:RELATION{name:'媳妇'}]-(b:User{userName:'老司'}) set r.name='小心肝'
return a,b

在这里插入图片描述
至此,相信你对neo4j和cypher的基本使用有了一定的认识。接下来我们会详细的学习cypher的语法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/45812.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Redis在云服务器上的安装与客户端连接配置

文章目录 Redis1.Redis的安装2.设置远程连接3.客户端连接3.1 客户端下载 Redis 1.Redis的安装 yum 安装 redis&#xff0c;使用以下命令&#xff0c;直接将 redis 安装到 linux 服务器&#xff1a; yum -y install redis 启动 redis使用以下命令&#xff0c;以后台运行方式启…

Unity中的MonoBehaviour 及其生命周期

关于MonoBehaviour 类的类图的详细介绍&#xff1a; Unity中的MonoBehaviour脚本-基础知识和继承关系_拂面清风三点水的博客-CSDN博客 关于MonoBehaviour 类的生命周期&#xff1a; Unity - Manual: Order of execution for event functions&#xff1a; Awake&#xff1a;当…

Spring 中一个少见的引介增强 IntroductionAdvisor

我们平时做 AOP 开发的时候&#xff0c;基本上都是增强某一个方法&#xff0c;在某一个方法执行之前或者执行之后做一些事情&#xff0c;这种叫做 PointcutAdvisor&#xff0c;实际上&#xff0c;Spring 中的 Advisor 大致可以分为两种类型&#xff0c;除了 PointcutAdvisor 之…

学习笔记--TCP/IP协议

TCP/IP协议 TCP (Transmission Control Protocol)传输控制协议&#xff0c;传输层协议。 一、协议的分层 ISO网络层分为7层 二、分层的作用 具体通信情况&#xff1a; 三、报文传输 三次握手连接&#xff0c;四次挥手释放 参考链接&#xff1a; https://zhuanlan.zhih…

Java网络编程(一)基本网络概念

一、网络 网络(network) 是几乎可以实时相互发送和接收数据的计算机和其他设备的集合。网络通常用线缆连接&#xff0c;数据位转换为电磁波&#xff0c;通过线缆移动。不过&#xff0c;无线网络会通过无线电波传输数据&#xff0c;许多长距离的传输现在会用通过玻璃纤维发送可见…

关于运算符你真的了解吗?

目录 前言 1. 基本四则运算符&#xff1a;加减乘除模( - * / %) 2. 增量运算符 - * % 3.自增/自减运算符 -- 4. 关系运算符 ! < > < > 5. 逻辑运算符&& || !和& | 5.1 && || ! 5.2 & | 6.位运算符& | ~ ^ 7. 移位运算&l…

Windows10 下 Neo4j1.5.8 安装教程

前言 Neo4j 是一个高性能的、NOSQL 图形数据库&#xff0c;它将结构化数据存储在网络上而不是表中。基于磁盘的、具备完全的事务特性的 Java 持久化引擎&#xff0c;这里就不把他和常用关系型数据库做对比了。因为篇幅有限&#xff0c;我这里也是第一次使用&#xff0c;所以以…

“内卷之王”雪糕品牌,夏日营销如何花式出招?小红书数据分析!

酷夏已至&#xff0c;冰淇淋行业号称营销“内卷之王”&#xff0c;品牌们开始各显身手&#xff0c;掀起2023年的夏日冰淇淋大战。今年出现了哪些新的内容趋势&#xff1f;雪糕行业有哪些品牌营销趋势值得关注&#xff1f;笔者将通过小红书数据分析与内容洞察&#xff0c;带你一…

通过ETL自动化同步飞书数据到本地数仓

一、飞书数据同步到数据库需求 使用飞书的企业都有将飞书的数据自动同步到本地数据库、数仓以及其他业务系统表的需求&#xff0c;主要是为了实现飞书的数据与业务系统进行流程拉通或数据分析时使用&#xff0c;以下是一些具体的同步场景示例&#xff1a; 组织架构同步&#…

一个简单的 Android 版本目录(Version catalog)实现指南

一个简单的 Android 版本目录实现指南 使用 TOML 格式 在本文中&#xff0c;我们将探讨版本目录以及如何实现它。 版本目录 Gradle 版本目录使您能够以可扩展的方式添加和维护依赖项和插件。因此&#xff0c;不必在各个构建文件中硬编码依赖项名称和版本&#xff0c;而是在目…

STM32 中断优先级管理(一)

STM32 NVIC 中断优先级管理 CM3内核支持256个中断&#xff0c;其中包含了16个内核中断和240个外部中断&#xff0c;并且有256级的可编程中断设置。 但STM32并没有使用CM3内核的全部东西&#xff0c;只用了一部分。 STM32有84个中断&#xff0c;包括16个内核中断和68个可屏蔽…

从零开始学习CTF

前言 CTF简介 中文一般译作夺旗赛&#xff0c;在网络安全领域中指的是网络安全技术人员之间进行技术竞技的一种比赛形式 CTF起源于1996年DEFCON全球黑客大会&#xff0c;以代替之前黑客们通过互相发起真实攻击进行技术比拼的方式 竞赛模式 解题模式&#xff1a; 在解题模式…

使用PHP实现登录注册功能的完整指南

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌&#xff0c;2023年6月csdn上海赛道top4。多年电商行业从业经验&#xff0c;对系统架构&#xff0c;数据分析处理等大规模应用场景有丰富经验。 &#x1f3c6;本文已收录于PHP专栏&#xff1a;PHP…

如何高效进行客户管理?这几点很重要

管理客户是任何业务的重要组成部分。通过建立良好的关系&#xff0c;提供良好的客户服务并满足客户的需求&#xff0c;可以帮助吸引新客户并保留现有客户&#xff0c;这对于业务的长期成功非常重要。 因此&#xff0c;本篇文章将为您介绍如何做客户管理&#xff0c;客户管理的…

Jmeter接口测试工具的一些使用小技巧

如何使用英文界面的JMeter Jmeter启动时会自动判断操作系统的locale 并选择合适的语言启动&#xff0c;所以&#xff0c;我们启动jmeter后&#xff0c;其会出现一个倍感亲切的中文界面。但由于jmeter本身的汉化工作做得不好&#xff0c;你会看到有未被汉化的选项及元件的参数。…

华为认证HCIA-HCIP-HCIEdatacom题库解析+机构视频+实验

题库包含有2023年最新HCIA-datacom题库、HCIP-datacom题库&#xff0c;HCIE-datacom题库&#xff0c; 云计算HCIA&#xff0c;HCIP题库&#xff0c;云服务HCIA&#xff0c;HCIP题库&#xff0c;华为存储HCIP题库&#xff0c;华为安全HCIP题库 &#xff0c;学习笔记&#xff0c;…

卡尔曼滤波算法原理及示例

例程:物体做匀速运动每秒运动1m,观测器观测方差为1m

华为数通HCIP-ISIS原理与配置

IS-IS的基本概念 isis&#xff08;中间系统到中间路由协议&#xff09; 链路状态路由协议、IGP、无类路由协议&#xff1b; IS-IS是一种链路状态路由协议&#xff0c;IS-IS与OSPF在许多方面非常相似:运行IS-IS协议的直连设备之间通过发送Hello报文发现彼此&#xff0c;然后建…

《人工智能安全》课程总体结构

1 课程内容 人工智能安全观&#xff1a;人工智能安全问题、安全属性、技术体系等基本问题进行了归纳整理。人工智能安全的主要数据处理方法&#xff0c;即非平衡数据分类、噪声数据处理和小样本学习。人工智能技术赋能网络空间安全攻击与防御&#xff1a;三个典型实例及攻击图…

2-vi和vim的使用

vi和vim的区别 vi 是linux系统中内置的文本编辑器vim具有程序编辑能力 vi和vim常用的三种模式 正常模式 使用vim打开一个文件&#xff0c;就默认进入正常模式可以使用方向键【上下左右】来移动光标可以使用【删除字符/删除整行】来处理文件内容也可以使用【复制/粘贴】快捷键…