图数据库Neo4j学习三——cypher语法总结

news2024/9/25 17:15:39

1MATCH

1.1作用

MATCH是Cypher查询语言中用于从图数据库中检索数据的关键字。它的作用是在图中查找满足指定条件的节点和边,并返回这些节点和边的属性信息。
在MATCH语句中,通过节点标签和边类型来限定查找范围,然后通过WHERE语句来筛选符合条件的节点和边。最后,通过RETURN语句返回查询结果中的属性信息。

1.2语法规则

MATCH (node1:Label1)-[edge:RELATIONSHIP]->(node2:Label2)
WHERE <condition>
RETURN <expression>
  1. Label1/ Label2表示节点的标签
  2. node1和node2是节点变量,可以用来引用节点的属性信息
  3. RELATIONSHIP表示边的类型
  4. edge是边变量,可以用来引用边的属性信息
  5. 是可选的查询条件,可以用来筛选满足条件的节点和边
  6. 是要返回的属性信息

在MATCH语句中,通过节点标签和边类型来限定查找范围,然后通过条件语句来筛选符合条件的节点和边。最后,通过RETURN语句返回查询结果中的属性信息。

1.3查询示例

假设我们有一个拥有Person和City两种标签的图数据库,其中Person节点有name、age和gender属性,City节点有name和population属性,它们之间的关系是Person节点居住在City节点中。我们要查找居住在人口大于100万的城市中女性的姓名和年龄。

MATCH (person:Person)-[:LIVES_IN]->(city:City)
WHERE city.population > 1000000 AND person.gender = 'F'
RETURN person.name, person.age

2OPTIONAL MATCH

2.1作用

在Cypher中,OPTIONAL MATCH用于查找可能匹配但不是必须的模式。这意味着,如果匹配失败或者找不到匹配的节点、关系或路径,OPTIONAL MATCH语句不会导致整个查询失败。相反,它将返回一个空结果。

2.2语法规则

OPTIONAL MATCH (node1:Label1)-[edge:RELATIONSHIP]->(node2:Label2)

2.3查询示例

//查找节点及其关系,如果关系不存在则返回空结果
MATCH (a:User)
OPTIONAL MATCH (a)-[r:RELATION]->(b)
RETURN a, r, b

例如如下所示,我们当我们使用OPTIONAL MATCH (a)-[r:RELATION]->(b) ,查询时,由于这里的RELATION是可选的匹配,因此,该关系就是,有就返回,没有就返回null,但是对于 (a:User) 则会全量返回,而对于 (b) 而言,因为b节点是通过关系查找的,因此如果关系不存在,那么这里的b节点一样也返回null。
在这里插入图片描述
提问:明明只有西子->念念、西子->老司、老司->念念这三个关系为RELATION,为什么上图中把西子->小跟班的老公关系也带出来?

这里其实不是RELATION查询出来的,而是MATCH (a:User)中,包含了西子,和小跟班,西子的老公是小跟班,然后用Neo4j来默认渲染上的拓扑节点。

我们实际查看数据的时候,可以看到返回的table中,西子和小跟班之间是没有找到关系,这是因为西子和小跟班之间的关系是老公,不是RELATION,所以用RELATION查询,是没有关系的,但是Neo4j在绘制拓扑图的时候会按照老公的关系,进行绘制。

这里我们做两个试验查询即可

//查询西子和小跟班,并没有查询他们的关系,返回的实际数据中,也没有两人的关系,但是确实neo4j绘制了拓扑图
MATCH (a:User{userName:'小跟班'}),(b:User{userName:'西子'}) RETURN a,b

在这里插入图片描述
在这里插入图片描述
而小跟班和念念没有建立关系,因此把西子改成念念以后,他们就变成两个孤立的点
在这里插入图片描述
因此得出一个结论,当neo4j返回的节点A和B,如果节点A和B本身具有关系,那么neo4j会自动把关系给补上

