Cypher简介
Cypher查询语言,即CQL,是Neo4j图形数据库的查询语言。
实体/关系表示
实体表示:表示一个id值为“person1”的Person类型的实体,并记其名字为a
(a:Person {id:"person1"})
关系表示:表示一个actor关系,并记其名字为r
[r:actor]
实体/关系创建
实体创建:
CREATE(:Person {id:"acld9527",name:"王大锤"})
关系创建:要求涉及到的两个实体a和b是已经存在的
MATCH (a:Person),(b:Person) WHERE a.name="黄渤" and b.name="宁浩"
CREATE (a)-[:KNOWS]->(b), (b)-[:KNOWS]->(a)
实体/关系查询
实体查询:
MATCH(p:Person) WHERE p.name="黄渤" RETURN p
关系查询:
MATCH (m:Movie)—[r:actor]—>(p:Person) WHERE p.name="黄渤" RETURN *
实体/关系删除
实体删除:
MATCH(p:Person) WHERE p.id="ac1d9527" DELETE p
关系删除:
MATCH (a:Person)-[r:KNOWS]-(b:Person) WHERE a.name="黄渤" and b.name="宁浩"
DELETE r
实体修改
MATCH(p:Person) WHERE p.id="ac1d9527" SET p.name="黄大锤"
最短路径查询
例:查询黄渤和汤姆·克鲁斯之间的最短路径
MATCH (a:Person),(b:Person),p=shortestpath((a)-[:actor*]-(b))
WHERE a.name="黄渤" and b.name="汤姆·克鲁斯"
RETURN p
CQL子句
- WHERE子句:过滤MATCH查询的结果
- SET子句:向现有节点或关系添加新属性
- DELETE子句:删除节点及和节点相关的关系
- REMOVE子句:删除节点或关系的现有属性
- ORDER BY子句:对MATCH查询返回的结果进行排序
- UNION子句:将两个不同的结果合并成一组结果(两组数据需要有相同的列名)
- LIMIT子句:限制查询返回的行数
- SKIP子句:跳过前几行,用法跟LIMIT相同
- MERGE子句:创建节点、关系和属性,如果要创建的节点已经存在于数据库中了(即数据库中存在一个这样的节点/关系/属性),就不再执行创建命令
CQL函数
- 字符串函数:用于在CQL查询中获取所需的结果
- UPPER
- LOWER
- SUBSTRING
- REPLACE
- 聚合函数:可以对属性进行聚合
- COUNT
- MAX
- MIN
- SUM
- AVG
- 关系函数:获取关系的开始节点/结束节点/ID/关系类型等细节
- STARTNODE
- ENDNODE
- ID
- TYPE
参考链接
官方文档:https://neo4j.com/docs/cypher-manual/current/
博文一:https://segmentfault.com/a/1190000039118684
博文二:https://www.zmonster.me/2019/04/30/neo4j-introduction.html
博文三:https://www.w3cschool.cn/neo4j/neo4j_cql_relationship_functions.html