添加

// 创建节点
CREATE (n:MOVIE{name:"电影"})
// 创建节点
create (n:Test)
set n.name="Test"
// 创建关系
MATCH (cust:Customer),(cc:CreditCard)
WHERE cust.id = "1001" AND cc.id= "5001"
CREATE (cust)-[r:DO_SHOPPING_WITH{shopdate:"12/12/2014",price:55000}]->(cc)
RETURN r

删除

// 删除节点
MATCH (cc: CreditCard)-[rel]-(c:Customer)
DELETE cc,c,rel
// 批量删除label的属性
MATCH (book { id:122 })
REMOVE book.price
RETURN book
// 删除单个节点的属性
match (n:Book{title:"kg"}) remove n.pages
// 删除多个属性
match (n:Book{title:"Neo4j Tutorial2"}) remove n.pages, n.price

更新

// 增加/更新 某个节点的属性值
MATCH (n:Book{title:"kg"}) set n.test2="test" return n
// 批量增加属性
MATCH (dc:Book)
SET dc.testss = 3456

排序

// 排序
MATCH (dc:Book)
return dc
order by dc.id desc

UNION

// UNION ALL 返回包含重复结果的行
// UNION 返回公共结果,不返回重复的行
// 类名和数据类型要相同,(只需要as后的列名相同)
match (n:Movie) where n.id<=2 return n.id as id, n.price as price
union
match(m:Movie) where m.id>2 return m.id as price, m.price as id

MERGE

// create 会创建重复的行(如果记录存在,就创建一个同样的节点)
// merge 不会添加重复的行(如果记录已存在就不添加)
MERGE (gp2:GoogleProfile2{ Id: 201402,Name:"Nokia"})

UNWIND

// 遍历列表
unwind [1,2,3,4] as b
return b
// 使用with
with [1,2,3,4] as a
unwind a as b
return b
// 去重后输出
with [1,2,3,3,3] as list
unwind list as item
with distinct item
return item
// 遍历列表
with [1,2] as a , [3,4] as b
unwind (a + b) as c
return c
// 遍历列表(只能解包一层)
with [1,2,[7,8]] as a, [3,4] as b
unwind (a + b) as c
return c
// 解两层
with [1,2,[3,4]] as nest
unwind nest as hidden
unwind hidden as out
return out

SKIP && LIMIT

// limit 限制取的结果条数
match (n:Book)
return n.id
limit 2
// 跳过第一个结果
match (n:Book)
return n.id
skip 1
// 跳过第一个,从第二个开始取两条
match (n:Book)
return n.id
skip 1
limit 2

NULL

// 创建一个属性全为null的节点
create (n:Movie)
// 判断是否为NULL
match (n:Movie)
where n.price is not null
return n.name
// 判断是否为NULL
match (n:Movie)
where n.price is null
return n.name
// 用IN来判断是否包含
match (n:Movie)
where n.name in ["电影1", '电影2']
return n.name

CASE

一种跟在return语句之后的关键字。可以对返回的数据进行判断。比如空值怎么处理

  • 格式1:
CASE var_name
WHEN var_value THEN result
[WHEN var_value2 THEN result2]
[ELSE default_result]
END
match (n:VENUE)
return CASE n.VENUE_TYPE
WHEN "" THEN "其他"
WHEN NULL THEN "NULL"
ELSE n.VENUE_TYPE END AS VENUE_TYPE, count(n) as COUNT
  • 格式2:
CASE
WHEN predicate THEN result
[WHEN predicate THEN result]
[ELSE default]
END
[AS NEW_NAME]
match (n:VENUE)
return CASE
WHEN n.VENUE_TYPE="" OR n.VENUE_TYPE="" IS NULL THEN "其他"
ELSE n.VENUE_TYPE END AS VENUE_TYPE, count(n) as COUNT

关系

关系必须有方向,关系可以反着写

