neo4j的Cypher基础语法学习

本篇文章主要是搬运了官方的一些介绍对应的加上一点自己理解,英文好的小伙伴可以直接查看官方文档,欢迎交流

- [值和类型](#值和类型)
- [官方命名规范和建议](#官方命名规范和建议)
- [表达式](#表达式)
- [变量](#变量)
- [保留关键字](#保留关键字)
- [参数](#参数)
- [运算符](#运算符)
- [注释](#注释)
- [模式](#模式)
- [时间值](#时间值)
- [空间值](#空间值)
- [List](#list)
- [Map](#map)
- [null](#null)

值和类型

https://neo4j.com/docs/cypher-manual/current/syntax/values/

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的字符

官方命名规范和建议

https://neo4j.com/docs/cypher-manual/current/syntax/naming/

需注意的规范:

  • 命名时应为字母数字符为开头
  • 不包含除下划线以外的符号
  • 命名大小写敏感
  • 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

https://neo4j.com/docs/cypher-manual/current/syntax/lists/

Map

https://neo4j.com/docs/cypher-manual/current/syntax/maps/

null

https://neo4j.com/docs/cypher-manual/current/syntax/working-with-null/

posted @   可可拿铁  阅读(533)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示