Neo4j图形数据库教程

目录

参考

图数据库、关系型数据库 

Delete、Remove

案例

1、创建节点

2、创建结构关系

3、显示结果

3.1 一般显示

3.2、筛选出子孙绵延四代的树干

3.3、 筛选出存在三代子孙的树干

3.4、 筛选出某个节点为顶点的三代子孙树干

4、延申 -再加入数据

5、深度运算符[*1..3]+With


参考

1、  史上最全面的Neo4j使用指南

2、 re

3、【Neo4j学习】应用案例

4、 Neo4j 图数据库在社交网络等领域的应用


图数据库、关系型数据库 

图形数据库

以图形结构的形式存储数据的数据库。 它以节点,关系和属性的形式存储应用程序的数据;GDBMS以“图形”的形式存储数据

RDBMS(关系型数据库)

以表的“行,列”的形式存储数据

Tables 表  Graphs 图表
Rows 行      Nodes 节点
Columns and Data 列和数据 Properties and its values属性及其值

 CREATE (:)

节点标签:相当于表  (注意:这里表述的是节点标签)

节点:       相当于行


Delete、Remove

DELETE

删除节点和关系

REMOVE

删除节点或关系的标签:

MATCH (m:Movie) 

REMOVE m:Picture

删除节点/关系的属性  :

MATCH (book { id:122 })
REMOVE book.price
RETURN book

类似:

ALTER TABLE BOOK REMOVE COLUMN PRICE;
SELECT * FROM BOOK WHERE ID = 122;

案例

1、创建节点

create(suxun:Person{name:"苏洵",age:80,sex:"男"})
create(sushi:Person{name:"苏轼",age:53,sex:"男"})
create(suzhe:Person{name:"苏辙",age:51,sex:"男"})
create(suxiaomei:Person{name:"苏小妹",age:45,sex:"女"})
create(susun:Person{name:"苏孙",age:29,sex:"男"})
create(suxiaosun:Person{name:"苏重孙",age:6,sex:"女"})

2、创建结构关系

match(p1:Person),(p2:Person)
where p1.name="苏洵" and p2.name = "苏轼"
create (p1) -[parent:Parent{relation:"父亲"}]-> (p2);

match(p1:Person),(p2:Person)
where p1.name="苏洵" and p2.name = "苏辙"
create (p1) -[parent:Parent{relation:"父亲"}] -> (p2);


match(p1:Person),(p2:Person)
where p1.name="苏洵" and p2.name = "苏小妹"
create (p1) -[parent:Parent{relation:"父亲"}] -> (p2);

match(p1:Person),(p2:Person)
where p1.name="苏轼" and p2.name = "苏孙"
create (p1) -[parent:Parent{relation:"父亲"}] -> (p2);


match(p1:Person{name:"苏孙"}),(p2:Person{name:"苏重孙"})
create (p1) -[parent:Parent{relation:"父亲"}] -> (p2);

 以上用了两种方式: 

  • 第一种用where进行节点筛选,例如 where p1.name="苏洵" and p2.name = "苏轼"
  • 第二种用属性进行节点筛选,例如match(p1:Person{name:"苏孙"}),(p2:Person{name:"苏重孙"})

3、显示结果

3.1 一般显示

match(a)-[r:Parent]->(b) return a, r, b

Neo4j图形数据库教程_第1张图片

3.2、筛选出子孙绵延四代的树干

match(a)-[r1:Parent]->(b)-[r2:Parent]->(c)-[r3:Parent]->(d) return a,  b, c, d

Neo4j图形数据库教程_第2张图片

3.3、 筛选出存在三代子孙的树干

Neo4j图形数据库教程_第3张图片

可以发现,查出来的图形虽然是只有一条链路,但其实代表两条数据,各三级节点,如下

Neo4j图形数据库教程_第4张图片

3.4、 筛选出某个节点为顶点的三代子孙树干

match(a{name:"苏洵"})-[r1:Parent]->(b)-[r2:Parent]->(c) return a,  b, c

Neo4j图形数据库教程_第5张图片

 

4、延申 -再加入数据

create(caocao:Person{name:"曹操",age:70,sex:"男"})
create(caozhi:Person{name:"曹植",age:43,sex:"男"})
create(caopi:Person{name:"曹丕",age:41,sex:"男"})

Neo4j图形数据库教程_第6张图片


match(p1:Person),(p2:Person)
where p1.name="曹操" and p2.name = "曹植"
create (p1) -[parent:Parent{relation:"父亲"}] -> (p2)

match(p1:Person),(p2:Person)
where p1.name="曹操" and p2.name = "曹丕"
create (p1) -[parent:Parent{relation:"父亲"}] -> (p2)

Neo4j图形数据库教程_第7张图片

如果只要查出曹操家族的图:

match(a)-[r:Parent]->(b) where a.name="曹操"  return a, r, b

Neo4j图形数据库教程_第8张图片

如果只要查出苏洵家族的图(一层):

match(a)-[r:Parent]->(b) where a.name="苏洵"  return a, r, b

Neo4j图形数据库教程_第9张图片

如果查出苏洵家族的图(所有):

用深度运算符解决:

match data=(a:Person{name:"苏洵"})-[*1..3]->(b:Person) return data

 Neo4j图形数据库教程_第10张图片

5、两个节点直接有多种关系 

match(p1:Person),(p2:Person)
where p1.name="曹操" and p2.name = "曹植"
create (p1) -[fz:FZ{relation:"臣子"}] -> (p2)

查询所有关系 :

  MATCH p=()-[r:FZ]->() RETURN p

 Neo4j图形数据库教程_第11张图片

查询一个关系:

暂时不知道怎么实现,知道的大神麻烦留言!

5、深度运算符[*1..3]+With

 

参考:关于neo4j查询多深度关系节点

 

你可能感兴趣的:(大数据)