neo4j中的一些常用的cypher语句

news/2024/11/29 13:44:34/

 

neo4j的基本概念:

节点,属性,关系,标签

 

节点:可以创建一个为空的节点,只有默认内置的id属性。

关系:关系是有方向的,两个节点可存在多个关系,关系上可以数据属性。一个节点存在指向自己的关系。

属性:节点和关系都可以具有多个属性。属性值可以是基本的数据类型。

标签:节点上可以设置标签。一个节点可以具有多个标签。

 

属性值的范围:

boolean  布尔

byte

short

int

long

float

double

char

string

 

 

neo4j安装教程

windo,ubuntu

https://blog.csdn.net/sa726663676/article/details/114641013

ubuntu安装neo4j非常简单,下载neo4j社区版直接解压即可,然后修改conf、neo4j-server.properties 将org.neo4j.server.webserver.address=0.0.0.0注释符去掉。启动即可。

 

neo4j启动的方式:

neo4 shell终端环境,neo4j web端

 

neo4 shell端启动:

 

window 启动命令:

 

 

linux启动命令: 

进入neo4j的bin目录下:输入     ./neo4j-shell 启动shell端

 

 

 

neo4j web端启动:

 

进入neo4j安装的bin目录文件夹下

window 启动命令:

 

linux启动命令: 

./neo4j start

 

 

 

创建常用的数据库

 

create movies

 

 

 

 

 

cypher存在的类型:

 

 

 

 

int:

 

 

 

float类型:

 

 

 

 

列表类型:

 

Cypher支持列表操作,并且和Python中的列表很相似。使用[],可以直接手动创建列表,例如:RETURN [1,2,3]。Cypher内置的range函数可以直接返回一个列表,用法和Python中的range也几乎一样。需要注意的是Cypher中的列表和Python一样,可以包含不同类型的元素,如 RETURN [[1, 2], 3, 1, 5.2, "sss"] 。

1、range
定义:range(start, end, step)
其中step可以省略,默认值是1,需要注意:
* 返回结果包含start和end。
* start、end、step必须是Integer 类型。
* 如果start==end,则只返回一个元素的列表。
* 如果start > end,则返回一个负数。
* 如果start > end,且step < 0,则返回一个递减的列表。

2、列表索引
下标索引:RETURN [1,2,3,4][1]      //返回2
倒序索引:RETURN [1,2,3,4][-1]     //返回4
范围索引:RETURN [1,2,3,4][1..3]  //返回[2,3],注意返回的是列表,不包括4
范围索引:RETURN [1,2,3,4][-2..]   //返回[3,4]
越界索引:RETURN [1,2,3,4][2..9]  //只返回[3,4]
越界索引:RETURN [1,2,3,4][7..9]  //返回一个空列表 []
越界索引:RETURN [1,2,3,4][9]      //单个元素越界索引,返回 null

3、列表推导
列表推导是Cypher基于已有列表创建新的列表,可以和where等语句一起使用。功能类似于Python的map操作,也类似于lambda表达式,形式看起来和linux管道符号 | 一样,作用也类似,前面的输出作为后面的输入。
RETURN [x in range(1,3) | x^2]   //输出[1.0, 4.0, 9.0],注意这么写是错误的:RETURN [x^2 in range(1,3)]
RETURN [x in range(1,5) where x%2=0 | x^2]    //返回[4.0, 16.0]

4、列表函数
reverse:列表反转
reverse([1,2,3,4])

tail:跳过列表的第一个元素,在路径遍历的时候会用到
tail([1,2,3,4])


参考:https://blog.csdn.net/haveanybody/article/details/88861708

 

 

 

cypher关键字学习

 

 

 

查:match,merge

 

增:create,merge

 

删:delete,drop

 

改:set

 

 

 

 

件:where,case关键字  ,逻辑符号(<>=),正则表达式,关系匹配等

 

 

where:

 

 

 

 

 

case:

 

Cypher支持case条件表达式,它的逻辑类似于C语言中的if/else语句。一个CASE语句包含一个或多个WHEN-THEN子句,每个子句都是一个表达式。 case语句也可以包含一个ELSE子句,当之前的条件都不为真时,则执行该ELSE子语句,类似于C语言中的default。

