图数据库查询语言 Cypher 基础

Cypher 是 Neo4j 的声明式查询语言,为属性图提供了富有表现力和高效的查询,是一种成熟和直观的图数据库查询语言。在图上执行任何类型的创建、读取、更新或删除(CRUD),Cypher 是 Neo4j 的主要接口。

本文介绍了 Cypher 基础知识,以及如何使用 Neo4j 的查询 UI。

在这里插入图片描述

一、对比 SQL: 没有更复杂的 Join

Cypher是一种专门为查询图而优化设计的查询语言,可以理解并利用数据连接。它沿着连接-在任何方向-揭示未知的关系和集群。Cypher 查询比大规模 SQL 连接更容易编写。Cypher 查询与 SQL 中的等价查询的比较:
在这里插入图片描述

与SQL一样,Cypher的重要概念包括子句、关键字、表达式、操作符和函数。与处理关系数据库的SQL不同,Cypher以表达图形模式为中心。图模式匹配是 Cypher 中的核心技术,通过应用声明性模式,可以从图中创建、导航、描述和提取数据。

二、底层: Processing pipeline

Cypher是一种具有高级图形模式和集合支持的表达语言。在底层,处理管道首先解析查询,然后进行语义验证并重写 AST,然后使用可用的Planner为所有操作找到最优的执行计划(逻辑和物理),一直到查询执行。

Cypher 查询根据特定的执行计划执行。执行计划由操作符的二叉树组成,其中包含有关查询逐步执行的信息,并且根据查询使用的运行时可能有所不同。如果希望查看执行计划,但不实际运行查询,请在 Cypher 语句前加上EXPLAIN。该语句将始终返回空结果,并且不对数据库进行任何更改。

在这里插入图片描述

三、语法:直观易学的图查询语言

注意:Cypher 关键字不区分大小写,Cypher 对变量区分大小写。

Cypher 的独特之处在于它提供了一种匹配模式和关系的可视化方式。Cypher 的灵感来自于一种字符画艺术 (ASCII-Art) 的语法, (nodes)-[:ARE_CONNECTED_TO]->(otherNodes) 使用圆括号表示节点(nodes), -[:ARROWS]-> 表示关系。在编写查询时,相当于是绘制数据的图形模式。

  • 节点标签:使用圆括号表示节点,通过节点标签将相似的节点分类在一起,类似数据库中的一个表, (:Product) 中 Product 是节点的一个标签。
  • 节点变量: 如果我们以后想要引用节点,我们可以声明一个变量,比如 (p:Product), 后面可以用变量 p 引用节点。
  • 关系与方向:两个破折号表示关系,箭头表示方向,创建时必须指定方方向,查询时可不指定方向。 MATCH (n:Label)-->(m:Label)
  • 关系类型:使用方括号中添加关系类型,关系类型对关系进行分类并添加意义,也可使用变量引用。-[l:LIKES]-> 中 LIKES 是关系的类型
  • 属性:可以在节点或关系的括号内使用花括号来表示属性(键值对),节点属性 (p:Person {name: 'Sally'}) ,关系属性 -[rel:IS_FRIENDS_WITH {since: 2018}]->

节点表示示例:

()
(matrix)
(:Movie)
(matrix:Movie)
(matrix:Movie {title: 'The Matrix'})
(matrix:Movie {title: 'The Matrix', released: 1997})

关系表示示例:

-->
-[role]->
-[:ACTED_IN]->
-[role:ACTED_IN]->
-[role:ACTED_IN {roles: ['Neo']}]->

模式:结合节点和关系的语法表达模式

节点和关系构成了图形模式的构建块。这些构建块可以组合在一起用来表达复杂的模式。在 Cypher 中,它们可以写成连续的路径,也可以分成更小的模式,并用逗号连接在一起。 (p:Person {name: "Sally"})-[rel:LIKES]->(g:Technology {type: "Graphs"})

具体来说,模式用于匹配所需的图结构。一旦找到或创建了匹配的结构,Neo4j 就可以使用它进行进一步的处理。

模式示例:

// 节点可以有多个标签
(keanu:Person:Actor {name: 'Keanu Reeves'})-[role:ACTED_IN {roles: ['Neo']}]->(matrix:Movie {title: 'The Matrix'})
// 模式变量,有许多函数可以访问路径的详细信息 nodes(path), relationships(path), and length(path)
path = (:Person)-[:ACTED_IN]->(:Movie)

子句:表达丰富指令

Cypher语句通常有多个子句,每个子句执行一个特定的任务,例如:

  • 在图中创建和匹配模式
  • 筛选、规划、排序或分页结果
  • 组合语句

通过组合Cypher子句,您可以编写复杂的语句来表达您想要知道或创建的内容。

CREATE (a:Person {name: 'Tom Hanks', born: 1956})-[r:ACTED_IN {roles: ['Forrest']}]->(m:Movie {title: 'Forrest Gump', released: 1994})
CREATE (d:Person {name: 'Robert Zemeckis', born: 1951})-[:DIRECTED]->(m)
RETURN a, d, r, m

四、示例

基于 Northwind 数据集进行演示,Northwind 是一个广泛用于教学和软件开发示例中的示例数据库,这个数据库包含了多个表,用于存储客户、供应商、产品、订单等信息。

  1. 可视化查看当前图数据库数据模式,了解数据整体结构:
CALL db.schema.visualization()
  1. 简单的查询语句
// 添加行注释
MATCH (p:Product) RETURN p; // 相当于 SELECT p.* FROM products as p;
// 如果不确定方向时尽量使用无箭头查询
MATCH (p:Person)-[:LIKES]-(t:Technology)
  1. 看哪个供应商提供哪些类别的产品:
MATCH (s:Supplier)-->(:Product)-->(c:Category)
RETURN s.companyName as company, collect(distinct c.categoryName) as categories
  1. 查看指定类别的供应商
MATCH (s:Supplier)-->(:Product)-->(c:Category)
WHERE c.categoryName = 'Condiments'
RETURN DISTINCT s.companyName as condimentsSuppliers
  1. 假设您希望查看哪些产品类别通常与其他产品类别同时下单购买,以及同时下单的频率,帮助你了解哪些产品应该一起推广
// which categories are the products of an order in
MATCH (o:Order)-[:ORDERS]->(:Product)-[:PART_OF]->(c:Category)
// retain same ordering of categories
WITH o, c ORDER BY c.categoryName
// aggregate categories by order into a list of names
WITH o, collect(DISTINCT c.categoryName) as categories
// only orders with more than one category
WHERE size(categories) > 1
// count how frequently the pairings occurr
RETURN categories, count(*) as freq
// order by frequency
ORDER BY freq DESC
LIMIT 50
  1. 查找显示类似购买模式的客户,即哪些客户最常订购类似产品。然后可以用于产品推荐或进行客户群细分。
// pattern from customer purchasing products to another customer purchasing the same products
MATCH (c:Customer)-[:PURCHASED]->(:Order)-[:ORDERS]->(p:Product)<-[:ORDERS]-(:Order)<-[:PURCHASED]-(c2:Customer)
// don't want the same customer pair twice
WHERE c < c2
// sort by the top-occuring products
WITH c, c2, p, count(*) as productOccurrence
ORDER BY productOccurrence DESC
// return customer pairs ranked by similarity and the top 5 products
RETURN c.companyName, c2.companyName, sum(productOccurrence) as similarity, collect(distinct p.productName)[0..5] as topProducts
ORDER BY similarity DESC LIMIT 10
  1. 可以为相似性得分超过50分的所有客户创建关系,已查看它们是如何聚类的。
// 新建关系 SIMILAR_TO
MATCH (c:Customer)-[:PURCHASED]->(:Order)-[:ORDERS]->(p:Product)<-[:ORDERS]-(:Order)<-[:PURCHASED]-(c2:Customer)
WHERE c < c2
// find similar customers
WITH c, c2, count(*) as similarity
// with at least 50 shared product purchases
WHERE similarity > 50
// create a relationship between the two without specifying direction
MERGE (c)-[sim:SIMILAR_TO]-(c2)
// set relationship weight from similairity
ON CREATE SET sim.weight = similarity
// 查询
MATCH path=()-[:SIMILAR_TO]->() RETURN path

更多 https://neo4j.com/docs/cypher-cheat-sheet