这里我们返回名称,用表格的关系来查看,就能看到如下所示,没有的值则是null,我们可以使用**type()**这个方法来查看关系类型

//查找节点及其关系,如果关系不存在则返回空结果
MATCH (a:User)
OPTIONAL MATCH (a)-[r:RELATION]->(b)
RETURN a.userName,type(r),r.nane, b.userName

在这里插入图片描述

2.4对比MATCH

OPTIONAL MATCH查询比MATCH多了一个OPTIONAL,那么我们把OPTIONAL删除掉来看看效果

//查找节点及其关系,如果关系不存在则返回空结果
MATCH (a:User) OPTIONAL MATCH (a)-[r:RELATION]->(b) RETURN a, r, b

//如果我们把OPTIONAL去掉,那么会发生什么效果?
MATCH (a:User) MATCH (a)-[r:RELATION]->(b) RETURN a, r, b

不难发现,只保留了RELATION关系的节点,没有RELATION关系的节点都没了
在这里插入图片描述
同样的查看表格数据,我们发现,确实只有RELATION,也就是有就有,没有就没有,没有就不返回了,由于没有返回节点,因此neo4j也没办法使用默认关系来绘制关系图

MATCH (a:User) MATCH (a)-[r:RELATION]->(b) RETURN a.userName,type(r),r.nane, b.userName

在这里插入图片描述

3RETURN

3.1作用

在Neo4j中使用Cypher查询语言,RETURN 关键字用于指定查询的结果集。查询的结果集可以是节点、关系、属性或一组这些元素的组合。

查询中的 RETURN 子句指定了查询返回的结果,可以返回节点、关系、属性、子图等。例如,可以使用 RETURN 显示特定节点的属性,也可以使用 RETURN 显示已匹配的节点和关系的子图。

使用 RETURN 子句的查询会返回一个结果集,这个结果集可以在Neo4j中进行进一步的处理,如排序、筛选、分组等。同时,RETURN 子句也可以与其他Cypher子句一起使用,如 MATCH 和 WHERE 等,以实现更复杂的查询操作。

3.2语法规则

RETURN <expression>
显示所有节点
MATCH (n) RETURN n

显示特定节点和它的标签
MATCH (n:Label) RETURN n, labels(n)

显示节点、关系和属性
MATCH (n)-[r]->(m) RETURN n, r, m

返回最短路径
MATCH p=shortestPath((a)-[r:REL_TYPE*]->(b)) RETURN p

显示节点计数
MATCH (n) RETURN count(n)

在Cypher中,RETURN 还允许你选择使用聚合函数,如 COUNT,SUM,MIN,MAX 和 AVG 等。

4WITH

4.1作用

在Neo4j中,WITH 关键字用于将查询结果传递到下一个查询中,并将其作为输入数据。WITH 关键字可以将查询分为多个部分,并允许在这些部分之间传递数据。

4.2使用场景

WITH 子句通常用于以下几种情况:
1为表达式求值结果引入新变量

MATCH (george {name: 'George'})<--(otherPerson)
WITH otherPerson, toUpper(otherPerson.name) AS upperCaseName
WHERE upperCaseName STARTS WITH 'C'
RETURN otherPerson.name

2查询分割:您可以使用WITH子句将一个查询分成几个部分,以便执行更复杂的操作。
例如,以下查询将找到所有与Alice有共同朋友的人,然后计算每个人有多少个共同朋友

MATCH (alice:Person {name: 'Alice'})-[:FRIEND]->(commonFriend:Person)<-[:FRIEND]-(person:Person)
WITH person, count(commonFriend) as numCommonFriends
RETURN person.name, numCommonFriends

3聚合:WITH子句还可以用于聚合数据。
例如,以下查询将计算每个标签的出现次数:

MATCH (n)
UNWIND labels(n) as label
WITH label, count(*) as count
RETURN label, count

