图数据库Neo4j学习二——cypher基本语法
1命名规范
- 名称应以字母字符开头,不以数字开头,名称不应包含符号,下划线除外
- 可以很长,最多65535( 2^16 - 1) 或65534字符,具体取决于 Neo4j 的版本
- 名称区分大小写。:PERSON和:Person是:person三个不同的标签,并且n和N是两个不同的变量。
- 前导和尾随空白字符将被自动删除。例如,
MATCH ( a ) RETURN a
相当于
MATCH (a) RETURN a
- 以下是推荐的命名约定:
| 类型 | 规范 | 案例 |
|---|---|---|
| 节点标签 | 驼峰式,以大写字符开头 | 正例 :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)
箭头
- –>:表示从一个节点指向另一个节点的有向关系。例如,(a) --> (b) 表示从节点 a 指向节点 b 的有向关系(一个横杠,一个箭头)
- <–:表示从一个节点指向另一个节点的相反方向的有向关系。例如,(a) <-- (b) 表示从节点 b 指向节点 a 的有向关系(一个横杠,一个箭头)
- –:表示表示两个节点之间没有方向性的关系,即无向关系。例如,(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的语法
相关文章:
图数据库Neo4j学习二——cypher基本语法
1命名规范 名称应以字母字符开头,不以数字开头,名称不应包含符号,下划线除外可以很长,最多65535( 2^16 - 1) 或65534字符,具体取决于 Neo4j 的版本名称区分大小写。:PERSON和:Person是:person三个不同的标签ÿ…...
ChatGPT:人工智能交互的未来之光
一、ChatGPT:开启自然语言交流新纪元 ChatGPT 是基于 GPT(生成式预训练)技术的最新版本,它采用深度学习模型,通过在大规模文本数据上的预训练来理解自然语言,并生成具有连贯性和合理性的回复。ChatGPT 是一…...
128最长连续数组
题目描述 最长连续序列 https://leetcode.cn/problems/longest-consecutive-sequence/class Solution {public:int longestConsecutive(vector<int>& nums) {unordered_set<int> st(...
redis 1
shell 1:安装1. 源码安装(CENTOS) 2.999:可能会出现得问题1. 编译出错 1:安装 1. 源码安装(CENTOS) 官方下载源码包 wget https://download.redis.io/redis-stable.tar.gz # 安装依赖 yum install gcc解压…...
vue+Element项目中v-for循环+表单验证
如果在Form 表单里有通过v-for动态生成,如何设置验证呢? <el-form ref"ruleFormRef" :model"ruleForm" status-icon :rules"rules" label-width"120px"class"demo-ruleForm" hide-required-aster…...
Day 66-68 主动学习之ALEC
代码: package dl;import java.io.FileReader; import java.util.*; import weka.core.Instances;/*** Active learning through density clustering.*/ public class Alec {/*** The whole dataset.*/Instances dataset;/*** The maximal number of queries that …...
local-path-provisioner与pvc本地磁盘挂载helm部署
1.helm拉取安装包 helm repo add containeroo https://charts.containeroo.ch helm pull containeroo/local-path-provisioner --version 0.0.19 tar -zxvf local-path-provisioner-0.0.19.tgz cd local-path-provisioner mv values.yaml values.yaml.back grep -v "#&qu…...
Visio/PPT/Matlab输出300dpi以上图片【满足标准投稿要求】
1. visio 遵照如下输出选项,另存为tif格式文件时,选择正确输出便是300dpi以上 2. matlab 文件选项选中导出设置,在渲染中选择dpi为600,导出图片即可,科研建议选择tif格式文件 3.ppt 打开注册表,winr键…...
科技UI图标的制作
科技UI图标的制作,效果图如下: 一、新建合成 1、新建合成,命名为合成1,参数设置如下: 2、新建纯色,命名为分形 二、添加分形杂色 1、添加分形杂色 为纯色层“分形”,添加分形杂色,…...
微信小程序将接口返回的文件流预览导出Excel文件并转发
把接口url替换就可以用了 exportExcel () {wx.request({url: importMyApply, //这个地方是你获取二进制流的接口地址method: POST,responseType: "arraybuffer", //特别注意的是此处是请求文件流必须加上的属性,不然你导出到手机上的时候打不开ÿ…...
windows 安装 mongodb 数据库
软件下载 访问官方的下载地址: https://www.mongodb.com/try/download/community ,然后选择对应的版本进行下载 下载好了之后双击进行安装 软件安装 1、点击 next 点击下一步 2、勾选接受协议,点击 next 3、第三页有两个选项&#x…...
业务不打烊:解决软件系统升级痛点的新方法
数字化时代,随着用户对产品性能和功能要求的不断提升,应用服务升级成了企业保持竞争力的关键之一。然而,传统的应用服务升级往往会给用户带来不必要的中断和不便,这种“伤筋动骨”的升级方式已经无法满足日益增长的用户需求&#…...
csdn新星计划vue3+ts+antd赛道——利用inscode搭建vue3(ts)+antd前端模板
文章目录 ⭐前言⭐利用inscode免费开放资源💖 在inscode搭建vue3tsant项目💖 调整配置💖 antd 国际化配置💖 用户store💖 路由权限💖 预览 ⭐结束 ⭐前言 大家好,我是yma16,本文分享…...
通过 CSS 的样式实现语音发送动效类似声音震动的效果
实现效果:一般用于发送语音的时候,出现动画效果 //模版部分 <view class"musical-scale"><view class"scale"><view class"em" v-for"(item,index) in 15" :key"index"></view…...
【C#】.Net Framework框架使用JWT
2023年,第31周,第2篇文章。给自己一个目标,然后坚持总会有收货,不信你试试! 本篇文章主要简单讲讲,.Net Framework框架下使用JWT的代码例子,以及他们的基本概念。 2002年微软发布了.net framewo…...
SQL高级教程第三章
SQL CREATE DATABASE 语句 CREATE DATABASE 语句 CREATE DATABASE 用于创建数据库。 SQL CREATE DATABASE 语法 CREATE DATABASE database_name SQL CREATE DATABASE 实例 现在我们希望创建一个名为 "my_db" 的数据库。 我们使用下面的 CREATE DATABASE 语句&…...
vue 3.0 下载本地pdf文件
使用a标签,把pdf文件放到public文件夹下面 <el-form label-width"160px"> <el-form-item label"使用手册"> <div class"form-item-static"> <a href"/使用手册.pdf" target"_blank" class"link&q…...
平板用的触控笔什么牌子好?ipad第三方电容笔推荐
随着技术的发展,出现了各种各样的平板电容笔。一支好的电容笔,不但可以极大地提升我们的工作效率,还可以极大地提升我们的学习效果。平替的电容笔,无论是在技术方面,还是在质量方面,都还有很大的提升空间&a…...
【Unity2D】相机移动以及设置相机边界
添加相机 添加相机时,首先需要在unity中添加 Cinemachine 包 第一次使用这个包时,需要在Package Manager中搜索并安装 安装Camera Mechine包后,添加2D Camera 设置跟随对象为Ruby (从Hierarchy中将Ruby拖动到Follow中࿰…...
和chatgpt学架构04-路由开发
目录 1 什么是路由2 如何设置路由2.1 安装依赖2.2 创建路由文件2.3 创建首页2.4 编写HomePage2.5 更新路由配置2.6 让路由生效 3 测试总结 要想使用vue实现页面的灵活跳转,其中路由配置是必不可少的,我们在做开发的时候,先需要了解知识点&…...
手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
React Native 导航系统实战(React Navigation)
导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...
Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...
转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...
项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...
人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式
今天是关于AI如何在教学中增强学生的学习体验,我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育,这并非炒作,而是已经发生的巨大变革。教育机构和教育者不能忽视它,试图简单地禁止学生使…...
tomcat入门
1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效,稳定,易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...
「全栈技术解析」推客小程序系统开发:从架构设计到裂变增长的完整解决方案
在移动互联网营销竞争白热化的当下,推客小程序系统凭借其裂变传播、精准营销等特性,成为企业抢占市场的利器。本文将深度解析推客小程序系统开发的核心技术与实现路径,助力开发者打造具有市场竞争力的营销工具。 一、系统核心功能架构&…...