// 创建关系(正向)
match (m:Movie), (n:Movie)
where m.name="电影111" and n.name="电影2"
create (m)-[r:R{name:"关系"}]->(n)
// 创建关系(反向)
match (m:Movie), (n:Movie)
where m.name="电影111" and n.name="电影2"
create (m)<-[r:R{name:"关系2"}]-(n)
// 同时指定两个方向会报错
match (m:Movie), (n:Movie)
where m.name="电影111" and n.name="电影2"
create (m)<-[r:R{name:"关系2"}]->(n)
// 没有指定方向也会报错
match (m:Movie), (n:Movie)
where m.name="电影111" and n.name="电影2"
create (m)-[r:R{name:"关系2"}]-(n)
// 查询关系(返回关系不会显示在可视化中)
match (m:Movie)-[r:R]->(n:Movie)
where m.name="电影111" and n.name="电影2"
return r
// 查询关系可以反向(n->m 的关系)
match (m:Movie)<-[r:R]-(n:Movie)
where m.name="电影111" and n.name="电影2"
return r
// 查询关系也可以不写方向(会查到两个方向的关系)
match (m:Movie)-[r:R]-(n:Movie)
where m.name="电影111" and n.name="电影2"
return r
// 多跳的关系
match p=(m:Movie{name:"电影2"})-[r]-(n:Movie{name:"电影111"})-[r2]-(t:Movie{name:"电影5"})
return p

控制路径长度

// 展开4次,显示路径长度<=4的所有节点和路径。每次都展开相连的所有节点,下一次再继续展开外层的节点
match p=(n:VENUE{OBJ_NAME:"AAA"})-[r*4]-() return p
// 只显示路径长度在[2,3]范围内的路径,太短的路径不会显示(比如长度为1的路径)
match p=(n:FJS{STATION_NAME:"AAA"})-[r*2..3]-() return p
// [1, 2]范围内的路径
match p=(n:FJS{STATION_NAME:"AAA"})-[r*..2]-(m) return p
// 指定长度的路径
match p=(n:FJS{STATION_NAME:"AAA"})-[r2..2]-(m) return p
// 关系可以加上逻辑或操作(|)
match p=(m:SUBSTATION{STATION_NAME:"AAA"})-[r:END_STATION|:PARTNER|:ORIGIN_LINE*2..2]-(n)
return p

分组

match (n:SUBSTATION) where n.SUPPLY_TYPE is not NULL
RETURN n.SUPPLY_TYPE, COUNT(n)

字符串函数

功能 描述
UPPER 它用于将所有字母更改为大写字母
LOWER 它用于将所有字母改为小写字母
SUBSTRING 它用于获取给定String的子字符串SUBSTRING(str,start,end), 截取的范围是[start, end)
REPLACE 它用于替换一个字符串的子字符串
match (n:Movie)
where n.name="AAAbbb"
return UPPER(n.name), upper(n.name), lower(n.name),substring(n.name, 0, 3)
// 替换子串(不会改变原字符串)
match (n:Movie)
where n.name="AAAbbb"
return replace(n.name, "AAA", "CCC")

聚合函数

聚集功能 描述
COUNT 它返回由MATCH命令返回的行数
MAX 它从MATCH命令返回的一组行返回最大值
MIN 它返回由MATCH命令返回的一组行的最小值
SUM 它返回由MATCH命令返回的所有行的求和值
AVG 它返回由MATCH命令返回的所有行的平均值
match (n:Movie)
return max(n.id), min(n.id), avg(n.id), count(n.id)

关系函数

功能 描述
STARTNODE 它用于知道关系的开始节点
ENDNODE 它用于知道关系的结束节点
ID 它用于知道关系的ID
TYPE 它用于知道字符串表示中的一个关系的TYPE
// 这两个id并不相同,id(n)是系统自动加上的id,n.id是用户加上的id属性。
match (n:Movie)
return id(n), n.id
// 返回关系的类型,不能返回node的类型(会报错)
match (n:Movie)-[r]->(m:Movie)
where n.name="电影111" and m.name="电影2"
return TYPE(r)
match (n:Movie)-[r]->(m:Movie)
where n.name="电影111" and m.name="电影2"
return startnode(r), endnode(r)

索引

CREATE INDEX ON :<label_name> (<property_name>)

// 新建索引
CREATE INDEX ON :Customer (name)

DROP INDEX ON :<label_name> (<property_name>)

// 删除索引
DROP INDEX ON :Customer (name)

UNIQUE约束

CREATE CONSTRAINT ON (<label_name>)

ASSERT <property_name> IS UNIQUE

// 创建索引,如果已有的数据有重复的,那么建立索引会失败。
create constraint on (m:Movie)
assert m.name is unique

DROP CONSTRAINT ON (<label_name>)

ASSERT <property_name> IS UNIQUE

// 删除索引
drop constraint on (m:Movie)
assert m.name is unique

