赞
踩
Neo4j系列导航:
neo4j及简单实践
cypher语法基础
cypher插入语法
cypher插入语法
cypher查询语法
cypher通用语法
cypher函数语法
neo4j索引及调优
neo4j官方文档。Cypher是一种声明式图数据库查询语言,它具有丰富的表现力,能高效地查询和更新图数据。具有以下特点:
使用模式可以描述你期望看到的数据的形状,当用模式描述一个形状的时候,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)
图数据库与关系型数据库的类比:
图数据 | 关系型数据库 |
---|---|
点 | 表 |
点标签 | 表名 |
点属性 | 表字段 |
点数据(标签+属性键值对) | 表的一行数据 |
相同标签的点数据 | 表的所有数据 |
关系 | 常用一列专门来描述(如树结构) |
当需要引用模式(pattern)或者查询的某一部分的时候,可以对其进行命名。针对不同部分的这些命名被称为变量。
match (n)-[r]->(b) return b # 这里的n和b和r就是变量
关键字大小写不敏感,变量名大小写敏感,语法关键字主要分为三类:
关键字 | 含义 |
---|---|
create | 创建节点或关系 |
merge | 匹配不到则创建 |
set | 更新节点的标签以及节点和关系的属性 |
delete | 删除土元素(节点、关系、路径) |
remove | 删除图元素的属性和标签 |
foreach | cypher提供的一种列表遍历工具,主要用来做增删改 |
create unique | 相当于match和create的混合体 (尽可能地匹配,然后创建未匹配到的创建) |
load csv(import) | 用于导入csv文件 |
关键字 | 含义 |
---|---|
match | 匹配(查询)已有数据 |
optional match | 与match类似,只是如果没有匹配上,则将使用null作为没有匹配上的模式。类似于SQL中的外连接。 |
where | 类似SQL中的添加查询条件 |
start | START语句仅用于访问neo4j遗留的索引(节点或者关系的索引) |
aggregation(count、sum、avg…) | 聚合函数 |
关键字 | 含义 |
---|---|
return | 返回结果 |
order by | 排序,紧跟RETURN或者WITH |
limit | 限制输出的行数 |
skip | 从哪行开始返回结果 |
with | 向后面的语句传递指定结果 |
unwind | cypher提供的一种列表遍历工具,结合case等语法可以写出许多复杂的查询,尤其是对于路径查询的处理 |
union/union all | 并集(去重/不去重) |
call | 执行子查询并返回结果,版本4.x后支持 |
case | 根据条件对查询的结果进行处理 |
Cypher支持的类型系统分为三类:属性类型,结构类型和复合类型。
名称 | 类型 |
---|---|
数值 | int,float… |
字符 | string |
布尔 | Boolean |
空间 | Point |
时间 | Date,Time,LocalTime,DateTime,LocalDateTime和Duration |
名称 | 类型 |
---|---|
节点(点) | Node,包含Id**, Labels, Map类型 |
关系(边) | Relationship,包含Type, Map, Id类型 |
路径 | Path,节点和关系的序列 |
名称 | 类型 |
---|---|
列表 | List |
字典 | Map,组成为(key, value)对,key是字符类型,value可以是属性类型, 结构类型和符合类型 |
neo4j中运算符与关系型数据库差不多,不过也有不同和需要注意的点
=, <>, <, >, <=, >=, is null, is not null
return [1,2,3,4,5]+[6,7] as myList
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]
with {name: 'Anne', age: 25 } as n return n.name
with {name: 'Anne', age: 25 } as n return n[$myKey] as result
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。