neo4j基本SQL操作

目录

一、图元素操作:查询、创建、删除

1、查询match

1.1 节点查询

1.2 关系查询 

1.3 路径查询

(1) 指定关系类型

 ① 全量查询

② 只针对特定的节点进行查询

(2)任意关系类型 

 ① 全量数据

② 只查看 通过指定层级 可相互关联的点:

③ id 去除重复的关系起始点和终结点,且对任意两点间的关系,只记录1次a--b

 2、创建create、merge

2.1 创建节点

(1) create:允许重复数据

(2)merge:重复数据会合并 

2.2 创建关系

(1)节点已存在,只创建关系

(2)新增两个节点,同时新增关系

3、删除图元素

3.1 delete:删除节点

3.2 detach delete:删除所有节点及关系

二、图元素属性操作

1、删除图元素的属性、标签:remove

1.1 删除指定属性

1.2 删除指定标签 

 2、更改节点标签:set


一、图元素操作:查询、创建、删除

1、查询match

1.1 节点查询
1、只查有限数量的点
MATCH (n:Person) RETURN n LIMIT 25

2、查询所有点(包括无关系的孤立点)以及 点间的关系
MATCH (n)
OPTIONAL MATCH (n)-[r]->()
RETURN n, r
1.2 关系查询 
1、无向查询(所有关系类型,包括a->b 和 b->a)
match (a:Company{name:"企业A"})-[r]-(b:Company{name:"企业C"}) return r

2、有向查询(只查a->b)
match (a:Company{name:"企业A"})-[r]->(b:Company{name:"企业C"}) return r
1.3 路径查询
(1) 指定关系类型

指定关系a-->b,就只能查询a-->b,不能查询b-->a

 ① 全量查询
MATCH (a:Company)-->(b:Company)
RETURN a.name AS 企业, b.name AS 关联企业, shortestPath((a)-[*]-(b)) AS 最短路径, length(shortestPath((a)-[*]-(b))) AS 最短路径长度
② 只针对特定的节点进行查询

可以在MATCH语句中添加更多的筛选条件,比如:

MATCH (a:企业 {name: '特定企业名'})-->(b:企业)
RETURN a.name AS 企业, b.name AS 关联企业, length(shortestPath((a)-[*]-(b))) AS 最短路径长度

如果点a在整个链路中与多个企业都有关系,那就会得到多条同一个a与不同b的数据。
只对节点a与其他企业节点之间的关系数量感兴趣,你可以通过计数这些记录来得到这个信息。例如:

MATCH (a:企业)-->(b:企业)
RETURN a.name AS 企业, count(b) AS 关联企业数量
(2)任意关系类型 

`a-[*..3]-b`关系中没有带箭头,且关系用*号表示,则代表查找任何类型的关系, 包括a->b 和 b->a。

数字3:表示最多通过3级关系连接的节点。

 ① 全量数据

查询所有2级路径可达的节点、及相互关系。

MATCH path=(a:Company)-[*..2]-(b:Company)
RETURN a.name AS 企业, b.name AS 关联企业, path

这种查询方式会查出很多无意义的路径,比如三点关系类型是a->b,b->a,a->c,但这个查询会查出:a->b,b->a,a->c, a->b->a->c, 很明显a->b->a->c里出现了“回转到自身”。

② 只查看 通过指定层级 可相互关联的点:

DISTINCT 去除重复的关系起始点和终结点,分别保留a->b和b->a。

比如,查询通过2级关系 可关联起来的所有Company节点:

MATCH p=(a:Company)-[*..2]-(b:Company)
RETURN DISTINCT a, b

`COLLECT()`函数在Cypher查询语言中是一个聚合函数,它用于将多个值组合成一个列表。

MATCH (a:Company)-[:竞争]-(b:Company)
RETURN a.name, COLLECT(b.name) AS competitors
③ id 去除重复的关系起始点和终结点,且对任意两点间的关系,只记录1次a--b

 查询a与b之间的层级关系,且只会统计一遍a与b之间的最短路径,不管是a到b 还是 b到a, 也不会统计绕一圈又回到自身的路径。

