为什么80%的码农都做不了架构师?>>>   

Neo4j-Cypher语言语法

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

转载于:https://my.oschina.net/fuyung/blog/1634863

Neo4j-Cypher语言语法相关推荐

  1. Neo4j / Cypher语言学习

    文章目录 1. 普通的Match: 查找John和John的朋友 2. 添加过滤条件的查询 3. 基础知识 模式 节点语法 关系语法 更新语句 返回语句 4. 唯一性 5. 设置Cypher查询的版本 ...

  2. Neo4j Cypher语言

    neo4j模糊查询 我与Neo4j用户一起工作时经常看到的一种建模方法是创建非常通用的关系(例如HAS,CONTAINS,IS),并在关系属性或端节点的属性/标签上进行过滤. ------------ ...

  3. c语言系统关键字6,C语言语法之关键字

    由ANSI标准定义的C语言关键字共32个: auto double int struct break else long switch case enum register typedef char ...

  4. neo4j基本知识及Cypher语言

    文章目录 1. neo4j中的基本概念 2. Cypher语言 1. neo4j中的基本概念 节点(node):表示一个实体记录.一个节点包含多个属性和标签,如上图中的Tom Hanks.Sleepl ...

  5. neo4j︱Cypher 查询语言简单案例(二)

    图数据库常规的有:neo4j(支持超多语言).JanusGraph/Titan(分布式).Orientdb,google也开源了图数据库Cayley(Go语言构成).PostgreSQL存储RDF格式 ...

  6. neo4j cypher_优化Neo4j Cypher查询

    neo4j cypher 上周,我花了很多时间来尝试优化大约20个使用实时系统数据执行的灾难性的Cypher查询(36866ms至155575ms). 经过一番尝试和错误,以及来自Michael的大量 ...

  7. 优化Neo4j Cypher查询

    上周,我花了很多时间尝试使用实时系统中的数据来优化大约20个执行失败的Cypher查询(36866ms至155575ms). 经过一番尝试和错误,以及来自Michael的大量投入,我能够大致确定对查询 ...

  8. neo4j︱Cypher完整案例csv导入、关系联通、高级查询(三)

    图数据库常规的有:neo4j(支持超多语言).JanusGraph/Titan(分布式).Orientdb,google也开源了图数据库Cayley(Go语言构成).PostgreSQL存储RDF格式 ...

  9. Neo4J Cypher neo4j-driver py2neo介绍与使用

    Neo4J Cypher neo4j-driver介绍与使用 neo4j介绍 关系型数据库和图数据库 图数据库的基本概念 Nodes Labels Relationship RelationshipT ...

最新文章

  1. 数据库里存json数据
  2. 使用级联功能实现蓝绿部署和金丝雀发布
  3. 移动端安全测试主要涉及_移动端测试之Monkey操作事件和参数
  4. selenium的使用教程3
  5. javaWeb服务详解(含源代码,测试通过,注释) ——Emp的Service层
  6. windows 下nodejs 升级无法通过n模块升级
  7. iOS 各种坐标系对比
  8. 图解 | 深入揭秘 epoll 是如何实现 IO 多路复用的!
  9. Oracle用户及角色的权限管理[Oracle基础]
  10. 锐捷交换机VRRP配置
  11. 无线上网认证之Portal认证
  12. java 调用阿里云中通快递查询示例
  13. 2G/3G/4G/5G
  14. CentOS7安装配置BareOS备份工具
  15. RuntimeError: mat1 and mat2 shapes cannot be multiplied (5760x6 and 128x4)
  16. 使用mac的加速办法
  17. C# 调用微信接口上传素材和发送图文消息
  18. UE4,UE5虚幻引擎源码版下载
  19. 半导体无尘车间测试尘埃粒子浓度等级设备
  20. 互联网行业人事频繁变动:高速发展之忧

热门文章

  1. python开发软件行么-python适合开发桌面软件吗?
  2. php和python写爬虫-为什么写爬虫都喜欢用python?
  3. python 编程入门-Python编程入门电子书教程,看这几个就够了
  4. python编程培训-课程:尹会生的Python编程培训课程
  5. python中and与or的执行顺序-关联子查询的执行顺序是什么
  6. flood fill算法
  7. LeetCode Excel Sheet Column Number(进制转换问题)
  8. python中的多继承
  9. Linux 利用busybox制作根文件系统
  10. 【CODEVS2776】寻找代表元