添加

// 创建节点
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. virtio 驱动的数据结构理解

    ps:本文基于4.19.204内核 Q:vqueue的结构成员解释: A:结构如下,解析附后: struct virtqueue { struct list_head list;//caq:一个vir ...

  2. [CF1527D] MEX Tree (lca)

    题面 给你一棵 n n n 个结点的树,对于所有的 k ∈ [ 0 , n ] k\in[0,n] k∈[0,n] ,求出 M E X = k {\rm MEX}=k MEX=k 的路径数量. 一条路 ...

  3. [HDU1812] Count the Tetris - polya定理

    题面 Problem Description 话说就是因为这个游戏,Lele已经变成一个名人,每当他一出现在公共场合,就有无数人找他签名,挑战. 为了防止引起社会的骚动,Lele决定还是乖乖呆在家里. ...

  4. Spring(四)-声明式事务

    Spring-04 声明式事务 1.事务的定义 事务就是由一组逻辑上紧密关联的多个工作单元(数据库操作)而合并成一个整体,这些操作要么都执行,要么都不执行. 2.事务的特性:ACID 1)原子性A : ...

  5. 利用userfaultfd + setxattr堆占位

    利用userfaultfd + setxattr堆占位 很久之前便看到过这个技术的名字,但是由于自己的摆烂,一直没有管.今天终于找到时间好好看一下这个技术的利用方式.利用userfaultfd + s ...

  6. Group 和 Distinct 列的次序影响查询性能

    目录 一.概述 二.work_mem 满足排序情况 1.Distinct 语句 2.Group by 语句 三.work_mem 不满足排序情况 1.Distinct 语句 2.Group by 语句 ...

  7. 微服务系列之授权认证(一) OAuth 2.0 和 OpenID Connect

    1.传统架构的授权认证 传统应用架构,用户使用账号密码登录后,可以使用前端cookie存储登录状态,也可以使用后端session方式存储登录状态,小应用这么做其实很高效实用,当应用需要横向扩展时,就需 ...

  8. 回滚Deployment控制器下的应⽤发布

    若因各种原因导致滚动更新⽆法正常进⾏,如镜像⽂件获取失败."⾦丝雀"遇险等,则应该将应⽤回滚到之前的版本,或者回滚到由⽤户指定的历史记录中的版本. Deployment控制器的回滚 ...

  9. logstash安装插件修改使用的gem源

    gem source -l # 查看当前使用的gem源 gem source --remove https://rubygems.org/ # 移除gem源 gem source -a https:/ ...

  10. SQL的事务

    一.基本概念 事务是数据库区别于文件系统的重要特性之一,当有了事务,就可以让数据库始终保持一致性,同时可以通过事务的机制恢复到某个时间点,保证了提交到数据库的修改不会因为系统崩溃而丢失: 事务只是一个 ...