CASE语句有两种语法:其中的一种语法等效于if-else语句,而另一种则类似于SWITCH语句。对于等效于IF-ELSE语句来说,系统会计算每个WHEN子句中的布尔条件,并执行条件为真的第一个语句块,即使有多个满足条件的WHEN子句,也只会执行第一个。仅当所有WHEN子句条件均为假时,才会执行末尾的ELSE子句(如果有)。如果所有WHEN子句的布尔条件都为假,且没有ELSE语句,则返回null。Cypher的case语法和gsql的case语法用法一样。end后面也可以接as语句。

(1)第一种写法

类似于C语言的if/else

return
case
when 1=2 then 1
when 2=2 then 2
when 3=3 then 3
else 4
end
上面的语句输出 2,并不会输出3。我们在做区间判断或者需要比较不同的字段的时候,常用这种写法。

(2)第二种写法

类似于C语言的switch

return
case 3
when 2 then 2
when 3 then 3
when 4 then 4
else 0
end
上面的语句输出 3,在使用的时候,我们常常通过match找到某个节点,对某个属性字段做不同处理。
 

参考:https://blog.csdn.net/haveanybody/article/details/88835941

 

 

 

逻辑符号:

 

 

 

 

 

 

 

正则表达式:

 

 

 

 

 

 

 

 

关系匹配相关操作

 

 

 

 

 

 

查询结果过滤:skip  ...    limit  ...  order by   ....

 

 

其他:union,unwind,foreach

 

union:(联合多个return输出结果关键字)

 

UNION可以组合两个或者两个以上的查询结果到一个结果中,需要注意一下几点:
(1)可以组合两个或者两个以上的查询结果。
(2)UNION和UNION ALL的用户不同,尤其需要注意UNION的用法。
(3)每个查询的结果列数和列名都必须相同。

1、可以组合两个或者两个以上的查询结果

unwind [1,2,3] as x
return x
union all
unwind [4,5,6] as x
return x
union all
unwind [7,8,9] as x
return x
上面结果输出1~9。

 

2、UNION和UNION ALL

UNION ALL会输出所有的查询结果,不做任何处理;UNION输出的时候会做去重处理,不仅仅是对不同查询结果之间做去重处理,而且还会对同一个查询的结果做去重处理。看下面两个查询。

unwind [1,2,1,2,3] as x
return x
union all
unwind [1,2,1,2,3] as x
return x
上面语句会输出:1,2,1,2,3,1,2,1,2,3。(实际上是换行输出。)

unwind [1,2,1,2,3] as x
return x
union
unwind [1,2,1,2,3] as x
return x
上面语句会输出:1,2,3,(实际上是换行输出。)而不是1,2,1,2,3。

 

3、每个查询的结果列数和列名都必须相同

下面查询是错误的,因为列名x、y不同。

unwind [1,2,3] as x
return x
union
unwind [4,5,6] as y
return y

参考:https://blog.csdn.net/haveanybody/article/details/89643606

 

 

 

unwind/foreach:遍历关键字

 

unwind:官方文档对于UNWIND的说明:With UNWIND, you can transform any list back into individual rows. 注意两点,list和individual rows,说明输入只要是列表就行,输出是每一个元素

示例:遍历列表一行行输出:

unwind [1,2,3,null] as x return x

 

foreach:主要用于列表更新操作

 

 

 

 

 

 

 

 

 

三 cypher中的函数学习

使用函数:

函数主要包括:断言函数,标量函数,字符串函数,类型转换函数,聚合函数,遍历函数等等

 

 

断言函数/布尔函数:

常用的有:all(), any(), exist,none,sigle。返回的是bool类型的值(True/False)

 

all():

用于判断列表中只要有一个数据为真就返回Ture。

用法:any(variable in list where 条件)   

例如:return any(x in [2,4,6,8] where x%2=0)    #返回true

 

 

any():

用于判断列表中只要有一个数据为真就返回Ture。

用法:any(variable in list where 条件)   

例如:return any(x in [1,2,3,4] where x%2=0)    #返回true

注意:return any(x in [] where x%2=0)        //返回false
           return any(x in [null] where x%2=0)  //返回null
           return any(x in [2.0] where x%2=0)   //返回true
 

 

exist():

exist用于判断实体是否存在某个属性。

示例: match (n) where exists(n.name) return n   #找出所有存在name属性的节点数据

 

 

