Neo4j-Cypher语言语法

Neo4j-Cypher语言语法

本文是记录Neo4j图数据库中实用的Cypher语言语法。node

Cypher是什么

“Cypher”是一个描述性的类Sql的图操做语言。至关于关系数据库的Sql,可见其重要性。其语法针对图的特色而设计,很是方便和灵活。正则表达式

  • Cypher是一个申明式查询语言,适合于开发者和在数据库上作点对点模式(ad-hoc)查询。
  • Cypher经过一系列不一样的方法和创建于肯定的实践为表达查询而激发的。许多关键字如
  • like和order by是受SQL的启发。正则表达式匹配实现模仿Scala 语言。 学好Cypher是学好Neo4j的关键,也是核心所在!

Cypher语法

Create

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

match至关于sql中的selectsql

MATCH (n:Person) RETURN n limit 25

等价于:数据库

Select * from Person limit 25

Merge

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和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

order by 同sqlip

Limit 和 Skip

limit:显示多少行 skip:从最前面开始,跳过多少行开发

Union 和 Union all

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

In

和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

Cypher 索引

create index on:Person(id)
drop index on:Person(id)

注意:

  • 建立索引时不须要给索引发名称,只须要设置索引的字段便可
  • 经过该字段的查询都走索引 where in =

惟一约束 Constraint

给某个属性设置惟一约束

create constraint on (n:Person) assert n.id is unique
drop constraint on (n:Person) assert n.id is unique

执行计划 explain

相似sql

14220628_8Rao

经常使用函数

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
相关文章
相关标签/搜索