在WITH子句中,还可以使用DISTINCT关键字来确保结果集中没有重复项,以及ORDER BY子句来对结果集进行排序

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue+leaflet笔记之地图量测

vueleaflet笔记之地图量测 文章目录 vueleaflet笔记之地图量测开发环境代码简介插件简介与安装使用简介图形量测动态量测 详细源码(Vue3) 本文介绍了Web端使用Leaflet开发库进行距离量测的一种方法 (底图来源:天地图)&#xff0c;结合leaflet-measure-path插件能够快速的实现地…

人工智能术语翻译(四)

文章目录 摘要MNOP 摘要 人工智能术语翻译第四部分&#xff0c;包括I、J、K、L开头的词汇&#xff01; M 英文术语中文翻译常用缩写备注Machine Learning Model机器学习模型Machine Learning机器学习ML机器学习Machine Translation机器翻译MTMacro Average宏平均Macro-F1宏…

高忆管理:msci成分股什么意思?

MSCI&#xff08;Morgan Stanley Capital International&#xff09;是全球领先的金融指数提供商之一&#xff0c;其指数被广泛应用于全球资本商场的出资和危险办理。而MSCI成分股&#xff0c;是指MSCI指数中所包括的股票。那么&#xff0c;MSCI成分股具体意义是什么呢&#xf…

CTFshow-pwn入门-pwn67(nop sled空操作雪橇)

前言 本人由于今年考研可能更新的特别慢&#xff0c;不能把ctfshow的pwn入门题目的wp一一都写出来了&#xff0c;时间比较紧啊&#xff0c;只能做高数做累的时候做做pwn写写wp了&#xff0c;当然我之后只挑典型意义的题目写wp了&#xff0c;其余的题目就留到12月底考完之后再写…

Sugar BI : AI 问答,即问即答

AI 探索功能提供给所有用户自由探索和分析数据模型的能力。在 AI 探索页中&#xff0c;有授权的用户可以通过 AI 问答和字段拖拽两种方式对数据模型进行探索。 下面&#xff0c;我们将为大家详细指导如何使用 AI 探索 新建 AI 探索页 空间管理员可以在报表管理中新建「AI 探索…

短视频矩阵系统源码---开发技术源码能力

短视频矩阵系统开发涉及到多个领域的技术&#xff0c;包括视频编解码技术、大数据处理技术、音视频传输技术、电子商务及支付技术等。因此&#xff0c;短视频矩阵系统开发人员需要具备扎实的计算机基础知识、出色的编程能力、熟练掌握多种开发工具和框架&#xff0c;并掌握音视…

UE Web Remote Control call python script

UE Web Remote Control call python script UE 远程调用Python(UE Python API)脚本 Web Remote Control 在网页客户端远程操作虚幻引擎项目。 虚幻编辑器提供了一套强大的工具&#xff0c;几乎可以操纵项目内容的方方面面。但在某些情况下&#xff0c;要在大型内容编辑流程中…

使用SVM模型完成分类任务

SVM&#xff0c;即支持向量机&#xff08;Support Vector Machine&#xff09;&#xff0c;是一种常见的机器学习算法&#xff0c;用于分类和回归分析。SVM的基本思想是将数据集映射到高维空间中&#xff0c;在该空间中找到一个最优的超平面&#xff0c;将不同类别的数据点分开…

国企普通员工如何才能成为公务员,这三种途径可供参考

国企普通员工如何转变成公务员&#xff1f;作为国企普通员工&#xff0c;如果要成为国家公务员&#xff0c;其主要的路径有三个方面&#xff0c;一是符合国家公务员法规定的公务员招录条件要求的&#xff0c;可以报考国家公务员&#xff1b;二是在国有企业担任领导职务&#xf…

使用EM算法完成聚类任务

