Neo4j图形数据库-Cypher中常用指令

一、创建与修改

1.1 create

  • 创建图数据库中的节点、关系等元素:
CREATE (:Person {name: "Alice", age: 30})
CREATE (p1:Person {name: "Bob"})-[r:KNOWS]->(p2:Person {name: "Charlie"})
  • 批量创建元素
CREATE (n1:Node),(n2:Node),(n3:AnotherNode {prop: "value"})

1.2 merge

  • 不存在再创建,如果存在则直接返回已有元素,常用来避免重复创建相同的数据。
    (若数据库中没有 name 为 “David” 的Person 节点,就会创建一个;若已经存在,就返回这个已有的节点,可用于保证特定节点在数据库中的唯一性):
MERGE (p:Person {name: "David"})
  • 检查公司与员工之间的 WORKS_AT 关系是否存在,不存在就创建:
MERGE (c:Company {name: "TechCo"})<-[r:WORKS_AT]-(e:Employee {name: "Eve"})

1.3 set

  • 更新节点或关系的现有属性值:
MATCH (p:Person {name: "Alice"}) 
SET p.age = 35
  • 添加新属性:
MATCH (p:Person {name: "Bob"}) 
SET p.address = "123 Main St"

二、查询

2.1 match

  • 在图中查找符合特定模式的节点、关系等元素:
MATCH (p:Person) 
WHERE p.age > 25 
RETURN p
  • 查找带有特定关系的节点:
MATCH (p1:Person)-[r:KNOWS]->(p2:Person) 
RETURN p1, r, p2
  • 复杂模式匹配:可以构建包含多个节点、多种关系以及属性筛选条件等的复杂查询模式:
MATCH (p1:Person)-[r1:KNOWS]->(p2:Person)-[r2:WORKS_AT]->(c:Company)
WHERE p1.name = "Alice" AND c.name = "TechFirm"
RETURN p1, p2, r1, r2, c

2.2 return

  • 指定查询结束后要返回的数据内容,可以返回节点、关系、属性值等各种元素:
MATCH (p:Person) 
RETURN p.name, p.age
  • 使用聚合函数返回结果:
MATCH (p:Person) 
RETURN count(p)
  • 返回不同类型元素:可以返回多种不同类型的元素混合在一起:
MATCH (p:Person)-[r:KNOWS]->(p2:Person)
RETURN p, r, p2.name

2.3 where

  • 作为筛选条件的添加指令,常配合 MATCH 使用,用来限定查询结果需满足的条件:
MATCH (p:Person) 
WHERE p.name STARTS WITH "A" AND p.age < 40 
RETURN p
  • 支持多种比较运算符(如 =、>、<、>=、<=、<> 等)以及逻辑运算符(AND、OR、NOT 等)来构建复杂的筛选条件。
MATCH (p:Person)
WHERE p.name STARTS WITH "A" AND p.age < 40
RETURN p

三、删除

3.1 delete

  • 删除图数据库中的节点、关系等元素:
MATCH (p:Person {name: "Charlie"}) 
DELETE p
  • 删除关系:
MATCH (p1:Person)-[r:KNOWS]->(p2:Person) 
DELETE r

3.2 remove

  • 移除节点或关系上的属性:
MATCH (p:Product) 
REMOVE p.description

四、数据导入与加载

4.1 load csv

  • 从 CSV 文件中加载数据到图数据库中,常配合 CREATE 等指令来基于导入的数据创建节点或关系:
    (从本地 data.csv 文件(有表头的情况)读取每行数据,然后创建对应的 :User 节点并设置属性。)
LOAD CSV WITH HEADERS FROM "file:///data.csv" AS row 
CREATE (:User {name: row.name, email: row.email})

五、聚合与分组

5.1 group by

  • 类似于关系型数据库中的分组功能,用于按照指定的属性或表达式对查询结果进行分组,常配合聚合函数使用。
MATCH (p:Person) 
RETURN p.age, count(p) 
GROUP BY p.age

5.2 order by

  • 对查询返回的结果按照指定的属性或表达式进行排序,可以指定升序(ASC)或降序(DESC):
