Cypher 笔记
添加
// 创建节点
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 笔记的更多相关文章
- Neo4j/cypher学习笔记与学习建议
简介 本笔记的主要内容是 cypher 查询语言的编写与使用. 笔记主要整理自w3cschool上的neo4j教程以及Neo4j中文网所提供的cypher中文文档,此外还包括少量从其他个人博客与官方手 ...
- Neo4j数据和Cypher查询语法笔记
Cypher数据结构 Cypher的数据结构: 属性类型, 复合类型和结构类型 属性类型 属性类型 Integer Float String: 'Hello', "World" B ...
- 人工智能头条(公开课笔记)+AI科技大本营——一拨微信公众号文章
不错的 Tutorial: 从零到一学习计算机视觉:朋友圈爆款背后的计算机视觉技术与应用 | 公开课笔记 分享人 | 叶聪(腾讯云 AI 和大数据中心高级研发工程师) 整 理 | Leo 出 ...
- git-简单流程(学习笔记)
这是阅读廖雪峰的官方网站的笔记,用于自己以后回看 1.进入项目文件夹 初始化一个Git仓库,使用git init命令. 添加文件到Git仓库,分两步: 第一步,使用命令git add <file ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- SQL Server技术内幕笔记合集
SQL Server技术内幕笔记合集 发这一篇文章主要是方便大家找到我的笔记入口,方便大家o(∩_∩)o Microsoft SQL Server 6.5 技术内幕 笔记http://www.cnbl ...
- PHP-自定义模板-学习笔记
1. 开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2. 整体架构图 ...
- PHP-会员登录与注册例子解析-学习笔记
1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...
- NET Core-学习笔记(三)
这里将要和大家分享的是学习总结第三篇:首先感慨一下这周跟随netcore官网学习是遇到的一些问题: a.官网的英文版教程使用的部分nuget包和我当时安装的最新包版本不一致,所以没法按照教材上给出的列 ...
随机推荐
- Python逆向爬虫之scrapy框架,非常详细
爬虫系列目录 目录 Python逆向爬虫之scrapy框架,非常详细 一.爬虫入门 1.1 定义需求 1.2 需求分析 1.2.1 下载某个页面上所有的图片 1.2.2 分页 1.2.3 进行下载图片 ...
- Excel 统计函数(二):COUNTIF 和 COUNTIFS
COUNTIF [语法]COUNTIF(range, criteria) [作用]range 为统计的范围,criteria 是统计的条件. [题目]统计 A1 到 A10 范围内,出现"你 ...
- flask 可插拔视图
Flask 0.7 版本引入了可插拨视图.可插拨视图基于使用类来代替函数,其灵感来自于 Django 的通用视图.可插拨视图的主要用途是用可定制的.可插拨的视图来替代部分 实现.普通的函数视图 演示代 ...
- 若依3.6.0使用Mybatis-plus分页失效以及完美替换Pagehelper
一.前言 小编最近在经历后端框架的迁移,虽然不是小编来做,但是有个分页的情况让小编和一个同事去搞. 说一下小编这边的需求: 原来框架使用Mybatis-plus进行分页,要更换的新框架若依是使用Pag ...
- 座位安排(欧拉回路,高斯消元,bitset)
题面 由于旋转大师 F r e n c h \rm French French 的离去, A r e x t r e \rm Arextre Arextre 光荣地承担了给全班换座位的重任. 由于这是 ...
- NOI 2019 省选模拟赛 T1【JZOJ6082】 染色问题(color) (多项式,数论优化)
题面 一根长为 n 的无色纸条,每个位置依次编号为 1,2,3,-,n ,m 次操作,第 i 次操作把纸条的一段区间 [l,r] (l <= r , l,r ∈ {1,2,3,-,n})涂成颜色 ...
- idea中无法在@Test 之下使用Scanner
//如何解决idea中无法在 @Test 之下使用Scanner@Testpublic void testInsert(){ Scanner scanner = new Scanner(System. ...
- 简易的AutoPlayCarousel 轮播控件
原理是使用StackPanel 的margin属性的偏移来实现轮播的效果 废话不多说直接上代码 AutoPlayCarousel核心代码 [ContentProperty(nameof(Childre ...
- React报错之Property 'value' does not exist on type EventTarget
正文从这开始~ 总览 当event参数的类型不正确时,会产生"Property 'value' does not exist on type EventTarget"错误.为了解决 ...
- ELK技术-IK-中文分词器
1.背景 1.1 简介 ES默认的分词器对中文分词并不友好,所以一般会安装中文分词插件,以便能更好的支持中文分词检索. 本例参考文档:<一文教你掌握IK中文分词> 1.2 IK分词器 IK ...