Cypher语法详解

一、基本概念

Cypher是一个图形查询语言,用于在Neo4j图形数据库中进行查询。它的语法格式类似于SQL,但是它的查询对象是节点和关系。一个Cypher查询由多个子句构成,每个子句都以关键字开头。

在Cypher中,节点由圆括号表示,关系用中括号表示,节点和关系都可以具有属性。

// 查询id为1的节点及其所有关系和属性
MATCH(n {id:1}) RETURN n

二、MATCH子句

MATCH子句用于从图形数据库中检索数据。在MATCH后面,可以指定要检索的节点和关系的模式,以及它们的属性和标签。

可以在一个MATCH子句中指定多个模式,它们之间互相连接,形成一个完整的模式链。

// 查询通过产品类型为“手机”连接的所有订单
MATCH (p:Product {type:'手机'})<-[:CONTAINS]-(o:Order) RETURN o

三、WHERE子句

WHERE子句用于过滤MATCH子句返回的结果。在WHERE子句中可以指定多个过滤条件,它们之间用AND或OR连接。

// 查询出品时间在2020年之前的所有产品
MATCH (p:Product) WHERE p.produce_date.year<2020 RETURN p

四、RETURN子句

RETURN子句用于返回查询结果。可以在RETURN后面指定要返回的节点或关系的属性、标签、或者一些计算结果。

// 查询所有年龄大于30岁的用户的邮箱地址
MATCH (u:User) WHERE u.age>30 RETURN u.email

五、CREATE子句

CREATE子句用于创建节点或关系。可以在CREATE子句中指定节点或关系的标签、属性和连接方式。

// 创建一个名为“张三”的用户节点
CREATE (u:User {name:'张三'})

六、MERGE子句

MERGE子句用于创建或者更新节点或关系。如果数据库中不存在与MERGE指定的模式相匹配的节点或关系,则创建它们;如果存在,则更新它们的属性。

// 如果不存在id为1的节点,则创建它;否则更新它的name属性
MERGE (n {id:1}) SET n.name='张三'

七、DELETE子句

DELETE子句用于删除节点或关系,如果在删除节点的同时会删除与之相关的所有关系。

// 删除id为1的节点及与之相关的所有关系
MATCH (n {id:1}) DETACH DELETE n

八、ORDER BY子句

ORDER BY子句用于按照指定的属性或者表达式对查询结果进行排序。可以指定升序或降序。

// 查询价格最高的前10个产品
MATCH (p:Product) RETURN p ORDER BY p.price DESC LIMIT 10

九、UNION子句

UNION子句用于对两个或多个查询结果进行合并。要求每个查询结果的列数和列名必须相同。

// 查询产品类型为“手机”或“电脑”的所有订单
MATCH (p1:Product {type:'手机'})<-[:CONTAINS]-(o1:Order) RETURN o1 
UNION 
MATCH (p2:Product {type:'电脑'})<-[:CONTAINS]-(o2:Order) RETURN o2

十、WITH子句

WITH子句用于在查询中创建中间结果。可以在WITH后面指定要返回的列和一些计算结果,然后将中间结果传递给下一个子句。

// 按照用户的购买金额排名查询前10名用户
MATCH (u:User)(p:Product) 
WITH u, SUM(p.price) AS totalPrice
RETURN u ORDER BY totalPrice DESC LIMIT 10

十一、CALL子句

CALL子句用于调用Neo4j内置的一些过程或者Java方法。可以在CALL后面指定要调用的函数和参数。

// 执行Jaccard相似度算法
MATCH (p1:Product)-[:CONTAINS]->()<-[:CONTAINS]-(p2:Product) 
WITH p1, p2, COUNT(*) AS intersection
CALL algo.similarity.jaccard.stream(p1, p2, {write:true, topK:10, similarityCutoff:0.01}) 
YIELD item1, item2, similarity
RETURN item1.name, item2.name, intersection, similarity

十二、FOREACH子句

FOREACH子句用于循环遍历一个给定的列表,对其中的每个元素都执行一系列操作。

// 对订单中的所有产品计算总价,并添加“total_price”属性到订单中
MATCH (o:Order)-[:CONTAINS]->(p:Product) 
WITH o, SUM(p.price) AS totalPrice
FOREACH(ignoreMe IN CASE WHEN o.total_price IS NOT NULL THEN [1] ELSE [] END | 
  SET o.total_price = totalPrice)

原创文章,作者:KGAIC,如若转载,请注明出处:https://www.506064.com/n/332800.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
KGAIC的头像KGAIC
上一篇 2025-01-27 13:34
下一篇 2025-01-27 13:34

相关推荐

  • Python语法大全解析

    本文旨在全面阐述Python语法,并提供相关代码示例,帮助读者更好地理解Python语言。 一、基础语法 1、Python的注释方式 # 这是单行注释 “”” 这是多行注释,可以注…

    编程 2025-04-29
  • Python中复数的语法

    本文将从多个方面对Python中复数的语法进行详细的阐述。Python中的复数是指具有实部和虚部的数,其中实部和虚部都是浮点数。它们可以用“实数+虚数j”的形式表示。例如,3 + …

    编程 2025-04-29
  • parent.$.dialog是什么技术的语法

    parent.$.dialog是一种基于jQuery插件的弹出式对话框技术,它提供了一个方便快捷的方式来创建各种类型和样式的弹出式对话框。它是对于在网站开发中常见的弹窗、提示框等交…

    编程 2025-04-28
  • 编译原理语法分析思维导图

    本文将从以下几个方面详细阐述编译原理语法分析思维导图: 一、语法分析介绍 1.1 语法分析的定义 语法分析是编译器中将输入的字符流转换成抽象语法树的一个过程。该过程的目的是确保输入…

    编程 2025-04-27
  • Python进阶语法全面解析

    Python语言作为一种广泛应用于人工智能、数据分析、云计算等多个领域的编程语言,拥有广泛的社区和强大的生态系统。Python提供了基本语法以及常用函数和模块,用于解决大量常规编程…

    编程 2025-04-27
  • Linux sync详解

    一、sync概述 sync是Linux中一个非常重要的命令,它可以将文件系统缓存中的内容,强制写入磁盘中。在执行sync之前,所有的文件系统更新将不会立即写入磁盘,而是先缓存在内存…

    编程 2025-04-25
  • 神经网络代码详解

    神经网络作为一种人工智能技术,被广泛应用于语音识别、图像识别、自然语言处理等领域。而神经网络的模型编写,离不开代码。本文将从多个方面详细阐述神经网络模型编写的代码技术。 一、神经网…

    编程 2025-04-25
  • Linux修改文件名命令详解

    在Linux系统中,修改文件名是一个很常见的操作。Linux提供了多种方式来修改文件名,这篇文章将介绍Linux修改文件名的详细操作。 一、mv命令 mv命令是Linux下的常用命…

    编程 2025-04-25
  • git config user.name的详解

    一、为什么要使用git config user.name? git是一个非常流行的分布式版本控制系统,很多程序员都会用到它。在使用git commit提交代码时,需要记录commi…

    编程 2025-04-25
  • 详解eclipse设置

    一、安装与基础设置 1、下载eclipse并进行安装。 2、打开eclipse,选择对应的工作空间路径。 File -> Switch Workspace -> [选择…

    编程 2025-04-25

发表回复

登录后才能评论