Neo4j图数据库学习第三章Cyber和基础语法Word下载.docx
- 文档编号:17304685
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:13
- 大小:33.61KB
Neo4j图数据库学习第三章Cyber和基础语法Word下载.docx
《Neo4j图数据库学习第三章Cyber和基础语法Word下载.docx》由会员分享,可在线阅读,更多相关《Neo4j图数据库学习第三章Cyber和基础语法Word下载.docx(13页珍藏版)》请在冰豆网上搜索。
例如,下面的Cypher代码将两个简单的模式连接在一起:
(:
Person)-[:
LIVES_IN]->
(:
City)-[:
PART_OF]->
Country)
像关系数据库中的SQL一样,Cypher是一种文本的声明式查询语言。
它使用ASCIIart的形式来表达基于图的模式。
采用类似SQL的语句,如MATCH,WHERE和DELETE,来组合这些模式以表达所预期的操作。
节点语法
Cypher采用一对圆括号来表示节点。
如:
(),(foo)。
下面是一些常见的节点表示法:
()
(matrix)
Movie)
(matrix:
Movie{title:
"
TheMatrix"
})
released:
1997})
Match(matrix:
})returnmatrix
关系语法
Cypher使用一对短横线(即“--”)表示:
一个无方向关系。
有方向的关系在其中一段加上一个箭头(即“<
--”或“-->
”)。
方括号表达式[…]可用于添加详情。
里面可以包含变量、属性和或者类型信息。
关系的常见表达方式如下:
--
-->
-[role]->
-[:
ACTED_IN]->
-[role:
ACTED_IN{roles:
["
Neo"
]}]->
Match(n)-[role]->
(m)returnn,role,m
模式语法
将节点和关系的语法组合在一起可以表达模式。
(keanu:
Person:
Actor{name:
KeanuReeves"
})-[role:
})
事务
任何更新图的查询都运行在一个事务中。
一个更新查询要么全部成功,要么全部失败。
Cypher或者创建一个新的事务,或者运行在一个已有的事务中:
●如果运行上下文中没有事务,Cypher将创建一个,一旦查询完成就提交该事务。
●如果运行上下文中已有事务,查询就会运行在该事务中。
直到该事务成功地提交之后,数据才会持久化到磁盘中去。
兼容性
Cypher不是一成不变的语言。
新版本引入了很多新的功能,一些旧的功能可能会被移除。
如果需要,旧版本依然可以访问到。
这里有两种方式在查询中选择使用哪个版本:
●为所有查询设置版本:
可以通过neo4j.conf中cypher.default_language_version参数来配置Neo4j数据库使用哪个版本的Cypher语言。
●在查询中指定版本:
简单地在查询开始的时候写上版本,如Cypher2.3。
1.2基本语法
类型
Cypher处理的所有值都有一个特定的类型,它支持如下类型:
●数值型
●字符串
●布尔型
●节点
●关系
●路径
●映射(Map)
●列表(List)
表达式
Cypher中的表达式如下:
●十进制(整型和双精度型)的字面值:
13,-4000,3.14,6.022E23
●十六进制整型字面值(以0x开头):
0x13zf,0xFC3A9,-0x66eff
●八进制整型字面值(以0开头):
01372,02127,-05671
●字符串字面值:
'
Hello'
"
World"
●布尔字面值:
true,false,TRUE,FALSE
●变量:
n,x,rel,myFancyVariable,`Anamewithweirdstuffinit[]!
`
●属性:
n.prop,x.prop,rel.thisProperty,myFancyVariable.`(weirdpropertyname)`
●动态属性:
n["
prop"
],rel[n.city+n.zip],map[coll[0]]
●参数:
$param,$0
●表达式列表:
['
a'
b'
],[1,2,3],['
2,n.property,$param],[]
●函数调用:
length(p),nodes(p)
●聚合函数:
avg(x.prop),count(*)
●路径-模式:
(a)-->
()<
--(b)
●计算式:
1+2>
3and3<
4.
●返回true或者false的断言表达式:
a.prop='
length(p)>
10,exists(a.name)
●正则表达式:
a.name=~'
Tob.*'
●大小写敏感的字符串匹配表达式:
a.surnameSTARTSWITH'
Sven'
a.surnameENDSWITH'
son'
ora.surnameCONTAINS'
●CASE表达式
转义字符
Cypher中的字符串可以包含如下转义字符:
字符
含义
\t
制表符
\b
退格
\n
换行
\r
回车
\f
换页
\'
单引号
\"
双引号
\\
反斜杠
\uxxxx
UnicodeUTF-16编码点(4位的十六进制数字必须跟在\u后面)
\Uxxxxxxxx
UnicodeUTF-32编码点(8位的十六进制数字必须跟在\U后面)
Case表达式
计算表达式的值,然后依次与WHEN语句中的表达式进行比较,直到匹配上为止。
如果未匹配上,则ELSE中的表达式将作为结果。
如果ELSE语句不存在,那么将返回null。
语法:
CASEtest
WHENvalueTHENresult
[WHEN...]
[ELSEdefault]
END
参数:
●test:
一个有效的表达式
●value:
一个表达式,它的结果将与test表达式的结果进行比较
●result:
如果value表达式能够与test表达式匹配,它将作为结果表达式
●default:
没有匹配的情况下的默认返回表达式
查询
MATCH(n)
RETURN
CASEn.eyes
WHEN'
blue'
THEN1
brown'
THEN2
ELSE3ENDASresult
变量
当需要引用模式(pattern)或者查询的某一部分的时候,可以对其进行命名。
针对不同部分的这些命名被称为变量。
例如:
MATCH(n)-[r]->
(b)
RETURNb
这里的n和b和r就是变量。
参数
Cypher支持带参数的查询。
这意味着开发人员不是必须用字符串来构建查询。
此外,这也让执行计划的缓存更容易。
参数能够用于WHERE语句中的字面值和表达式,START语句中的索引值,索引查询以及节点和关系的id。
参数不能用于属性名、关系类型和标签,因为这些模式(pattern)将作为查询结构的一部分被编译进查询计划。
合法的参数名是字母,数字以及两者的组合。
下面是一个使用参数的完整例子。
参数以JSON格式提供。
具体如何提交它们取决于所使用驱动程序。
字符串
{
"
name"
:
Johan"
}
Match(n)wheren.name=$namereturnn
运算符
数学运算符
包括+,-,*,/和%,^。
比较运算符
包括=,<
>
,<
,>
=,>
=,ISNULL和ISNOTNULL。
布尔运算符
包括AND,OR,XOR和NOT。
字符串运算符
连接字符串的运算符为+。
正则表达式的匹配运算符为=~。
列表运算符
列表的连接也可以通过+运算符。
可以用IN来检查列表中是否存在某个元素。
值的相等与比较
Cypher支持使用=和<
来比较两个值的相等/不相等关系。
同类型的值只有它们是同一个值的时候才相等,如3=3和"
x"
<
xy"
。
值的排序与比较
比较运算符<
=,<
(升序)和>
(降序)可以用于值排序的比较。
如下所示:
●数字型值的排序比较采用数字顺序
●java.lang.Double.NaN大于所有值
●字符串排序的比较采用字典顺序。
如"
●布尔值的排序遵循false<
true
●当有个参数为null的时候,比较结果为null。
如null<
3的结果为null
●将其他类型的值相互比较进行排序将报错
链式比较运算
比较运算可以被任意地链在一起。
如x<
y<
=z等价于x<
yANDy<
=z。
MATCH(n)WHERE21<
n.age<
=30RETURNn
等价于
n.ageANDn.age<
注释
Cypher语言的注释类似其他语言,用双斜线//来注释行。
MATCH(n)RETURNn//这是行末尾注释
//这是整行注释
RETURNn
MATCH(n)WHEREn.property='
//这不是注释'
RETURNn
使用模式可以描述你期望看到的数据的形状。
例如,在MATCH、CREATE、DELETE等语句中,当用模式描述一个形状的时候,Cypher将按照模式来获取相应的数据。
模式描述数据的形式很类似在白板上画出图的形状。
通常用圆圈来表达节点,使用箭头来表达关系。
节点模式
模式能表达的最简单的形状就是节点。
节点使用一对圆括号表示,然后中间含一个名字。
(a)
这个模式描述了一个节点,其名称使用变量a表示。
关联节点的模式
模式可以描述多个节点及其之间的关系。
Cypher使用箭头来表达两个节点之间的关系。
(b)<
--(c)
标签
模式除了可以描述节点之外,还可以用来描述标签。
比如:
(a:
User)-->
也可以描述一个节点的多个标签,如:
User:
Admin)-->
指定属性
属性在模式中使用键值对的映射结构来表达,然后用大括号包起来。
例如,一个有两个属性的节点如下所示:
(a{name:
Andres'
sport:
BrazilianJu-Jitsu'
})
关系中的属性:
(a)-[{blocked:
false}]->
描述关系
如前面的例子所示,可以用箭头简单地描述两个节点之间的关系。
它描述了关系的存在性和方向性。
但如果不关心关系的方向,则箭头的头部可以省略。
(a)--(b)
与节点类似,如果后续需要引用到该关系,则可以给关系赋一个变量名。
变量名需要用方括号括起来,放在箭头的短横线中间,如下所示:
(a)-[r]->
就像节点有标签一样,关系可以有类型(type)。
给关系指定类型,如下所示:
(a)-[r:
REL_TYPE]->
不像节点可以有多个标签,关系只能有一个类型。
但如果所描述的关系可以是一个类型集中的任意一种类型,可以将这些类型都列入到模式中,它们之间以竖线“|”分割。
TYPE1|TYPE2]->
注意:
这种模式仅适用于描述已经存在的数据(如在MATCH语句中),而在CREATE或者MERGE语句中是不允许的,因为一个关系不能创建多个类型。
与节点类似,关系的命名也是可以省略的。
(a)-[:
(b)
与使用一串节点和关系来描述一个长路径的模式不同,很多关系(以及中间的节点)可以采用指定关系的长度的模式来描述。
(a)-[*2]->
它描述了一张三个节点和两个关系的图。
这些节点和关系都在同一条路径中(路径的长度为2)。
它等同于:
()-->
关系的长度也可以指定一个范围,这被称为可变长度的关系。
(a)-[*3..5]->
关系的长度最小值为3,最大值为5。
它描述了一个或者有4个节点和3个关系,或者5个节点4个关系,或者6个节点和5个关系连在一起的图组成的一条路径。
长度的边界也是可以省略的,如描述一个路径长度大于等于3的路径:
(a)-[*3..]->
路径长度小于等于5的路径,如:
(a)-[*..5]->
两个边界都可以省略,这允许任意长度的路径,如:
(a)-[*]->
列表
Cypher对列表(list)有很好的支持。
可以使用方括号和一组以逗号分割的元素来创建一个列表。
例如
RETURN[0,1,2,3,4,5,6,7,8,9]ASlist
空值
空值null在Cypher中表示未找到或者未定义。
从概念上讲,null意味着”一个未找到的未知值”。
对待null会与其他值有些不同。
例如从节点中获取一个并不存在的属性将返回null。
大多数以null作为输入的表达式将返回null。
这包括WHERE语句中用于断言的布尔表达式。
null不等于null。
两个未知的值并不意味着它们是同一个值。
因此,null=null返回null而不是true。
判断某个节点上有或没有某个属性,如下
Match(n)wheren.nameisnullreturnn
Match(n)wheren.nameisnotnullreturnn
空值的逻辑运算
逻辑运算符(包括AND,OR,XOR,IN,NOT)把null当作未知的三值逻辑值。
下面为AND,OR和XOR的逻辑值表。
a
b
a
AND
OR
XOR
false
null
true
空值与IN
IN运算符遵循类似的逻辑。
如果列表中存在某个值,结果就返回true。
如果列表包含null值并且没有匹配到值,结果返回null。
否则结果为false。
下面表中是一些例子:
结果
2IN[1,2,3]
2IN[1,null,3]
2IN[1,2,null]
2IN[1]
2IN[]
nullIN[1,2,3]
nullIN[1,null,3]
nullIN[]
all,any,none和single与IN类似,如果可以确切地计算结果,将返回true或者false。
否则将返回null。
返回空值的表达式
●从列表中获取不存在的元素:
[][0],head([])
●试图访问节点或者关系的不存在的属性:
n.missingProperty
●与null做比较:
1<
null
●包含null的算术运算:
1+null
●包含任何null参数的函数调用:
sin(null)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Neo4j 数据库 学习 第三 Cyber 基础 语法