neo4j使用详解(二、cypher语法基础——最全参考)

在这里插入图片描述


Neo4j系列导航:
neo4j及简单实践
cypher语法基础
cypher插入语法
cypher插入语法
cypher查询语法
cypher通用语法
cypher函数语法
neo4j索引及调优


1.简介

neo4j官方文档。Cypher是一种声明式图数据库查询语言,它具有丰富的表现力,能高效地查询和更新图数据。具有以下特点:

  • 是一种声明性模式匹配语言
  • 遵循SQL语法
  • 的语法是非常简单且人性化、可读的格式

2.模式

使用模式可以描述你期望看到的数据的形状,当用模式描述一个形状的时候,Cypher将按照模式来获取相应的数据。

模式类型语法含义
节点(点)(n)节点使用一对圆括号表示,然后中间含一个名字
关系(边)(a)->(b),(a)<-(b),(a)-(b)使用箭头来表达两个节点之间的关系,不关心关系的方向,则箭头的头部可以省略
标签(a:User)
属性(a {name:'v1',sport:'s1'})使用键值对的映射结构来表达,然后用大括号包起来

变长模式匹配:

描述指定长度的关系,描述了三个节点两个关系:

(a)-[*2]->(b) # 等价于(a)-->()-->(b)

长度范围也可以指定,如最短为3,最长为5:

(a)-[*3..5]->(b)

至少三个关系:

(a)-[*3..]->(b)

最多5个关系:

(a)-[*..5]->(b)

任意长度的关系:

(a)-[*]->(b)

图数据库与关系型数据库的类比:

图数据关系型数据库
点标签表名
点属性表字段
点数据(标签+属性键值对)表的一行数据
相同标签的点数据表的所有数据
关系常用一列专门来描述(如树结构)

3.变量

当需要引用模式(pattern)或者查询的某一部分的时候,可以对其进行命名。针对不同部分的这些命名被称为变量。

match (n)-[r]->(b) return b # 这里的n和b和r就是变量

4.关键字

关键字大小写不敏感,变量名大小写敏感,语法关键字主要分为三类:

4.1.插入关键字:(详细讲解)

关键字含义
create创建节点或关系
merge匹配不到则创建
set更新节点的标签以及节点和关系的属性
delete删除土元素(节点、关系、路径)
remove删除图元素的属性和标签
foreachcypher提供的一种列表遍历工具,主要用来做增删改
create unique相当于match和create的混合体
(尽可能地匹配,然后创建未匹配到的创建)
load csv(import)用于导入csv文件

4.2.查询关键字:(详细讲解)

关键字含义
match匹配(查询)已有数据
optional match与match类似,只是如果没有匹配上,则将使用null作为没有匹配上的模式。类似于SQL中的外连接。
where类似SQL中的添加查询条件
startSTART语句仅用于访问neo4j遗留的索引(节点或者关系的索引)
aggregation(count、sum、avg…)聚合函数

4.3.通用关键字:(详细讲解)

关键字含义
return返回结果
order by排序,紧跟RETURN或者WITH
limit限制输出的行数
skip从哪行开始返回结果
with向后面的语句传递指定结果
unwindcypher提供的一种列表遍历工具,结合case等语法可以写出许多复杂的查询,尤其是对于路径查询的处理
union/union all并集(去重/不去重)
call执行子查询并返回结果,版本4.x后支持
case根据条件对查询的结果进行处理

5.数据类型

Cypher支持的类型系统分为三类:属性类型,结构类型和复合类型。

5.1.属性类型

名称类型
数值int,float…
字符string
布尔Boolean
空间Point
时间Date,Time,LocalTime,DateTime,LocalDateTime和Duration

5.2.结构类型

名称类型
节点(点)Node,包含Id**, Labels, Map类型
关系(边)Relationship,包含Type, Map, Id类型
路径Path,节点和关系的序列

5.3.复合类型

名称类型
列表List
字典Map,组成为(key, value)对,key是字符类型,value可以是属性类型, 结构类型和符合类型

6.运算符

neo4j中运算符与关系型数据库差不多,不过也有不同和需要注意的点

6.1.比较运算

=, <>, <, >, <=, >=, is null, is not null

  • 不同类型不能比较,例如点和边和路径不能互相比较
  • List比较时,只有所有对应元素都相等列表才相等
  • Map比较时,只有Map的键相等且其指向的值也相等时才相等
  • 路径比较时,只有路径上所有的点和边都相等时才相等
  • 和null比较的结果还是null

6.2.字符串比较运算

  • start with: 匹配前缀
  • ends with: 匹配后缀
  • constant: 字符串包含

6.3.字符串运算

  • 字符串连接: “+”
  • 正则匹配: “=~”

6.4.时间运算

  • +, -: Duration与时间实例/Duration
  • *, /:Duration与一个数字

6.5.List运算

  • List链接: +

    return [1,2,3,4,5]+[6,7] as myList

  • List判断e是否在List中: e in List

    with [2, 3, 4, 5] as numberList unwind numberList AS number with number where number in [2, 3, 8] return number

  • 动态获取其中元素: []

    with ['Anne', 'John', 'Bill', 'Diane', 'Eve'] as names return names[1..3] as result

  • 列表推导: |看起来和linux管道符号一样,作用也类似,前面的输出作为后面的输入

    列表推导是Cypher基于已有列表创建新的列表,可以和where等语句一起使用
    return [x in [1,2,3] | x^2] //输出[1.0, 4.0, 9.0]
    return [x in [1,2,3,4,5] where x%2=0 | x^2] //返回[4.0, 16.0]

6.6.Map运算

  • 静态获取Map的value: 使用点运算符

    with {name: 'Anne', age: 25 } as n return n.name

  • 动态获取Map的value: 使用[]

    with {name: 'Anne', age: 25 } as n return n[$myKey] as result

  • 42
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值