neo4j图数据库入门(二)

一、CQL语言

neo4j提供了cyber query language(CQL)实现对图形数据库中数据的查询、更新、节点关系分析等常用操作;CQL语言主要提供给了以下几类命令:

1、Create 创建节点:

CREATE (
   <node-name>:<label-name>
   { 	
      <Property1-name>:<Property1-Value>
      ........
      <Propertyn-name>:<Propertyn-Value>
   }
)

示例:

CREATE (LivT:Person {name:'Liv Tyler', born:1977})

说明:创捷了命名为LivT的节点,该节点发为Person类型,具有name、born属性

2、创建节点的同时和创建节点间关系

CREATE (
   <node-name>:<label-name>
   { 	
      <Property1-name>:<Property1-Value>
      ........
      <Propertyn-name>:<Propertyn-Value>
   }
)<-[:relation-name{<Property1-name>:<Property1-Value>
      ........
      <Propertyn-name>:<Propertyn-Value>}]-(<node-name>:<label-name>
   { 	
      <Property1-name>:<Property1-Value>
      ........
      <Propertyn-name>:<Propertyn-Value>
   }
)

2、查询语句

1)、查询符合条件的的节点数据

 match (<node-name>:<label-name>{query-name:query-value}) return node-name 

2)、查询符合条件的节点及节点间关系

match(
   <node-name>:<label-name>
   { 	
   <query-name:>:<query-value>

........
<query-name:>:<query-value>
}
)<-[:relation-name{

<query-name:>:<query-value>
........
 <Propertyn-name>:<Propertyn-Value>}]
-(<node-name>:<label-name>
{ 	

 <query-name:>:<query-value>

........
<query-name:>:<query-value>
}
)  return node-name,relation-name...
备注:查询关系时,关系和节点必须设置方向

3)、利用where语句进行数据查询

match(
   <node-name>:<label-name>   
)<-[
relation-name:relation-label]
-(<node-name>:<label-name>)   where condition
return node-name,relation-name...
where 支持对节点进行条件设置,多个条件间可以通过 and、or、not等条件运算符进行连接

4)创建已有节点间关系,即:先查询节点,获得节点后创建节点间关系

match
(
   <node-name1>:<label-name1>   
),
(
   <node-name2>:<label-name2>   
) where condition 
create (node-name1)<-[:relation-name1{relation-prop1:relation-value1,.....}]-(node-name2)

5)直接查询节点及其关系

match ss=(m:node-label1)<-[r:ACTED_IN{relation-prop:relation-value}]-(p:node-label2)  return ss limit 2
3、数据删除

neo4j采用删除查询结果的方式删除数据,需要首先进行节点查询,然后再执行删除。示例如下:

match (p:Person{name:'Tom Hanks'}) detach delete p

该示例删除名称为Tom Hanks 的Person类型节点及其所有关联关系

4、移除属性

match (p:Person{name:'Tom Hanks'}) remove p.name

相当于移除了具有名称为Tom Hanks节点的name属性

5、更改节点的属性值

match (p:Person{name:'Tom Hanks'}) set p.name='TOM HANKS',p.born=1955
6、排序

match (p:Person{name:'Tom Hanks'}) return p order by p.name

类似sql  desc 表示降序、asx 表示升序

7、并集

match (p:Person{name:'Tom Hanks'}) return p union  match (pp:Person{name:'Tom Hanks'}) return  pp

备注:union和自动过滤两个结合间的重复记录,而union  all不过滤重复记录

8、限制结果集的返回数量

match (p:Person{name:'Tom Hanks'}) return p limit 2

当查询结果集的数量大于限制数量时,系统返回顶部的两条数据

9、merge命令

该命令 功能类似于create,但create创建节点时不进行重复节点检查,而merge检查节点是否已存在,只创建不存在的节点

10、NULL节点

create (p:Person)

上述命令将创建一个属性全为NULL的Person节点;

match (p:Person)  where p.name is NULL detach delete p

该命令将删除名称属性为空的Person节点

11、常用函数

UPPER---大写转换;LOWER---小写转换;SUBSTRING---求子串; COUNT--计数;MAX--求最大;MIN--求最小

AVG---求平均;SUM---求和;STARTNODE--求取关系中的起始节点;ENDNODE---求取关系中的结束节点;ID--求取节点id值;TYPE---求取关系的类型;

12、复杂查询

已电影及其参与人员图为例,说明如下:

查找参与过电影“Cloud Atlas”演出、导演、制作的人员参与的其它电影

pp=(m:Movie) <-[]- (people:Person)-[]->(:Movie {title: "Cloud Atlas"})  return pp

查找与电影“Cloud Atlas”有0到2跳关系的人员

MATCH pp= (people:Person)-[*0..2]-(:Movie {title: "Cloud Atlas"})  return pp
查找演员Hugo Weaving参演电影的全部参演人员
MATCH pp= (people:Person{name:'Hugo Weaving'})-[:ACTED_IN]->(:Movie)-[]-(p:Person)  return pp

推荐没有与tom hanks合作过的演员与Tom Hanks合作

MATCH (tom:Person {name:"Tom Hanks"})-[:ACTED_IN]->(m)<-[:ACTED_IN]-(coActors),
      (coActors)-[:ACTED_IN]->(m2)<-[:ACTED_IN]-(cocoActors)
WHERE NOT (tom)-[:ACTED_IN]->()<-[:ACTED_IN]-(cocoActors) AND tom <> cocoActors
RETURN cocoActors.name AS Recommended, count(*) AS Strength ORDER BY Strength DESC

推荐可以介绍Tom  Hanks 与Tom Cruies合作的人员

MATCH (tom:Person {name:"Tom Hanks"})-[:ACTED_IN]->(m)<-[:ACTED_IN]-(coActors),
      (coActors)-[:ACTED_IN]->(m2)<-[:ACTED_IN]-(cruise:Person {name:"Tom Cruise"})
RETURN tom, m, coActors, m2, cruise,COUNT(coActors)

查找Tom Hanks 与Tom Cruise 的最短合作路径

MATCH p=shortestPath(
  (bacon:Person {name:"Tom Hanks"})-[*]-(meg:Person {name:"Tom Cruise"})
)
RETURN p


猜你喜欢

转载自blog.csdn.net/u012846041/article/details/79892257