Cypher 笔记的更多相关文章

  1. Neo4j/cypher学习笔记与学习建议

    简介 本笔记的主要内容是 cypher 查询语言的编写与使用. 笔记主要整理自w3cschool上的neo4j教程以及Neo4j中文网所提供的cypher中文文档,此外还包括少量从其他个人博客与官方手 ...

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

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

  3. 人工智能头条(公开课笔记)+AI科技大本营——一拨微信公众号文章

    不错的 Tutorial: 从零到一学习计算机视觉:朋友圈爆款背后的计算机视觉技术与应用 | 公开课笔记 分享人 | 叶聪(腾讯云 AI 和大数据中心高级研发工程师) 整    理 | Leo 出   ...

  4. git-简单流程(学习笔记)

    这是阅读廖雪峰的官方网站的笔记,用于自己以后回看 1.进入项目文件夹 初始化一个Git仓库,使用git init命令. 添加文件到Git仓库,分两步: 第一步,使用命令git add <file ...

  5. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  6. SQL Server技术内幕笔记合集

    SQL Server技术内幕笔记合集 发这一篇文章主要是方便大家找到我的笔记入口,方便大家o(∩_∩)o Microsoft SQL Server 6.5 技术内幕 笔记http://www.cnbl ...

  7. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  8. PHP-会员登录与注册例子解析-学习笔记

    1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...

  9. NET Core-学习笔记(三)

    这里将要和大家分享的是学习总结第三篇:首先感慨一下这周跟随netcore官网学习是遇到的一些问题: a.官网的英文版教程使用的部分nuget包和我当时安装的最新包版本不一致,所以没法按照教材上给出的列 ...

随机推荐

  1. Spring Boot部署方法

    Spring Boot部署方法     网上搜到的部署方法无非是打成jar包,然后shell执行nohup java调用jar命令,或者是打成war包然后部署到tomcat或者jetty容器上面. S ...

  2. Excel 数学函数(二):ISODD 和 ISEVEN

    ISODD 函数用于判断一个数是否为奇数:ISEVEN 函数用于判断一个数是否为偶数. 结合文本函数 MID 和逻辑函数 IF,来判断一个身份证的性别. 身份证倒数第二位是奇数就代表男性,否则代表女性 ...

  3. KingbaseES V8R6C5 通过securecmdd工具手工脚本部署集群

    案例说明: 对于KingbaseES V8R6C5版本在部集群时,需要建立kingbase.root用户在节点间的ssh互信,如果在生产环境禁用root用户ssh登录,则通过ssh部署会失败:V8R6 ...

  4. alter role 导致的数据库无法登录问题

    ALTER ROLE  用于更改一个数据库角色.只要改角色后续开始一个新会话,指定的值将会成为该会话的默认值,并且会覆盖 kingbase.conf中存在的值或者从命令行收到的值. 显性的更改角色的一 ...

  5. C#,拷贝文件到另一个文件夹下,替换文件夹中的文件

    /// <summary> /// 拷贝文件到另一个文件夹下 /// </summary> /// <param name="sourceName"& ...

  6. [Python]-pandas模块-CSV文件读写

    Pandas 即Python Data Analysis Library,是为了解决数据分析而创建的第三方工具,它不仅提供了丰富的数据模型,而且支持多种文件格式处理,包括CSV.HDF5.HTML 等 ...

  7. 如何在Windows中批量创建VMware的虚拟机

    在最近的工作中,需要创建一批类似的机器.在VMware中创建了模板,然后根据自义向导部署之后,发现可以快速的完成新vm的部署.系统中的计算机名,IP地址都可以自动的完成更新.唯一的缺点是,系统自带的向 ...

  8. ACL和NAT

    1 ACL 1.1 ACL的作用 1).用来对数据包做访问控制(丢弃或者放弃) 2).结合其他协议,用来匹配范围 1.2 ACL的工作原理 当数据包从接口经过时,由于接口启用了ACL,此时路由器会对报 ...

  9. SEO知识点

    SEO中的长尾理论 长尾关键词就是包含关键信息,但是搜索量比较少的句子或词组. 每一个长尾关键词都可能会为网站带来流量.一般一个较大的网站,流量的主要来源可能都由长尾关键词构成,因为网站除了目标关键词 ...

  10. Docker网络详解——原理篇

    安装Docker时,它会自动创建三个网络,bridge(创建容器默认连接到此网络). none .host 网络模式 简介 Host 容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP ...