Neo4j 系列
1、图数据库 Neo4j 学习随笔之基础认识
2、图数据库 Neo4j 学习随笔之核心内容
3、图数据库 Neo4j 学习随笔之基础操作
4、图数据库 Neo4j 学习随笔之高级操作
5、图数据库 Neo4j 学习之JAVA-API操作
6、图数据库 Neo4j 学习之SpringBoot整合
Neo4j - CQL 使用
Neo4j 的 Cypher 语言是为处理图形数据库而构建的,CQL 代表 Cypher 查询语言。
类似 关系型数据库的 SQL 语言。
文章目录
前言
- CQL 是Neo4j 图形数据库的查询语言;
- 是一种声明性模式匹配语言;
- CQL 遵循 SQL 语法;
- 语法简单并且简单人性化,可读性高;
—> 附上官网语法通道
一、load
1.1 load csv
将csv文件的数据导入到Neo4j中。
load csv from 'D:\xxx.csv' as line create (:drama {name:line[0], label:line[1]})
二 create 创建
2.1 创建单节点
create (paper)
2.2 创建多节点
create (customer),(users)
2.3 创建节点(带属性)
创建一个带标签的节点并返回节点;
create (n:loveperson {name:'赵四', age:55, gender:'男'}) return n
创建了一个节点,属性值是手机信息。
2.4 创建关系
根据属性图模型,关系应该是定向的,否则,Neo4j将抛出错误信息。
2.4.1 单向关系
创建节点带关系;
create (z:loveperson {name:'赵四'})-[rel:亲家]->(l:loveperson {name:'刘能'}) return type(rel)
很多时候,在已有的节点上创建关系:
match (z:loveperson {name:'赵玉田'}),(l:loveperson {name:'翠花'})
create (z)-[rel:对象 {status:'未婚'}]->(l)
return type(rel)
2.4.2 双向关系
创建节点带双向关系;
create family=(:loveperson {name:'王小蒙', age:26, gender:'女'})<-[rel:夫妻 {status:'已婚'}]-(:loveperson {name:'谢永强', age:27, gender:'男'})-[rel2:父子]->(:loveperson {name:'谢广坤', age:58, gender:'男'}) return family
2.4.3 一对多创建关系
现在我们保持了很多象牙山村的村民们的信息,所以要给他们所有人都和象牙山村绑定(村民)的关系;
首先要匹配出来所有 loveperson 标签的人和 象牙山村节点,再用 create 给他们绑定关系是村民,最后返回这些关系的 id 值。
match (p:loveperson),(l:local {title:'象牙山村'})
create (l)-[rel:`村民`]->(p)
return id(rel)
三 match 匹配
3.1 匹配节点
匹配 name 是 ‘翠花’ 的村民
match (n:loveperson {name:'翠花'}) return n
3.2 匹配关系节点详细信息
匹配 标签是 loverperson 的全部节点和关系的信息,限制条数
match (n:loveperson)-[rel]->(m:loveperson) return n,m limit 10
3.3 匹配和节点有关系的节点
匹配找出“象牙山村”的所有村民们
match (:local {title:'象牙山村'})-[:`村民`]->(p:loveperson) return p
四 return 返回
匹配 姓名是 ‘翠花’ 的 村民
match (n:loveperson {name:'翠花'}) return n
4.1 返回节点或关系属性
match (n:loveperson) return id(n), n.name, n.age
五 where 条件
where后面匹配多个条件,姓名是 赵四 或者 翠花 的村民
match (n:loveperson) where n.name='翠花' or n.name = '赵四' return n
5.1 按照id 查询
用where 对 id 是 91 的节点获取
match (n) where id(n)=91 return n
5.2 按照节点属性查询
和 3.3 一样,我要找出象牙山村的所有村民;
首先指定,节点和节点的关系是 ‘村民’ 关系,再用 where 指定是 ‘象牙山村’。
match (l:local)-[:`村民`]->(p:loveperson) where l.title='象牙山村' return p
六 delete 删除
6.1 按条件 删除节点
删除 姓名 是 ‘宋晓锋’ 的村民
match (n:loveperson {name:'宋小宝'}) delete n
6.2 按条件 删除关系
match (n:loveperson {name:'宋小宝'})-[rel]->(m) delete rel return n
七 remove 删除
7.1 移除节点的属性
match (n:loveperson {name:"宋晓峰"}) remove n.gender
7.2 移除节点的标签
1、首先添加一个具有多个标签的节点
create (n:loveperson:person {name:"宋晓峰", age:28, gender:"男"}) return n
2、移除掉节点的标签
match (n:loveperson:person {name:'宋晓峰'}) remove n:person return n
八 set 添加或修改属性
8.1 根据id修改属性
match (n:loveperson) where id(n) = 130 set n.age = 30 return n
8.2 根据id修改关系(补)
在我们初始创建节点和关系错误的时候,我们需要修改关系,也就是 type,关系的类型,其实也就是删除原来的关系建立新关系。
match (n:loveperson)-[rel]->(m:loveperson) where id(rel)=99
create (n)-[r:仇人]->(m)
delete rel
return type(r)
九 order by 排序
9.1 按照 age 进行升序排序
neo4j 在 match 命令中提供了 ‘order by’ 子句,对 match 返回的结果进行排序。
match (n:loveperson) return n order by n.age asc
十 union 子句
10.1 union 两个结果中的公共组合并返回一组结果中 (去重)
match (n:loveperson) return n.name as name
union
match (m:person) return m.name as name
10.2 union all 两个结果中的所有行组合成一个单一的结果集 (不去重)
match (n:loveperson) return n.name as name
union all
match (m:person) return m.name as name
十一 limit 和 skip 使用
11.1 limit 限制返回2个节点
match (n:loveperson) return n limit 2
11.2 skip 跳过2个节点
match (n:loveperson) return n skip 2
当然 limit 和 skip 一般都是一起使用,用于分页效果。
总结
本文主要记录了 neo4j 的简单操作(增、删、改、查)的各种 命令 的简单使用,还有 order by, union, skip , limit 这些常用的命令,笔记是学过知识的记录,也是增强记忆的方法,毕竟是亲手 尝试 并且 手敲上去的,留给自己,也分享给他人,有错误敬请留言指出。
图数据库 Neo4j 学习随笔之高级操作待续~~~