一:Node语法

在cypher里面通过用一对小括号()表示一个节点,它在cypher里面查询形式如下:

1,() 代表匹配任意一个节点

2, (node1) 代表匹配任意一个节点,并给它起了一个别名

3, (:Lable) 代表查询一个类型的数据

4, (person:Lable) 代表查询一个类型的数据,并给它起了一个别名

5, (person:Lable {name:"小王"}) 查询某个类型下,节点属性满足某个值的数据

6, (person:Lable {name:"小王",age:23}) 节点的属性可以同时存在多个,是一个AND的关系

二:关系语法

关系用一对-组成,关系分有方向的进和出,如果是无方向就是进和出都查询

1,--> 指向一个节点

2,-[role]-> 给关系加个别名

3,-[:acted_in]-> 访问某一类关系

4,-[role:acted_in]-> 访问某一类关系,并加了别名

5,-[role:acted_in {roles:["neo","hadoop"]}]->

访问某一类关系下的某个属性的关系的数据

三:模式语法

模式语法是节点和关系查询语法的结合,通过模式语法我们可以进行我们想要的任意复杂的查询

(p1: Person:Actor {name:"tom"})-[role:acted_in {roles:["neo","actor"]}]-(m1:Movie {title:"water"})

四:模式变量

为了增加模块化和减少重复,cypher允许把模式的结果指定在一个变量或者别名中,方便后续使用或操作

path = (: Person)-[:ACTED_IN]->(:Movie)

path是结果集的抽象封装,有多个函数可以直接从path里面提取数据如:

nodes(path):提取所有的节点

rels(path): 提取所有的关系 和relationships(path)相等

length(path): 获取路径长度

五:条件

cypher语句也是由多个关键词组成,像SQL的

select name, count(*) from talbe where age=24 group by name having count(*) >2  order by count(*) desc

多个关键字组成的语法,cypher也非常类似,每个关键词会执行一个特定的task来处理数据

match: 查询的主要关键词

create: 类似sql里面的insert

filter,project,sort,page等都有对应的功能语句

通过组合上面的一些语句,我们可以写出非常强大复杂的语法,来查询我们想要检索的内容,cypher会 自动解析语法并优化执行。

一些实际的用法例子:

1:创建

create (:Movie {title:"ABC",released:2016})  return p;

2:查询

match (p: Person) return p; 查询Person类型的所有数据

match (p: Person {name:"sun"}) return p; 查询名字等于sun的人

match( p1: Person {name:"sun"} )-[rel:friend]->(p2) return p2.name , p2.age 查询sun的朋友的名字和年龄

match (old) ... create (new) create (old)-[rel:dr]->(new) return new 对已经存在的节点和新建的节点建立关系

3:查询或更新

merge 语法可以对已经存在的节点不做改变,对变化的部分会合并

MERGE (m:Movie { title:"Cloud Atlas" })
ON CREATE SET m.released = 2012
RETURN m

merge .... on create set ... return 语法支持合并更新

4:筛选过滤

cypher过滤也是用的和SQL一样的关键词where

match (p1: Person) where p1.name="sun" return p1;

等同下面的

match (p1: Person {name:"sun"}) return p1

注意where条件里面支持 and , or ,xor,not等boolean运算符,在json串里面都是and

除此之外,where里面查询还支持正则查询

match (p1: Person)-[r:friend]->(p2: Person)
where p1.name=~"K.+" or p2.age=24 or "neo" in r.rels
return p1,r,p2

关系过滤匹配使用not

MATCH (p:Person)-[:ACTED_IN]->(m)
WHERE NOT (p)-[:DIRECTED]->()
RETURN p,m

5:结果集返回

MATCH (p:Person)
RETURN p, p.name AS name, upper(p.name), coalesce(p.nickname,"n/a") AS nickname, { name: p.name,label:head(labels(p))} AS person

结果集返回做去重

match (n) return distinct n.name;

6:聚合函数

cypher支持count,sum,avg,min,max

match (: Person) return count(*)

聚合的时候null会被跳过 count 语法 支持 count( distinct role )

MATCH (actor:Person)-[:ACTED_IN]->(movie:Movie)<-[:DIRECTED]-(director:Person)
RETURN actor,director,count(*) AS collaborations

7:排序和分页

MATCH (a:Person)-[:ACTED_IN]->(m:Movie)
RETURN a,count(*) AS appearances
ORDER BY appearances DESC SKIP 3 LIMIT 10;

8:收集聚合结果

MATCH (m:Movie)<-[:ACTED_IN]-(a:Person)
RETURN m.title AS movie, collect(a.name) AS cast, count(*) AS actors

9:union 联合

支持两个查询结构集一样的结果合并

MATCH (actor:Person)-[r:ACTED_IN]->(movie:Movie)
RETURN actor.name AS name, type(r) AS acted_in, movie.title AS title
UNION (ALL)
MATCH (director:Person)-[r:DIRECTED]->(movie:Movie)
RETURN director.name AS name, type(r) AS acted_in, movie.title AS title

10:with

with语句给cypher提供了强大的pipeline能力,可以一个或者query的输出,或者下一个query的输入 和return语句非常类似,唯一不同的是,with的每一个结果,必须使用别名标识。

通过这个功能,我们可以轻而易举的做到在查询结果里面在继续嵌套查询。