MATCH (p:Person) 
RETURN p.name, p.age 
ORDER BY p.age DESC

六、函数

6.1 聚合函数

  • count():用于统计节点、关系等元素的数量;
  • sum():对指定属性值进行求和;
  • avg():计算属性值的平均值;
  • min() 和 max():分别获取属性值的最小值和最大值。
MATCH (p:Person) 
RETURN count(p)MATCH (p:Product) 
RETURN sum(p.price)MATCH (p:Product) 
RETURN avg(p.price)MATCH (p:Product) 
RETURN min(p.price), max(p.price)

6.2 字符串函数

  • LEFT()、RIGHT():分别用于获取字符串左边或右边指定长度的子字符串;
  • SUBSTRING():截取字符串中间的部分;
  • UPPER()、LOWER():将字符串转换为大写或小写形式:
MATCH (p:Person) 
RETURN LEFT(p.name, 3)MATCH (p:Person) 
RETURN SUBSTRING(p.name, 2, 4)MATCH (p:Person) 
RETURN UPPER(p.name)

6.3 数学函数

  • ROUND():对数值进行四舍五入;
  • ABS():求绝对值;
MATCH (p:Product) 
RETURN ROUND(p.price)MATCH (p:Product) 
WHERE p.price < 0 
RETURN ABS(p.price)

6.4 类型转换函数

  • toFloat()、toInteger() 等:用于将属性值在不同数据类型之间进行转换:
MATCH (p:Product)
SET p.price = toFloat(p.price)

6.5 列表函数

  • size():用于获取列表类型属性的元素个数:
MATCH (p:Person {hobbies: ["reading", "swimming"]})
RETURN size(p.hobbies)

七、路径操作与相关函数

7.1 路径查找与表示

  • 使用路径表达式来描述节点之间的连接关系以及查找符合特定路径模式的元素:
    (查找从一个 :Node 节点出发,通过 1 到 3 条关系能够到达另一个 :Node 节点的所有路径,并返回这些路径。)
MATCH p=(n:Node)-[*1..3]->(m:Node)
RETURN p

7.2 路径相关函数

  • length():用于计算路径的长度(即路径中包含的关系数量):
MATCH p=(n:Node)-[*]->(m:Node)
RETURN length(p)
  • nodes() 和 rels():分别用于获取路径中的节点列表和关系列表:
MATCH p=(n:Node)-[*]->(m:Node)
RETURN nodes(p), rels(p)

八、索引与约束

8.1 create index

  • 创建索引,提高基于特定属性的查询效率:
    (为 :Person 节点的 name 属性创建索引,后续查询中如果频繁通过 name 属性查找 :Person 节点,速度会更快。)
CREATE INDEX FOR (p:Person) ON (p.name)

8.2 create constraint

  • 创建约束条件,常见的如唯一性约束,确保某个属性在特定标签的节点中具有唯一性。
    (保证 :Person 节点的 email 属性值在整个数据库中是唯一的,避免重复创建具有相同 email 属性的 :Person 节点。)
CREATE CONSTRAINT ON (p:Person) ASSERT p.email IS UNIQUE

九、事务与执行控制

9.1 begin、commit、rollback

  • BEGIN:用于开启一个事务,在事务内可以执行多条 Cypher 语句;
  • COMMIT 用于提交事务,使事务内对数据的修改操作生效;
  • ROLLBACK 用于回滚事务,撤销事务内已经执行的操作,恢复到事务开始前的数据状态。
BEGIN
CREATE (:TempNode {name: "Temp"})
// 其他操作
COMMIT

9.2 explain、profile

  • EXPLAIN:用于获取查询语句的执行计划信息,展示数据库将如何执行该查询,帮助分析查询性能、优化查询逻辑,但并不实际执行查询。
EXPLAIN MATCH (p:Person) 
RETURN p
  • PROFILE:不仅能获取执行计划,还会实际执行查询,并展示查询执行过程中的性能相关数据,比如各操作花费的时间等,方便定位查询性能瓶颈。
PROFILE MATCH (p:Person) 
RETURN p

