图数据库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实现页面的灵活跳转,其中路由配置是必不可少的,我们在做开发的时候,先需要了解知识点&…...
wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...
大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...
Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?
在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...
学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...
20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...
现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?
现有的 Redis 分布式锁库(如 Redisson)相比于开发者自己基于 Redis 命令(如 SETNX, EXPIRE, DEL)手动实现分布式锁,提供了巨大的便利性和健壮性。主要体现在以下几个方面: 原子性保证 (Atomicity)ÿ…...
Python 实现 Web 静态服务器(HTTP 协议)
目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1)下载安装包2)配置环境变量3)安装镜像4)node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1)使用 http-server2)详解 …...