weight from similairity
ON CREATE SET sim.weight = similarity
// 查询
MATCH path=()-[:SIMILAR_TO]->() RETURN path


## 更多 <https://neo4j.com/docs/cypher-cheat-sheet>> 如果这篇文章对您有所帮助,欢迎点赞、分享和留言,让更多的人受益。感谢您的细心阅读,如果发现了任何错误或需要补充的地方,请随时告诉我,我会尽快处理  `^_^` 

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

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

相关文章

软件测试用例的编写(六)

软件测试用例 定义 测试用例&#xff08;TestCase&#xff09;是为项目需求而编制的一组测试输入&#xff0c;执行步骤&#xff0c;以及预期结果&#xff0c;以便测试某个程序是否满足客户需求 可以总结为&#xff1a;每一个测试点的数据设计和步骤设计 – 对测试点的细化 作…

大数据技术之Zookeeper安装 (2)

目录 下载地址 本地模式安装 1&#xff09;安装前准备 2&#xff09;配置修改 3&#xff09;操作 Zookeeper 配置参数解读 Zookeeper 集群操作 集群规划 解压安装 配置服务器编号 配置 zoo.cfg 文件 集群操作 Zookeeper 集群启动停止脚本 创建脚本 增加脚本执行权限 …

在线问诊平台开发指南:基于互联网医院系统源码的实现路径

今天&#xff0c;小编将详细讲解如何通过互联网医院系统源码开发在线问诊平台。 一、在线问诊平台的需求分析 在线问诊平的核心目标是通过互联网技术&#xff0c;实现患者与医生之间的远程交流与诊断。因此&#xff0c;在开发过程中&#xff0c;首先需要明确平台的核心功能需求…

将 hugo 博客搬迁到服务器

1. 说明 在 Ubuntu 22.04 上使用 root 账号&#xff0c;创建普通账号&#xff0c;并赋予 root 权限。 演示站点&#xff1a;https://woniu336.github.io/ 魔改hugo主题: https://github.com/woniu336/hugo-magic 2. 服务器配置 建立 git 用户 adduser git安装 git sudo apt …

SpringBoot笔记01

第1章 Spring Boot概要 1.1 SpringBoot介绍 随着动态语言的流行&#xff08;Ruby、Scala、Node.js&#xff09;, Java的开发显得格外的笨重&#xff1b;繁多的配置、低下的开 发效率、复杂的部署流程以及第三方技术整合难度大。 在上述环境下&#xff0c;Spring Boot由此诞生…

光伏检测气象站:实时监测:高效管理

随着全球对可再生能源需求的日益增长&#xff0c;光伏发电作为清洁能源的重要组成部分&#xff0c;其重要性日益凸显。然而&#xff0c;光伏发电的效率与稳定性受气象条件影响显著&#xff0c;如光照强度、温度、湿度、风速等因素均能直接影响光伏板的发电效率。因此&#xff0…

巧用PDF转Markdown插件,在扣子(Coze)手搓一个有趣好玩的AI Bot

近期&#xff0c;TextIn团队开发的PDF转Markdown插件已经上架Coze平台。 短短的时间内&#xff0c;已经有不少朋友愉快地和我们的工具开始玩耍。今天我们抛砖引玉&#xff0c;介&#xff08;an&#xff09;绍&#xff08;li&#xff09;几种PDF转Markdown插件的有趣玩法&#…

阅读、分析和维护高质量开源软件有感——小计一笔

目录 一、问题分析 软件开发问题分析 动机 学什么 目的 二、要求 阅读 理解 运用 分析 评估 认知 三、案例选择 MiNotes”开源软件 方式 实践支撑软件工具 操作流程 应该学到的知识 学习过程 四、任务与输出 1.阅读开源软件 2.标注开源软件 3.分析开源…

路径规划 | 灰狼算法+B样条曲线优化无人机三维路径规划(Matlab)

目录 效果一览基本介绍程序设计参考文献 效果一览 基本介绍 灰狼算法B样条曲线优化无人机三维路径规划&#xff08;Matlab&#xff09; 群智能路径规划算法。三维灰狼算法&#xff08;GWO&#xff09;加B样条曲线优化的matlab代码。无人机&#xff08;UAV&#xff09;路径规划…

二叉树剪枝

