Neo4j图数据库学习第三章Cyber和基础语法Word下载.docx

上传人:b****6 文档编号:17304685 上传时间:2022-12-01 格式:DOCX 页数:13 大小:33.61KB
下载 相关 举报
Neo4j图数据库学习第三章Cyber和基础语法Word下载.docx_第1页
第1页 / 共13页
Neo4j图数据库学习第三章Cyber和基础语法Word下载.docx_第2页
第2页 / 共13页
Neo4j图数据库学习第三章Cyber和基础语法Word下载.docx_第3页
第3页 / 共13页
Neo4j图数据库学习第三章Cyber和基础语法Word下载.docx_第4页
第4页 / 共13页
Neo4j图数据库学习第三章Cyber和基础语法Word下载.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

Neo4j图数据库学习第三章Cyber和基础语法Word下载.docx

《Neo4j图数据库学习第三章Cyber和基础语法Word下载.docx》由会员分享,可在线阅读,更多相关《Neo4j图数据库学习第三章Cyber和基础语法Word下载.docx(13页珍藏版)》请在冰豆网上搜索。

Neo4j图数据库学习第三章Cyber和基础语法Word下载.docx

例如,下面的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

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)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1