neo4j的Cypher基础语法学习
本篇文章主要是搬运了官方的一些介绍对应的加上一点自己理解,英文好的小伙伴可以直接查看官方文档,欢迎交流
- [值和类型](#值和类型)
- [官方命名规范和建议](#官方命名规范和建议)
- [表达式](#表达式)
- [变量](#变量)
- [保留关键字](#保留关键字)
- [参数](#参数)
- [运算符](#运算符)
- [注释](#注释)
- [模式](#模式)
- [时间值](#时间值)
- [空间值](#空间值)
- [List](#list)
- [Map](#map)
- [null](#null)
值和类型
cypher提供了一系列的数据类型支持
1.Property types
主要是常见的数值、字符串、布尔型、时间等基础类型
2.Structural types
包含Node、RelationShip、Path:
- node
- Id
- Label
- Map(of properties)
- RelationShip
- Id
- Type
- Map(of properties)
- id of start node
- id of end node
- Path
存储节点和关系路径
3.Composite types - List,可以存储不同类型的无需集合
- Map
- key,字符串
- value,可以是任何类型
三者的区别如下:
Property | Structural | Composite | |
---|---|---|---|
可以作为查询的返回值 | 是 | 否 | 是 |
可以作为参数 | 是 | 否 | 是 |
可以作为属性存储 | 是 | 否 | 否 |
可以包含Cypher的字符 | 是 | 否 | 是 |
官方命名规范和建议
需注意的规范:
- 命名时应为字母数字符为开头
- 不包含除下划线以外的符号
- 命名大小写敏感
- node labels、relationship type、property names的命名可以是一样的
- 例如这样是合法的:CREATE (a:a {a: 'a'})-[r:a]->(b:a {a: 'a'})
- 在查询中变量名不能一样
- 例如这样时不合法的:CREATE (a)-[a]->(b),其中node和relationship使用了相同的变量
字母数字符不是必须为英文字母,可以包括数字、符号、空格等,但是使用的时候必须使用反引号包裹转义,除了数据库名称,数据库名称可以不用转义
命名建议:
- Node labels:使用驼峰式,大写字母开头
- Relationship types:使用大写字符加下划线
表达式
https://neo4j.com/docs/cypher-manual/current/syntax/expressions/
官方举例很详细,表达式可以包含各种Cypher的第一支持的类型常量,也可以是变量或者一个结构体的属性等等,这里类似于sql语法表达式,其中case被特别拿出来讲解,其用法有两种
1.将表达式与多个表进行比较
CASE n.eyes
WHEN 'blue' THEN 1
WHEN 'brown' THEN 2
ELSE 3
END
2.允许多个表达式
CASE
WHEN n.eyes = 'blue' THEN 1
WHEN n.age < 40 THEN 2
ELSE 3
END
变量
https://neo4j.com/docs/cypher-manual/current/syntax/variables/
当想要引用模式或者查询的时候,需要通过将想要引用的部分命名,命名的这部分即为变量。
MATCH (n)-->(b)
RETURN b
其中n和b为变量
保留关键字
https://neo4j.com/docs/cypher-manual/current/syntax/reserved/
这里官方列出了一些保留关键字,和其他常见数据库该相同,注意不要在变量、参数以及函数名称使用即可
参数
https://neo4j.com/docs/cypher-manual/current/syntax/parameters/
cypher支持使用参数,通过
:param name => 'Joe'
可以设置参数name的值为Joe,这样在查询时可以通过$name来使用,例如
MATCH (n:Person)
WHERE n.name = $name
RETURN n
参数可以使用在值或表达式,节点和关系的id中。
不能作为属性的key值、关系的类型、节点的标签。
自动参数化,即当查询语句里没有使用参数时,Cypher会自行推断参数。查询中的每个常量值都被替换为一个参数。这增加了除了常量值之外相同查询的计算计划的可重用性。不建议依赖于这种行为——用户应该在他们认为合适的地方使用参数。如果有查询中有至少一个参数,那么自动参数化将不会启用。
运算符
https://neo4j.com/docs/cypher-manual/current/syntax/operators/
注释
https://neo4j.com/docs/cypher-manual/current/syntax/comments/
模式
https://neo4j.com/docs/cypher-manual/current/syntax/patterns/
时间值
https://neo4j.com/docs/cypher-manual/current/syntax/temporal/
空间值
https://neo4j.com/docs/cypher-manual/current/syntax/spatial/
List
Map
null
https://neo4j.com/docs/cypher-manual/current/syntax/working-with-null/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?