MATCH (person:Person)-[:ACTED_IN]->(m:Movie)
WITH person, count(*) AS appearances, collect(m.title) AS movies
WHERE appearances > 1
RETURN person.name, appearances, movies

11:添加约束或者索引

唯一约束(使用merge来实现) CREATE CONSTRAINT ON (movie:Movie) ASSERT movie.title IS UNIQUE

添加索引(在图谱遍历时,快速找到开始节点),大幅提高查询遍历性能 CREATE INDEX ON :Actor(name)

添加测试数据:

CREATE (actor:Actor { name:"Tom Hanks" }),(movie:Movie { title:'Sleepless IN Seattle' }),(actor)-[:ACTED_IN]->(movie);

使用索引查询:

MATCH (actor:Actor { name: "Tom Hanks" })
RETURN actor;

Neo4j 查询语法入门相关推荐

  1. 《Neo4j 3.x入门经典》已正式出版,各大网店均有售!

    <Neo4j 3.x入门经典>已正式出版,各大网店均有售! 大家好,由我参与翻译(第二译者)的<Neo4j 3.x入门经典>已拿到批号正式出版,在各大网店均有售! 京东链接: ...

  2. 2021年大数据Hive(四):Hive查询语法

    全网最详细的Hive文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 系列历史文章 前言 hive查询语法 一.SELECT语句 1.语句结构 2.全表查 ...

  3. 味道不错的NBearLite查询语法

    最近在博客园博客程序的开发中使用了NBearLite进行数据库访问操作,然后通过NBearMapping将查询的结果映射到实体类.     NBearLite的查询语法设计得很体贴,用起来很舒服,正是 ...

  4. [独孤九剑]持续集成实践(二)– MSBuild语法入门

    本系列文章包含: [独孤九剑]持续集成实践(一)- 引子 [独孤九剑]持续集成实践(二)– MSBuild语法入门 [独孤九剑]持续集成实践(三)- Jenkins安装与配置(Jenkins+MSBu ...

  5. Go(一):Go基础语法入门

    Go基础语法入门 第一个go程序 变量 常量 数据类型 字符串处理 `++` `--` 运算符 逻辑运算符 循环 `for ... := range ...` `switch` 死循环 数组的CURD ...

  6. lucene查询语法,适用于ELk:kibana查询

    lucene查询语法,适用于ELk:kibana查询 Kibana在ELK中扮演着数据可视化角色,用来查询及展示数据: Elasticsearch查询采用的是luncene搜索引擎,其4过滤查询语法和 ...

  7. 数据蒋堂 | JOIN延伸 - 维度查询语法

    来源:数据蒋堂 作者:蒋步星 本文长度为1320字,建议阅读3分钟 本文为你讲解JOIN延伸之维度查询语法. 有了维度定义后,我们就可以来梳理前面讲过的简化JOIN语法了. 先定义字段维度: 维度字段 ...

  8. 全文检索4.5查询语法

    一 语法概要 select域名, 域名@Seg from 索引库名称 where 域名:域值 order by 域名(整型.浮点.日期.排序文本类型.枚举类型)limit n classify by  ...

  9. Mysql数据库查询语法详解

    数据库的完整查询语法 在平常的工作中经常需要与数据库打交道 , 虽然大多时间都是简单的查询抑或使用框架封装好的ORM的查询方法 , 但是还是要对数据库的完整查询语法做一个加深理解 数据库完整查询语法框 ...

最新文章

  1. 李宏毅机器学习笔记(三)——Regression: output a scalar amp;amp; Gradient Descent
  2. 人工智能:主导下一轮科技创新红利
  3. Python--练习及面试题
  4. [USACO]地震 (二分答案+最优比率生成树详解)
  5. JS 取得当前时间日期
  6. ubuntu 国内源
  7. 在没有图片的情况下用css3实现一个圆形
  8. The type XXX is not API (restriction on required library 'D:\jdk-64\jre\lib\rt.jar')
  9. logstash对nginx日志进行解析
  10. mysql必知必会和sql必知必会
  11. 微型计算机是嵌入式吗,什么是嵌入式计算机
  12. PDF怎么转换成Word?这几个方法可以试试
  13. 高德地图API的一些使用心得
  14. 人体神经元结构示意图,神经细胞内部结构图
  15. Allegro,如何编辑修改已放置器件封装中单个焊盘
  16. 智慧交通引领不一样的未来出行
  17. QT程序按钮效果制作
  18. 思考的技术- 读书笔记
  19. 搜索不到投屏设备怎么办_搜不到投屏设备怎么办
  20. 软考准备(计算机组成原理)CPU部分

热门文章

  1. Kafka手动提交偏移量的作用到底是什么???
  2. 链表 - 头节点的意义
  3. Web开发技术的演变
  4. 《如何阅读一本书》读书笔记2
  5. lin总线可以控制几个节点_[LIN].LIN总线详解
  6. android能播放4k视频格式,安卓APP,无广告支持多种格式的万能视频播放器
  7. OSPF的三张表(链路状态公告)
  8. KITTI数据集去除camera生成bag包(kitti2bag)
  9. 华科大计算机学院学生宿舍,华中科大教授郑强不掀桌子,班级60学生住45间寝室,会有所改观吗...
  10. 广州地区常用的DNS解析服务器