以上涵盖了 Cypher 语言的大部分主要功能和指令,不过不同的图数据库系统在对 Cypher 语言的具体实现、支持程度以及语法细节等方面可能会存在一定差异,实际使用时需要结合具体的数据库平台来准确应用这些功能和指令。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

新型大语言模型的预训练与后训练范式,阿里Qwen

前言&#xff1a;大型语言模型&#xff08;LLMs&#xff09;的发展历程可以说是非常长&#xff0c;从早期的GPT模型一路走到了今天这些复杂的、公开权重的大型语言模型。最初&#xff0c;LLM的训练过程只关注预训练&#xff0c;但后来逐步扩展到了包括预训练和后训练在内的完整…

NAT:连接私有与公共网络的关键技术(4/10)

一、NAT 的工作原理 NAT 技术的核心功能是将私有 IP 地址转换为公有 IP 地址&#xff0c;使得内部网络中的设备能够与外部互联网通信。其工作原理主要包括私有 IP 地址到公有 IP 地址的转换、端口号映射以及会话表维护这几个步骤。 私有 IP 地址到公有 IP 地址的转换&#xff1…

notepad++文件github下载

1、github下载网址&#xff1a;Releases notepad-plus-plus/notepad-plus-plus GitHub 2、找到操作系统支持的软件&#xff1a; 3、CSDN下载链接&#xff1a;https://download.csdn.net/download/u013083576/90046203

【AI绘画】Midjourney进阶:色调详解(下)

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: AI绘画 | Midjourney 文章目录 &#x1f4af;前言&#x1f4af;Midjourney中的色彩控制为什么要控制色彩&#xff1f;为什么要在Midjourney中控制色彩&#xff1f; &#x1f4af;色调纯色调灰色调暗色调 &#x1f4af…

【MySQL篇】持久化和非持久化统计信息的深度剖析(第一篇,总共六篇)

&#x1f4ab;《博主介绍》&#xff1a;✨又是一天没白过&#xff0c;我是奈斯&#xff0c;DBA一名✨ &#x1f4ab;《擅长领域》&#xff1a;✌️擅长Oracle、MySQL、SQLserver、阿里云AnalyticDB for MySQL(分布式数据仓库)、Linux&#xff0c;也在扩展大数据方向的知识面✌️…

PH热榜 | 2024-11-27

DevNow 是一个精简的开源技术博客项目模版&#xff0c;支持 Vercel 一键部署&#xff0c;支持评论、搜索等功能&#xff0c;欢迎大家体验。 在线预览 1. Agentplace 标语&#xff1a;这是一个能创建互动式AI网站和应用的平台。 介绍&#xff1a;Agentplace是一个平台&#xf…

ffmpeg 增亮 docker 使用

使用最新的 docker pull jrottenberg/ffmpeg docker run -it --rm -v /path/to/input:/input -v /path/to/output:/output jrottenberg/ffmpeg <ffmpeg command>比如我想增亮 在 /home 目录下 有一个 video.mp4 docker run --rm -v /home:/home jrottenberg/ffmpeg:7…

单片机学习笔记 11. 外部中断

更多单片机学习笔记&#xff1a;单片机学习笔记 1. 点亮一个LED灯单片机学习笔记 2. LED灯闪烁单片机学习笔记 3. LED灯流水灯单片机学习笔记 4. 蜂鸣器滴~滴~滴~单片机学习笔记 5. 数码管静态显示单片机学习笔记 6. 数码管动态显示单片机学习笔记 7. 独立键盘单片机学习笔记 8…

【PyTorch】(基础一)----pytorch环境搭建

PyTorch环境搭建 该系列笔记主要参考了小土堆的视频教程&#xff0c;传送门&#xff1a;P1. PyTorch环境的配置及安装&#xff08;Configuration and Installation of PyTorch)【PyTorch教程】_哔哩哔哩_bilibili PyTorch 是一个开源的机器学习库&#xff0c;主要用 Python 编…

uniapp开发支付宝小程序自定义tabbar样式异常