EM算法&#xff08;Expectation-Maximization Algorithm&#xff09;是一种基于迭代优化的聚类算法&#xff0c;用于在无监督的情况下将数据集分成几个不同的组或簇。EM算法是一种迭代算法&#xff0c;包含两个主要步骤&#xff1a;期望步骤&#xff08;E-step&#xff09;和最…

子网重叠测试

子网重叠的两个网络可以相互通 虽然子网掩码不同&#xff0c;但是 R1 可以 ping R2&#xff1a; <R1>ping 10.0.12.14PING 10.0.12.14: 56 data bytes, press CTRL_C to breakReply from 10.0.12.14: bytes56 Sequence1 ttl255 time50 msReply from 10.0.12.14: bytes5…

Verilog语法学习——LV4_移位运算与乘法

LV4_移位运算与乘法 题目来源于牛客网 [牛客网在线编程_Verilog篇_Verilog快速入门 (nowcoder.com)](https://www.nowcoder.com/exam/oj?page1&tabVerilog篇&topicId301) 题目 题目描述&#xff1a; 已知d为一个8位数&#xff0c;请在每个时钟周期分别输出该数乘1/…

利用小波分解信号,再重构

function [ output_args ] example4_5( input_args ) %EXAMPLE4_5 Summary of this function goes here % Detailed explanation goes here clc; clear; load leleccum; s leleccum(1:3920); % 进行3层小波分解&#xff0c;小波基函数为db2 [c,l] wavedec(s,3,db2); %进行…

剑指 Offer 37. 序列化二叉树 / LeetCode297. 二叉树的序列化与反序列化(二叉树遍历(深度优先搜索))

题目&#xff1a; 链接&#xff1a;剑指 Offer 37. 序列化二叉树&#xff1b;LeetCode 297. 二叉树的序列化与反序列化 难度&#xff1a;困难 序列化是将一个数据结构或者对象转换为连续的比特位的操作&#xff0c;进而可以将转换后的数据存储在一个文件或者内存中&#xff0…

【雕爷学编程】Arduino动手做(99)---8X32 LED点阵屏模块3

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…

基于Java+SpringBoot+vue前后端分离新闻推荐系统设计实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

windows系统MySQL5.7小版本升级

此次是windows系统下&#xff0c;将mysql 5.7.38升级到5.7.43&#xff08;当前最新版本&#xff09;。 由于是第一次升级mysql数据库&#xff0c;在网上看了好多资料&#xff0c;发现升级都挺麻烦的&#xff0c;后来无意中看到一篇文章&#xff0c;升级超级简单&#xff0c;地…

【VTK】基于读取出来的 STL 模型,当用户点击鼠标左键时,程序将获取点击位置的点,显示其坐标,并设置它为模型的旋转原点

知识不是单独的&#xff0c;一定是成体系的。更多我的个人总结和相关经验可查阅这个专栏&#xff1a;Visual Studio。 文章目录 class PointPickedSignal : public QObjectclass MouseInteractorCommand : public vtkCommandvoid A::on_pushButtonSelected_clicked()void A::on…

2023牛客多校第三场 B.Auspiciousness

传送门 前题提要:没得说,赛时根本没想到dp,赛后翻各大题解看了很久,终于懂了dp的做法,故准备写一篇题解. 首先,先定义一下我们的 d p dp dp方程,考虑将处于 [ 1 , n ] [1,n] [1,n]的数当做小数,将处于 [ n 1 , 2 ∗ n ] [n1,2*n] [n1,2∗n]的数当做大数.那么对于我们的摸牌结…

CorelDraw怎么做立体字效果?CorelDraw制作漂亮的3d立体字教程

1、打开软件CorelDRAW 2019&#xff0c;用文本工具写上我们所需要的大标题。建议字体选用比较粗的适合做标题的字体。 2、给字填充颜色&#xff0c;此时填充的颜色就是以后立体字正面的颜色。我填充了红色&#xff0c;并加上了灰色的描边。 3、选中文本&#xff0c;单击界面左侧…