none():

列表中的每个元素都不满足返回真

用法:none(variable in list where 条件)   

例如:return none(x in [1,3,5,7] where x%2=0)    #返回true

 

single():

用于判断列表中只要有一个数据为真就返回Ture。

用法:single(variable in list where 条件)   

例如:return single(x in [1,2,3,5] where x%2=0)    #返回true

return single(x in [1,2,3,4] where x%2=0) #返回false

 

标量函数:

常用的有:coalesce,startNode/endNode,head/last,randomUUD,id,size,length,properties,timestamp,

 

coalesce():

语法:coalesce(expression [, expression]*)
含义:返回参数中第一个不为null的值,如果都为null,则返回null。
Demo:MATCH (a) RETURN coalesce(a.hairColor, a.eyes)   //返回第一个存在的属性,只要有一个节点存在就返回,不存在的返回null
 

head和last

语法:head(list),last(list)
含义:返回列表的第一个/最后一个元素。
Demo:return head([3,null,1,2,3])   //返回3,return head([])   //返回null

 

id():

语法:id(expression)
返回:Integer
含义:返回节点或者关系的id

 

size

语法:size(list)
含义:返回一个列表或者字符串的长度,size(null)返回null。
返回:Integer
Demo:return size("www")

 

length

语法:length(path)
含义:返回路径的长度,输入是路径,length(null)返回null。
返回:Integer
Demo:match p=(n:Person{name:"p1"})-[*1..5]-(m) return length(p)
注意:length和size功能非常相似,length也可以用于计算string、list、pattern的长度,但是强烈建议只对path使用length,对其它类型长度的计算功能,后续可能被丢弃。
 

timestamp():

语法:timestamp()
含义:返回当前时间和1970年1月1日之间的毫秒值。
返回:Integer
Demo:RETURN timestamp()
注意:在整个查询执行期间,timestamp的值都是相同的,即不能使用timestamp计算一个查询的执行时间
 

 

 

 

 

 

 

 

字符串函数:

left()/right(),Itrm,rtrim,trim,replace(),reverse(),split(),substring(),contains()

 

 

ltrim、rtrim、trim

语法:lTrim(original)、rTrim(original)、trim(original)
含义:去除original左边、右边、两边空格
返回:String

 

 

3、replace

语法:replace(original, search, replace)
含义:使用replace替换original中的所有search字符串
返回:String

4、reverse

语法:reverse(original)
含义:翻转original
返回:String

5、split

语法:split(original, splitDelimiter)
含义:使用splitDelimiter切分original,需要注意的是当字符串首尾是分隔符时,首尾也会返回一个 ""
返回:列表
Demo:return split('w3w1w2w3w4w3', 'w3')       //返回  ["", "w1w2", "w4", ""]

6、substring

语法:substring(original, start [, length])
含义:获取original从start开始的length长子串,从0开始,包含start
返回:String

7、toLower

语法:toLower(original)、toUpper(original)
含义:转换original为小写、大写
返回:String

8、contains

语法:original contains substring
含义:contains并不是一个函数,是一个关键词,在字符串中使用也很方便,判断original中是否包含substring
返回:Boolean

 

 

 

 

 

 

 

 

 

类型转换函数:

常用的有:toBoolean(),toFloat(),toInteger(),toString(),type(),labedls()

 

 

 

 

labels():返回节点的标签列表

语法:labels(node)
含义:返回节点的Label,labels(null)返回null。
返回:list,因为节点可以有多个label
Demo:match(n:Person{name:"p1"})-[r]-(m) return labels(m)

 

 

 

 

 

聚合函数:

Cypher的聚合和别的语言不一样,比如在SQL中聚合是通过group by实现的,而在cypher中是通过聚合函数默认聚合的。看一个例子:
match(n:Person) return n.name, count(n.name)
表面上看没有做任何聚合操作,实际上,因为使用了聚合函数count,因此会自动根据前面字段做聚合操作,上述语句的意思是统计每个名字的使用次数(使用相同名字的个数)。      参考链接:https://blog.csdn.net/haveanybody/article/details/89387268

常用的聚合函数:例如:count,sum,avg,percentileDisc,percentileCont,stdev,stdevp,max/max,collect ,distinct?

 

 

 

 

 

 

 

 

 

 

 