1、题目解析 2、算法解析 本题使用二叉树的后序遍历&#xff0c;通过递归函数将左右子树进行处理&#xff0c;得到处理结果后&#xff0c;判断左右结果以及自身的val判断是否需要剪枝。 3、代码编写 class Solution { public:TreeNode* pruneTree(TreeNode* root) {if(root …

SpringBoot项目多线程实现定时任务-只需要三步

众所周知&#xff0c;项目中需要使用定时任务发布的需求时非常常见的&#xff0c;例如&#xff1a;数据同步&#xff0c;清理垃圾文件&#xff0c;清理过期用户等需求&#xff0c;可能需要我们定时去清理数据。 但是我们如果集成xxl-job&#xff0c;Quartz&#xff0c;spring …

Leetcode每日刷题之1004.最大连续1的个数|||(C++)

1.题目解析 本题的目的是找出能最多翻转k个0的情况下最长连续的1的个数&#xff0c;并且这是一个二进制数组&#xff0c;只存在0和1&#xff0c;翻转0就是将0变为1 2.算法原理 首先我们想到的一定是暴力枚举&#xff0c;即依次列举出在最多翻转k个0的情况下所有连续1的子数组的…

odoo17 网站内容存在哪了

odoo17 网站内容存在哪了 查数据库内容&#xff0c;却没找到 没理解这些内容到底存在了哪里呢

从0-1建一个webpack/vue项目,熟悉一下webpack知识点

以下配置项部分优化来自于国内直连GPT/Claude 第一步 首先整个新文件夹&#xff0c;打开终端&#xff0c;然后创建一个新目录&#xff0c;或者直接在vscode里面建个新文件夹&#xff0c;并进入该目录&#xff1b; mkdir my-vue-webpack-project第二步 进入当前目录 cd my-v…

JavaSE基础(11)——java.util包

目录 1、Random 创建Random对象 方法 2、Date类 创建Date对象 3、Canlender类 创建Calendar类对象 方法 4、java.text.SimpleDateFormat类 创建SimpleDateFormat对象 方法 SimpleDateFormat格式规范 5、java.time包 java.time包含的主要类 方法分类 1、Rando…

Servlet---Web会话跟踪 ▎token令牌

▍为什么要进行Web会话跟踪? http请求是无状态的,不携带用户信息的,当用户登录成功后,之后在于服务器交互时,服务器并不知道是哪个用户发送的请求 ▍Web会话跟踪 解决方法:在用户成功登录后,后端向前端响应token令牌(token令牌:用户信息),前端保存token令牌每次访问后端都先…

赛氪网技术支持第八届集创赛全国总决赛:共绘集成电路创新蓝图

赛氪网技术支持第八届集创赛全国总决赛&#xff1a;共绘集成电路创新蓝图 山东&#xff0c;2024年8月19日至21日 —— 全国瞩目的第八届全国大学生集成电路创新创业大赛&#xff08;以下简称“集创赛”&#xff09;全国总决赛在美丽的海滨城市山东省烟台市隆重举行。本次大赛由…

STM32的GPIO

GPIO基本控制 GPIO(General-Purpose input/output,通用输入/输出接口) 用于感知外部信号&#xff08;输入模式&#xff09;和控制外部设备&#xff08;输出模式&#xff09; 简单模块&#xff1a;LED,按键&#xff0c;蜂鸣器&#xff0c;温度传感器&#xff0c;使用一个GPIO…

tyut-数据库期末复习要点

第一章 数据库系统&#xff08;DBS&#xff09;是由数据库&#xff08;DB&#xff09;&#xff0c;数据库&#xff08;DBMS) &#xff0c;应用程序和数据库管理员 (DBA)组成的存储&#xff0c;管理&#xff0c;处理和维护数据的系统 数据模型&#xff1a;比较真实的模拟现实世…

构建基于LLM的应用程序——为您的应用程序选择合适的LLM

。 在本章中&#xff0c;将引导您完成为应用程序选择合适LLM的过程。我们将涵盖以下几个主题&#xff1a; 市场上最具前景的LLM概览比较LLM时应使用的主要标准和工具规模与性能之间的权衡 在本章结束时&#xff0c;您应该能够清楚地理解如何为您的应用程序选择合适的LLM&…