一. Cypher介绍
“Cypher”是一个描述性的图形查询语言,允许不必编写图形结构的遍历代码对图形存储有表现力和效率的查询。Cypher还在继续发展和成熟,这也就意味着有可能会出现语法的变化。同时也意味着作为组件没有经历严格的性能测试。
Cypher设计的目的是一个人类查询语言,适合于开发者和在数据库上做点对点模式(ad-hoc)查询的专业操作人员。它的构念是基于英语单词和灵巧的图解。
Cyper通过一系列不同的方法和建立于确定的实践为表达查询而激发的。许多关键字如like和order by是受SQL的启发。模式匹配的表达式来自于SPARQL。正则表达式匹配实现实用Scala programming language语言。
Cypher是一个申明式的语言。对比命令式语言如Java和脚本语言如Gremlin和JRuby,它的焦点在于从图中如何找回(what to retrieve),而不是怎么去做。这使得在不对用户公布的实现细节里关心的是怎么优化查询。
Neo4j使用Cypher查询图形数据,和SQL很相似,Cypher语言的关键字不区分大小写,但是属性值,标签,关系类型和变量是区分大小写的。
注:不理解一些概念的童鞋可以参考https://blog.csdn.net/zfqbd/article/details/78857643
二. Cypher语法
Neo4j的主要构建块是:节点、关系、属性,CQL命令用来操作这三个构建块,我们使用CQL基本命令来描绘如图所示的关系:
- Neo4j CQL - CREATE命令 创建节点或者关系
CREATE (<node-name>:<label-name>)
CREATE (emp:Employee)
// 这里emp是一个节点名
// Employee是emp节点的标签名称
//创建无属性节点
create (p:Person)
//创建多个标签 标签Person标签People
create (p:Person:People)
//创建带属性节点
CREATE (
<node-name>:<label-name>
{
<Property1-name>:<Property1-Value>
........
<Propertyn-name>:<Propertyn-Value>
}
)
create (p:Person{name:"刘备",word:"玄德",horse:"的卢",weapon:"双股剑",sex:"男"})
create (p:Person{name:"关羽",word:"长生",horse:"赤兔",weapon:"青龙偃月刀"})
create (p:Person{name:"张飞",word:"翼德",horse:"王追",weapon:"丈八蛇矛"})
create (p:Person{name:"曹操",word:"孟德",horse:"绝影",weapon:"青虹剑"})
create (p:Person{name:"孙权",word:"仲谋",horse:"快航",weapon:"白虹剑"})
//创建无属性的关系
match(p:Person),(g:Person)
where p.name="刘备" and g.name="关羽"
create(p)-[r:MY_GENERAL]->(g)
//创建带属性的关系 r是关系名称, MY_ENEMY是一个关系标签名称
match(p:Person),(g:Person)
where p.name="刘备" and g.name="孙权"
create(p)-[r:MY_ENEMY{relative:"0"}]->(g)
return r
- Neo4j CQL - MATCH命令(从数据库获取有关节点和属性的数据,从数据库获取有关节点,关系和属性的数据)
MATCH(<node-name>:<label-name>)
match (p:Person) //匹配模式,无return返回报错, 一般和return配合使用
- Neo4j CQL - RETURN子句(返回感兴趣的结果)
语法: RETURN <node-name>.<property1-name>, ........ <node-name>.<propertyn-name>
match (p:Person)
return p.name
- Neo4j CQL - DELETE删除 (删除节点和关联关系,与MATCH命令一起使用。 语法如下:
)
DELETE <node-name-list>
DELETE节点和关系子句语法
DELETE <node1-name>,<node2-name>,<relationship-name>
// 删除节点
match (p: Person)
where p.name="刘备"
delete p
// 删除关系
MATCH (p: Person)-[r:MY_GENERAL]-(g:Person)
DELETE r
// 删除两个节点和一个关系
MATCH (cc: CreditCard)-[rel]-(c:Customer)
DELETE cc,c,rel
- Neo4j CQL - REMOVE删除