Neo4j-Cypher语言语法

梦飞扬
2018-03-15
264 阅读

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

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中的select

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命令一起使用。

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

同sql

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

常用函数

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 pmatch p=shortestPath((n:Person {id:'mama'})-[*..3]-(b:Person {id:'nainai'})) return p

-

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

posted @
2019-08-12 15:47 
星朝 
阅读(...) 
评论(...) 
编辑 
收藏

Neo4j-Cypher语言语法的更多相关文章

  1. neo4j初次使用学习简单操作-cypher语言使用

    Neo4j 使用cypher语言进行操作 Cypher语言是在学习Neo4j时用到数据库操作语言(DML),涵盖对图数据的增删改查  neo4j数据库简单除暴理解的概念: Neo4j中不存在表的概念, ...

  2. Neo4j Cypher语法(三)

    目录 5 函数 5.1 谓词函数 5.2 标量函数 5.3 聚合函数 5.4 列表函数 5.5 数学函数 5.6 字符串函数 5.7 Udf与用户自定义函数 6 模式 6.1 索引 6.2 限制 7 ...

  3. Neo4j数据和Cypher查询语法笔记

    Cypher数据结构 Cypher的数据结构: 属性类型, 复合类型和结构类型 属性类型 属性类型 Integer Float String: 'Hello', "World" B ...

  4. Go语言语法汇总(转)

    Go语言语法汇总 分类: 技术2013-09-16 14:21 3007人阅读 评论(0) 收藏 举报 go语言golang并发语法   目录(?)[+]   最近看了看GoLang,把Go语言的语法 ...

  5. C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com

    原文:C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | I ...

  6. R语言语法基础二

    R语言语法基础二 重塑数据 增加行和列 # 创建向量 city = c("Tampa","Seattle","Hartford"," ...

  7. R语言语法基础一

    R语言语法基础一 Hello world #这里是注释 myString = "hello world" print(myString) [1] "hello world ...

  8. L脚本语言语法手冊 0.10版

    L脚本语言语法手冊 0.10版       简  介 L脚本语言是一个轻量级的,旨在接近自然语言的编程语言,眼下支持在中文.英文基础上的编程.并可扩展为随意语种.L脚本语言的语法结构简单.程序结构相对 ...

  9. 嵌入式C语言自我修养 01:Linux 内核中的GNU C语言语法扩展

    1.1 Linux 内核驱动中的奇怪语法 大家在看一些 GNU 开源软件,或者阅读 Linux 内核.驱动源码时会发现,在 Linux 内核源码中,有大量的 C 程序看起来“怪怪的”.说它是C语言吧, ...

随机推荐

  1. tp5.0x代码执行

    1.拿到站首先平复一下心情 看了一下robots.txt结构像dedecms,网站还存在CDN,日了狗看到这里其实都想放弃来着,懒癌晚期,然后接着使用云悉平台走了一波,看了一下得到真实IP,看来只给w ...

  2. erlang 开发建议

    * 确保没有任何编译警告 * Erlang中String采用list实现,32位系统中,其1个字符用8个字节的空间(4个保存value, 4个保存指针).因此string速度较慢,空间占用较大 * 在 ...

  3. js里json和eval()

    JSON * - JS中的对象只有JS自己认识,其他的语言都不认识 * - JSON就是一个特殊格式的字符串,这个字符串可以被任意的语言所识别, * 并且可以转换为任意语言中的对象,JSON在开发中主 ...

  4. day19 装饰器

    Python之路,Day7 = Python基础7 randomwrapper 包装材料:包装纸:书皮global a 全局的(也就是,函数最外面的那个)nonlocal a 局部的,上层的函数的变量 ...

  5. 小程序唤起App

    小程序[打开App]官方文档 微信开放平台 App分享小程序IOS开发 App分享小程序Android开发

  6. 修改sql server表字段的字符串

    网站标题被注入黑链接,使用sql脚本update修改字段内的字符串截取UPDATE [qds0460132_db].[dbo].[Blood_News]   SET [Blood_Name] = SU ...

  7. Delphi THashedStringList用法

    Delphi中的THashedStringList对象 Delphi在在IniFiles 单元中定义了THashedStringList类: THashedStringList = class(TSt ...

  8. elementUI中的隐藏组件el-scrollbar

    细心的人儿都会发现elementUI官网的滚动条样式优美,但是elementUI中并未给出这个滚动条组件,打开调试页面发现用到了el-scrollbar.问一下度娘发现早就有前辈们发现了这个问题并给出 ...

  9. Python中好用的模块们

    目录 Python中好用的模块们 datetime模块 subprocess模块 matplotlib折线图 importlib模块 Python中好用的模块们 datetime模块 ​ 相信我们都使 ...

  10. Ifconfig- Linux必学的60个命令

    1.作用 ifconfig用于查看和更改网络接口的地址和参数,包括IP地址.网络掩码.广播地址,使用权限是超级用户. 2.格式 ifconfig -interface [options] addres ...