遍历函数:

常用的遍历函数,例如;keys,labels,nodes,relationships,reduce

 

 

keys

语法:keys(expression)
含义:返回节点、关系或者map的属性列表
返回:List
Demo:MATCH (a) WHERE a.name = 'Alice'  RETURN keys(a)

2、labels

语法:labels(node)
含义:返回节点的所有标签列表,之所以返回是列表,是因为节点可以有多个label
返回:List
Demo:MATCH (a) WHERE a.name = 'Alice'  RETURN labels(a)

3、nodes

语法:nodes(path)
含义:返回路径上的所有节点
返回:List
Demo:MATCH p =(a)-->(b)-->(c) WHERE a.name = 'Alice' AND c.name = 'Eskil' RETURN nodes(p)

4、relationships

语法:relationships(path)
含义:返回路径上的所有关系
返回:List
Demo:MATCH p =(a)-->(b)-->(c) WHERE a.name = 'Alice' AND c.name = 'Eskil' RETURN relationships(p)

5、reduce

语法:reduce(accumulator = initial, variable IN list | expression)
含义:返回每个元素作用在表达式上的结果,类似于scala中的reduce函数
返回:由输入决定
Demo:return(init = 0, x in [1,2,3,4] | init+x) as sum   //求所有列表元素的和

 

 

 

其他函数如:

 

 

参考:https://blog.csdn.net/haveanybody/article/details/89644340

 

 

 

 

数据库管理:

社区版本好像不支持创建新的数据库提示错误:

Neo.ClientError.Statement.NotSystemDatabaseError

Unsupported administration command: create database customers

 

用户连接初始数据库后会存在两个数据库:neo4j和system数据库。neo4j为默认的存储数据的数据库,system为管理系统自动创建的数据库。

使用默认数据库      :use neo4j

使用系统数据库     :use system

显示系统数据库信息     show databases    #需要执行:use system操作

show database system  #显示某一个数据库信息

show default database  #显示默认的数据库

create database customers #创建数据库

#如果数据库存在的两种创建新数据库的方式

CREATE DATABASE customers IF NOT EXISTS #创建数据库如果数据库存在

CRETAE OR REPLACE DATABASE customers   #

STOP DATABASE customers #停用数据库

SHOW DATABASE customers #显示数据库

START DATABASE customers #开始数据库

SHOW DATABSE customers #显示数据库

DROP DATABASE customers if EXISTS #删除数据库

 

数据库索引:

 

 

角色管理:企业版支持,社区版很多功能限制,权限只能操作自己的一个角色

 

 

 

 

 

 

 

 

 

 

 

python连接neo4j数据库

 

先简单介绍一下 neo4j,Cypher,neo4j-driver之间的关系
neo4j 是一个图数据库,专门存储图结构, 图的定义;
Cypher 是Neo4J的声明式图形查询语言,类似于传统数据库的 SQL;
neo4j-driver python版本的Neo4J的驱动程序,实现python与Neo4J的交互,通过这个驱动就可以在python中使用Neo4J了,在python中使用 Cypher来操作图数据库。
py2neo python版本的Neo4J的驱动程序,不同的是,其可以直接用类似Python语法操作图数据库。建议使用 py2neo,更方便

 

https://blog.csdn.net/sa726663676/article/details/114671703

 

 

远程连接:bolt/http/https  (需要ip地址和端口号)

bolt连接方式:

 

 

https://blog.csdn.net/sa726663676/article/details/114671703

 

http/https连接方式:

 

将bolt关键字改为http关键字就变成了http连接了。

 

 

 

 

 

 

neo4j自定义函数开发

在Neo4j中,自定义函数是需求利用Java语言去独立开发,然后生成.jar文件去部署在图数据库的安装目录plugin中,如果是集群的话,每台服务器都需要部署。再重新启动图数据库才能生效。用户自定义函数,顾名思义就是开发一些个性化方法去解决复杂的业务逻辑问题。虽然它的功能还不够强大,但是足够去扩展和提升Neo4j的一些常用命令功能。

对于自定义函数的调用,它跟常用的Cypher方法一样,只是函数名的规范会有限定,比如自定义函数join,它在Java工程中的目录结构为org.neo4j.examples,因此它在调用时的规范写法为org.neo4j.examples.join(参数)。,自定义函数的结果输出类型很多