解决方案&#xff1a; 这个问题应该是支付宝基础库的问题&#xff0c;除了依赖于官方更新之外&#xff0c;开发者可以利用《自定义 tabBar》曲线救国 也就是创建一个空内容的自定义tabBar&#xff0c;这样即使 tabBar 被渲染出来&#xff0c;但从视觉上也不会有问题 1.官方文…

YOLOv11融合PIDNet中的PagFM模块及相关改进思路

YOLOv11v10v8使用教程&#xff1a; YOLOv11入门到入土使用教程 YOLOv11改进汇总贴&#xff1a;YOLOv11及自研模型更新汇总 《PIDNet: A Real-time Semantic Segmentation Network Inspired by PID Controllers》 一、 模块介绍 论文链接&#xff1a;https://arxiv.org/pdf/2…

NSCTF 做题笔记

[GWCTF 2019]pyre 下载附件&#xff0c;是一个pyc文件。 转换为py文件。 在用vscode打开。 分析源码。源码就是进行了异或和数值转换。 有一点很坑&#xff0c;凑得中的值要转换为ASCII值否则就是一串乱码。 编写脚本&#xff1a; #include<iostream> #include<s…

java——spring容器启动流程

Spring容器的启动流程是一个复杂但有序的过程&#xff0c;它涉及多个步骤来确保应用程序的组件被正确加载、配置和初始化。以下是Spring容器启动的主要步骤&#xff1a; 一、加载配置文件 Spring容器首先会加载配置文件&#xff0c;这些配置文件通常包含了应用程序的组件、依…

九、Ubuntu Linux操作系统

一、Ubuntu简介 Ubuntu Linux是由南非人马克沙特尔沃思(Mark Shutteworth)创办的基于Debian Linux的操作系统&#xff0c;于2004年10月公布Ubuntu是一个以桌面应用为主的Linux发行版操作系统Ubuntu拥有庞大的社区力量&#xff0c;用户可以方便地从社区获得帮助其官方网站:http…

python excel接口自动化测试框架!

今天采用Excel继续写一个接口自动化测试框架。 设计流程图 这张图是我的excel接口测试框架的一些设计思路。 首先读取excel文件&#xff0c;得到测试信息&#xff0c;然后通过封装的requests方法&#xff0c;用unittest进行测试。 其中&#xff0c;接口关联的参数通过正则进…

基本功能实现

目录 1、环境搭建 2、按键控制灯&电机 LED 电机 垂直按键(机械按键) 3、串口调试功能 4、定时器延时和定时器中断 5、振动强弱调节 6、万年历 7、五方向按键 1、原理及分析 2、程序设计 1、环境搭建 需求: 搭建一个STM32F411CEU6工程 分析: C / C 宏定义栏…

Android 13 Aosp 默认允许应用动态权限

图库 frameworks/base/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java 修改 public void grantDefaultPermissions(int userId) {DelayingPackageManagerCache pm new DelayingPackageManagerCache();grantPermissionsToSysCompon…

操作系统 内存管理——针对实习面试

目录 操作系统 内存管理什么是虚拟内存&#xff1f;什么是物理内存&#xff1f;解释虚拟内存和物理内存的区别什么是分页式存储&#xff1f;什么是分段式存储&#xff1f;解释分页式存储和分段式存储的区别什么是内存碎片&#xff1f;描述几种常见的内存分配算法描述几种常见的…

开源免费的 分布式配置中心 介绍 与 选型 建议

分布式配置中心的应用场景介绍 在微服务架构中&#xff0c;配置管理变得尤为复杂。首先&#xff0c;我们可以想象下&#xff0c;如果没有配置中心&#xff0c;我们的项目可能是这样的&#xff1a;不同环境的配置文件都放在项目里面&#xff0c;部署时可以通过启动参数来指定使…

Linux入门攻坚——39、Nginx入门

Nginx&#xff1a;engine X Tengine&#xff1a;淘宝改进维护的版本 Registry&#xff1a; 使用了libevent库&#xff1a;高性能的网络库 epoll()函数 Nginx特性&#xff1a; 模块化设计、较好的扩展性&#xff1b;&#xff08;但不支持动态加载模块功能&#…