添加

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

删除

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

更新

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

排序

  1. // 排序
  2. MATCH (dc:Book)
  3. return dc
  4. order by dc.id desc

UNION

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

MERGE

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

UNWIND

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

SKIP && LIMIT

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

NULL

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

CASE

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

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

关系

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

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

控制路径长度

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

分组

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

字符串函数

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

聚合函数

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

关系函数

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

索引

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

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

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

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

UNIQUE约束

CREATE CONSTRAINT ON (<label_name>)

ASSERT <property_name> IS UNIQUE

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

DROP CONSTRAINT ON (<label_name>)

ASSERT <property_name> IS UNIQUE

  1. // 删除索引
  2. drop constraint on (m:Movie)
  3. 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. Python逆向爬虫之scrapy框架,非常详细

    爬虫系列目录 目录 Python逆向爬虫之scrapy框架,非常详细 一.爬虫入门 1.1 定义需求 1.2 需求分析 1.2.1 下载某个页面上所有的图片 1.2.2 分页 1.2.3 进行下载图片 ...

  2. Excel 统计函数(二):COUNTIF 和 COUNTIFS

    COUNTIF [语法]COUNTIF(range, criteria) [作用]range 为统计的范围,criteria 是统计的条件. [题目]统计 A1 到 A10 范围内,出现"你 ...

  3. flask 可插拔视图

    Flask 0.7 版本引入了可插拨视图.可插拨视图基于使用类来代替函数,其灵感来自于 Django 的通用视图.可插拨视图的主要用途是用可定制的.可插拨的视图来替代部分 实现.普通的函数视图 演示代 ...

  4. 若依3.6.0使用Mybatis-plus分页失效以及完美替换Pagehelper

    一.前言 小编最近在经历后端框架的迁移,虽然不是小编来做,但是有个分页的情况让小编和一个同事去搞. 说一下小编这边的需求: 原来框架使用Mybatis-plus进行分页,要更换的新框架若依是使用Pag ...

  5. 座位安排(欧拉回路,高斯消元,bitset)

    题面 由于旋转大师 F r e n c h \rm French French 的离去, A r e x t r e \rm Arextre Arextre 光荣地承担了给全班换座位的重任. 由于这是 ...

  6. NOI 2019 省选模拟赛 T1【JZOJ6082】 染色问题(color) (多项式,数论优化)

    题面 一根长为 n 的无色纸条,每个位置依次编号为 1,2,3,-,n ,m 次操作,第 i 次操作把纸条的一段区间 [l,r] (l <= r , l,r ∈ {1,2,3,-,n})涂成颜色 ...

  7. idea中无法在@Test 之下使用Scanner

    //如何解决idea中无法在 @Test 之下使用Scanner@Testpublic void testInsert(){ Scanner scanner = new Scanner(System. ...

  8. 简易的AutoPlayCarousel 轮播控件

    原理是使用StackPanel 的margin属性的偏移来实现轮播的效果 废话不多说直接上代码 AutoPlayCarousel核心代码 [ContentProperty(nameof(Childre ...

  9. React报错之Property 'value' does not exist on type EventTarget

    正文从这开始~ 总览 当event参数的类型不正确时,会产生"Property 'value' does not exist on type EventTarget"错误.为了解决 ...

  10. ELK技术-IK-中文分词器

    1.背景 1.1 简介 ES默认的分词器对中文分词并不友好,所以一般会安装中文分词插件,以便能更好的支持中文分词检索. 本例参考文档:<一文教你掌握IK中文分词> 1.2 IK分词器 IK ...