MATCH (a:Company), (b:Company)
WHERE id(a) < id(b)
MATCH p = shortestPath((a)-[*]-(b))
RETURN a, b, length(p) as Level

(a) 如果数据量过大导致查询效率慢,建议给关系层级设置最大值。比如只查最多15个层级的:

MATCH (a:Company), (b:Company)
WHERE id(a) < id(b)
MATCH p = shortestPath((a)-[*..15]-(b))
RETURN a, b, length(p) as Level

(b) MATCH (a:Company), (b:Company)会构建a、b的笛卡尔积。如果数据过大,可以逐条遍历:

MATCH (a:Company {name: '企业A'}), (b:Company)
WHERE id(a) < id(b)
MATCH p = shortestPath((a)-[*..15]-(b))
RETURN a, b, length(p) as Level

 2、创建create、merge

create不会去判断节点中是否有重复数据,只是添加;
merge等于是create+match,如果节点中有重复数据,就不会添加进去。
2.1 创建节点
(1) create:允许重复数据

语法格式:

create(nodename:labelname { Property1name:Property1Value ……. Propertynname:PropertynValue })

例子:

create (a:Person{name:"学生小李",personId:"1"})

create (a:Course{name:"机器学习课程",courseId:"2"})
create (a:Course{name:"机器学习课程",courseId:"2"})

match (a:Course{name="机器学习课程"}) return a;
发现有2条重复的。
(2)merge:重复数据会合并 
1、使用merge重复插入2条相同的数据
merge (a:Course{name:"机器学习课程2",courseId:"3"})
merge (a:Course{name:"机器学习课程2",courseId:"3"})

2、查询数据
match (a:Course{name="机器学习课程2"}) return a;
发现只有一条。
2.2 创建关系
(1)节点已存在,只创建关系

语法格式:

MATCH (nodename1:labelname { Property1name:Property1Value ……. Propertynname:PropertynValue }),(nodename2:labelname { Property1name:Property1Value ……. Propertynname:PropertynValue }) CREATE (nodename1)-[r:relationship]->(nodename2)

例子:

MATCH (a:Person{name:"学生小李"}),(b:Course{name:"机器学习课程"}) CREATE (a)-[r:学习]->(b)
(2)新增两个节点,同时新增关系

例子:

create (a:Course{name:"Java课程",courseId:"1"}),(b:Book{name:"Java教材",bookId:"1"}) with a,b create (a)-[r:引用]->(b);

3、删除图元素

delete 删除图元素(节点、关系、或路径);
如果节点存在关系,删除节点需要先删除关系,可以使用 detach delete。

3.1 delete:删除节点
1、仅删除无关系的节点
match (n : User) delete n 
2、仅删除指定节点间的关系
MATCH (a:Company)-[r:竞争]->(b:Company)
WHERE a.name = '企业D' AND b.name = '企业A'
DELETE r;
3.2 detach delete:删除所有节点及关系
1、删除n节点及其关联的所有关系
match (n) detach delete n
2、删除1个重复节点及其关系
MATCH (n: User {name: 'xxx'}) 
WITH n LIMIT 1 
DETACH DELETE n 
3、删除指定节点和关系
MATCH (a:Course{name:"Java课程",courseId:"1"})-[r:引用]-(b:Book{name:"Java教材",bookId:"1"}) 
delete a,r,b

二、图元素属性操作

1、删除图元素的属性、标签:remove

1.1 删除指定属性
match (a{name:"tom"}) remove a.age return a
1.2 删除指定标签 

(1)单标签 

match (n {name:"peter"}) remove n:Chinese return n

(2)多标签 

match (n {name:"peter"}) remove n:Chinese:Man return n

 2、更改节点标签:set

MATCH (n)
WHERE ID(n) = 14
REMOVE n:Teacher
SET n:Student

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值