Neo4j-Cypher语言语法
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 pmatch p=shortestPath((n:Person {id:'mama'})-[*..3]-(b:Person {id:'nainai'})) return p
 
 -
本文是记录Neo4j图数据库中实用的Cypher语言语法。
Neo4j-Cypher语言语法的更多相关文章
- neo4j初次使用学习简单操作-cypher语言使用
		
Neo4j 使用cypher语言进行操作 Cypher语言是在学习Neo4j时用到数据库操作语言(DML),涵盖对图数据的增删改查 neo4j数据库简单除暴理解的概念: Neo4j中不存在表的概念, ...
 - Neo4j Cypher语法(三)
		
目录 5 函数 5.1 谓词函数 5.2 标量函数 5.3 聚合函数 5.4 列表函数 5.5 数学函数 5.6 字符串函数 5.7 Udf与用户自定义函数 6 模式 6.1 索引 6.2 限制 7 ...
 - Neo4j数据和Cypher查询语法笔记
		
Cypher数据结构 Cypher的数据结构: 属性类型, 复合类型和结构类型 属性类型 属性类型 Integer Float String: 'Hello', "World" B ...
 - Go语言语法汇总(转)
		
Go语言语法汇总 分类: 技术2013-09-16 14:21 3007人阅读 评论(0) 收藏 举报 go语言golang并发语法 目录(?)[+] 最近看了看GoLang,把Go语言的语法 ...
 - C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com
		
原文:C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | I ...
 - R语言语法基础二
		
R语言语法基础二 重塑数据 增加行和列 # 创建向量 city = c("Tampa","Seattle","Hartford"," ...
 - R语言语法基础一
		
R语言语法基础一 Hello world #这里是注释 myString = "hello world" print(myString) [1] "hello world ...
 - L脚本语言语法手冊 0.10版
		
L脚本语言语法手冊 0.10版 简 介 L脚本语言是一个轻量级的,旨在接近自然语言的编程语言,眼下支持在中文.英文基础上的编程.并可扩展为随意语种.L脚本语言的语法结构简单.程序结构相对 ...
 - 嵌入式C语言自我修养 01:Linux 内核中的GNU C语言语法扩展
		
1.1 Linux 内核驱动中的奇怪语法 大家在看一些 GNU 开源软件,或者阅读 Linux 内核.驱动源码时会发现,在 Linux 内核源码中,有大量的 C 程序看起来“怪怪的”.说它是C语言吧, ...
 
随机推荐
- caffe安装 总结
			
用的是matlab2018a,搞了一天 ubuntu 系统下的Caffe环境搭建 https://blog.csdn.net/hjimce/article/details/48781693 caffe ...
 - linux 服务器安装mysql5.6
			
1.移除CentOS默认的mysql-libs: whereis mysql 2.为了避免冲突,先移除CenttOS上默认的mysql-libs: yum remove mysql-libs 3.然后 ...
 - The linux command 之存储媒介
			
一.常用的命令 mount:挂载文件系统 unmount:卸载文件系统 fdisk:硬盘分区命令 fdformat:格式化软盘 fsck:检查和修复文件系统 mkfs:创建文件系统 dd:转换和拷贝一 ...
 - Google Projectsheet Planning 插件的WBS
			
生成 WBS的序列號 在 Sldebar中的 "WBS" 按鈕: "< WBS" 取消下級目錄 "WBS >" 生成下級目錄 G ...
 - 93. 复原IP地址
			
题目描述: 给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式. 示例: 输入: "25525511135" 输出: ["255.255.11.135&q ...
 - [NOI 2018]冒泡排序
			
题意:求所有字典序大于给定序列且满足条件的排列个数之和. 思路: 考虑dp即可,打表出卡特兰数优化,直接dp可以44... #include <bits/stdc++.h> using n ...
 - AutowireCapableBeanFactory 根据名称:自动装配的BeanFactory,其实也是对BeanFactory的增强
			
//自动装配的Bean 工厂 public interface AutowireCapableBeanFactory extends BeanFactory { //工厂没有自动装配的Bean int ...
 - day  80   Vue学习一之vue初识
			
Vue学习一之vue初识 本节目录 一 Vue初识 二 ES6的基本语法 三 Vue的基本用法 四 xxx 五 xxx 六 xxx 七 xxx 八 xxx 一 vue初识 vue称为渐进式js框架 ...
 - 如何在 JavaScript 中使用 C 程序
			
JavaScript 是个灵活的脚本语言,能方便的处理业务逻辑.当需要传输通信时,我们大多选择 JSON 或 XML 格式. 但在数据长度非常苛刻的情况下,文本协议的效率就非常低了,这时不得不使用二进 ...
 - 02.万恶之源-python 运算符和编码
			
一.流程控制语句if: 第一种语法: (最基本的语法) if 条件: 代码块/结果1 结果2 # 如果条件是真(True)执行结果为1,然后结果为2,如果条件为错(False), 直接结果2. 第二种 ...