neo4j的一些常用语法
最近需要建立关系图谱,因此接触到了Neo4j这种图数据库,以此做出关系的可视化,所以就来学习一下Neo4j的常用语法,Neo4j使用的是Cypher,简称为CQL。
create(stu:Student:Player{id:1,name:'yyk',class:132})
生成一个stu节点,节点标签是Student和Player,节点拥有id,name,class三个属性,属性值中的字符串用' ';
create(节点名称:节点标签{属性名:属性值,属性名:属性值...})
可以create没有属性的节点。
create总是创建节点
match & return & where
match(stu:Student) return (stu)
match(stu:Student{id:1}) return (stu.name)
match(stu:Student) where stu.id=1 return (stu)
match.return不能单独使用。
节点关系
create(tea:Teacher{id:1,name:'ljy'})
为了方便测试,先创建一个Teacher标签的节点
使用已有节点创建关系:
match (s:Student),(t:Teacher) create (t)-[r:TEACH{startTime:'2018-06-01'} ]->(s)
创建了一个TEACH关系,开始时间是2018-06-01
match (s:Student),(t:Teacher) create (t)<-[r:STUDY{startTime:'2018-06-01'} ]-(s)
创建了一个STUDY关系,开始时间是2018-06-01
使用新节点创建关系
create (t:Teacher{name:'ljy'})-[r:TEACH{startTime:'2018-06-01'} ]->(s:Student{name:'yyk'})
remove
删除节点的属性
match(t:Teacher) remove t.name
set
增加/修改节点属性
match(t:Teacher) set t.name='yyy' return t
为已存在的节点添加标签
match(t:Teacher) set t:Father return t
delete
删除节点/关系
match(t:Teacher) delete t
match(s:Student)-[r]-(t:Teacher) delete r,s,t
delete节点时,如果节点之间还有关系会报错
match(t:Teacher) detach delete t 直接将节点和关系一起删除
order by 排序
match(s:Student) return s order by s.id desc,s.name
union 合并查询结果
match(t:Teacher) return t.name
union
match(s:Student) return s.name
limit 限制返回值的个数,与order by一起用时反正order by后面
match(s:Student) return s order by s.id limit 2
skip 跳过前面几行
match(s:Student) return s order by s.id skip 2
返回第三行级以后的数据
in & null
match(s:Student) where s.id in[1,2] and s.name is not null return s
各关键词顺序
match(s:Student) where s.name='yyk' return s order by s.id skip 1 limit 2
模糊查询
match(s:Student) where s.name=~'.*abc.*'
查询name包含abc的节点
同一个模式中,同一个关系不会出现两次
关系:a-好友-b-好友-c
查询a的好友的好友==查询b的好友
match(a:Student{name:'a'})-[:friends]-(b)-[:friends]-(ff)
或者
match(a:Student{name:'a'})-[:friends]-(b),(b)-[:friends]-(ff) return ff
只返回 c,并不会返回a自己。
match(a:Student{name:'a'})-[:friends]-(b) match(b)-[:friends]-(ff) return ff
通过多个match延伸匹配关系,会返回c和a