本文是记录Neo4j图数据库中实用的Cypher语言语法。node
“Cypher”是一个描述性的类Sql的图操做语言。至关于关系数据库的Sql,可见其重要性。其语法针对图的特色而设计,很是方便和灵活。正则表达式
CREATE (erzi:Person {id:‘erzi’}), //erzi是别名 (baba:Person {id:'baba'}), (yeye:Person {id:'yeye',name:'zhangsan'}), (nainai:Person {id:'nainai'}), (mama:Person {id:'mama'}), (bozi:Person {id:'bozi'}), // 建立关系 (erzi)-[:fathor]->(baba), (baba)-[:fathor]->(yeye), (baba)-[:mother]->(nainai), (erzi)-[:mother]->(mama), (erzi)-[:girlFrend]->(bozi)
match
至关于sql中的selectsql
MATCH (n:Person) RETURN n limit 25
等价于:数据库
Select * from Person limit 25
merge
至关于Match or Create 有则match,无则Create函数
MERGE (n:Person { name: 'Ann' }) RETURN n
下面这两条语句的对比?设计
match (n:Person {id:'mama'}),(m:Person {id:'nainai'}) merge (n)-[:poxi]->(m) return n,m 和 match (n:Person {id:'mama'}) with n match (m:Person {id:'nainai'}) merge (n)-[:poxi]->(m) return n,m
DELETE和REMOVE主要区别 : DELETE操做用于删除节点和relation。 REMOVE操做用于删除标签label和属性。 Remove label 等同于drop table 两个命令都应该与MATCH命令一块儿使用。code
Match (n:Person {id:'baba'}) remove n.age return n MATCH (s:Teacher)-[r:teach]->(d:Student) delete r,s,d //删除与该关系相关的老师和学生及label MATCH (n:Test) remove n:Test //删除label
如何仅仅删除一个relation?索引
Match (a:Person),(b:Person) where a.id='erzi' and b.id='bozi' merge (a)-[r:FUQI]->(b) DELETE r
order by
同sqlip
limit
:显示多少行 skip
:从最前面开始,跳过多少行开发
Union
:把多段Match的return结果 上线组合成一个结果集,会自动去掉重复行; Union all
:做用同union,但不去重;
MATCH (n:Person) where n.age>20 RETURN n.id,n.age union all MATCH (n:Person) where n.id='erzi' RETURN n.id,n.age
和sql的区别就是使用[]中括号,而不是()括弧号
MATCH (n:Person) where n.age>20 RETURN n.id,n.age union all MATCH (n:Person) where n.id in ['erzi','bozi','baba'] RETURN n.id,n.age
create index on:Person(id) drop index on:Person(id)
注意:
给某个属性设置惟一约束
create constraint on (n:Person) assert n.id is unique drop constraint on (n:Person) assert n.id is unique
相似sql
Neo4j无 group by
UPPER
它用于将全部字母更改成大写字母。LOWER
它用于将全部字母改成小写字母。SUBSTRING
它用于获取给定String的子字符串。REPLACE
它用于替换一个字符串的子字符串。 Match (n:Person) return SUBSTRING(n.id,2,0),n.id汇集函数
COUNT
它返回由MATCH命令返回的行数。MAX
它从MATCH命令返回的一组行返回最大值。MIN
它返回由MATCH命令返回的一组行的最小值。SUM
它返回由MATCH命令返回的全部行的求和值。AVG
它返回由MATCH命令返回的全部行的平均值。 Match (n:Person) return count(*) Match (n:Person) return avg(n.age) 只包含age不为空的node查询最短路径
查询最短路径的必要性:6层关系理论:任何两个事物之间的关系都不会超过6层。 关系链路越短,表明这两个节点的关系越密切!
allShortestPaths
[*..n] 用于表示获取n层关系,显示全部的链路关系(Single shortest path) shortestPath
显示最短的链路(Single shortest path)
match p=allshortestPaths((n:Person {id:'mama'})-[*..3]-(b:Person {id:'nainai'})) return p match p=shortestPath((n:Person {id:'mama'})-[*..3]-(b:Person {id:'nainai'})) return p