现有的Neo4j图数据库也包含了很多自定义的函数,你可以在正式实践之前去初步了解一下,在命令框输入:CALL dbms.procedures()即可查询到,结果输出包含了函数名、用法说明和功能描述。你后期的开发也可以按照这样的规范标准来。

 

部署好Java和Neo4j的环境之外,你最好去安装Maven软件,并配置到IDE中,因为它可以极大简化你开发的工作量。maven是一个项目管理工具,包含项目管理,插件以及目标的逻辑等。

自定义函数开发和存储可参考:https://blog.csdn.net/yuanyk1222/article/details/94558980

 

 

 

 

 

 

 

 

 

 

 


http://www.ppmy.cn/news/872891.html

相关文章

Neo4j图数据库(Cypher语法及数据库操作)

目录 二、唯一性语法3.1命名规则3.2表达式3.3命名规则和作用域3.4参数3.5操作符3.6模式&#xff08;Pattern&#xff09;3.6.1&#xff0c;节点模式3.6.2&#xff0c;关系模式3.6.3&#xff0c;路径模式 3.7投射和过滤3.7.1&#xff0c;Return子句3.7.2&#xff0c;with 子句3.…

Groovy 入门

Groovy 学习资料&#xff1a; https://www.bootwiki.com/groovy/index.html https://pan.baidu.com/s/1CKleLGL_s-VM7r17jJw3mA?pwdom66 1.为什么Groovy比较帅&#xff1f; 1&#xff09;Groovy是java平台上的脚本语言&#xff0c;抽象程度更高。 可以更简单快速地开发…

<Oracle database 10gSQL>开发指南笔记

1. Oracle中的函数 函数可以进行组合&#xff0c;如&#xff1a;select name UPPER(SUBSTR(name, 2, 8)) ... 1) 单行函数 字符函数、数字函数、转换函数、日期函数、正则表达式函数(10g) 转换函数就是从一种类型转换为另一种数据类型的函数。 2) 聚合函数 聚合函数同时对…

如何使用Ora2Pg迁移Oracle数据库到openGauss

Ora2Pg介绍 Ora2Pg是一个将Oracle迁移至PostgreSQL的开源工具&#xff0c;通过连接Oracle数据库&#xff0c;自动扫描并提取其中的对象结构及数据&#xff0c;产生SQL脚本&#xff0c;通过手动或自动的方式将其应用到PostgreSQL。 官方网站&#xff1a;https://ora2pg.darold…

【数据库迁移系列】从Oracle迁移到openGauss实战分享

之前的迁移系列中我们介绍了Mysql到openGauss的迁移方法&#xff0c;本篇介绍使用Ora2og工具从Oracle到openGauss数据库的迁移。 文章目录 简介迁移前准备环境软件安装ora2og工具安装创建迁移项目配置ora2pg.conf 测试迁移导出导入 Ora2Pg不足FAQ 简介 ora2pg 可以将 Oracle …

解决PostgreSQL强制类型转换,pg数据库转换数字时存在字符串报错,pgSQL字符串强转报错 的一种终极解决方法

正则表达式 1?(0|([1-9]\d*))(.\d)?$ 为匹配全数字&#xff0c;如果不全为数字则匹配失败&#xff1b; 例如&#xff1a; 123 成功 1234空格 失败 123d 失败 13d2 失败 <update id"updateToZero">update ${table} set ${name}0 where ${name} !~ ^[-]?(0|(…

写在读完《oracle database 10g SQL—master SQL and PL/SQL》之际

历时8个周,这本《oracle database 10g SQL—master SQL and PL/SQL》终于可以告一段落了。 从本书的开始,create table,添加约束的时候,出现了很多错误,然后google,借鉴别人的笔记; 到insert into table的时间处理,to_date(date,format)函数就可以添加成功, 其实在…

pgsql中的常用函数总结

PostgreSQL 常用函数 PostgreSQL 内置函数也称为聚合函数&#xff0c;用于对字符串或数字数据执行处理。 下面是所有通用 PostgreSQL 内置函数的列表&#xff1a; COUNT 函数&#xff1a;用于计算数据库表中的行数。MAX 函数&#xff1a;用于查询某一特定列中最大值。MIN 函…