目录

  1. Match
    1. 相关节点
    2. 接出关系Outgong relationship
    3. 定向关系和标识符
    4. 通过关系类型匹配
    5. 通过关系类型匹配和使用标识符
    6. 带有特殊字符的关系类型
    7. 多重关系
    8. 可变长度的关系
    9. 在可变长度关系的关系标识符
    10. 零长度路径
    11. 可选关系
    12. 可选类型和命名关系
    13. 可选元素的属性
    14. 复杂匹配
    15. 最短路径
    16. 所有最但路径
    17. 命名路径
    18. 在绑定关系上的匹配

Match

在一个查询的匹配(match)部分申明图形(模式)。模式的申明导致一个或多个以逗号隔开的路径(path)。

节点标识符可以使用或者不是用圆括号。使用圆括号与不使用圆括号完全对等,如:

MATCH(a)-->(b) 与 MATCH a-->b 匹配模式完全相同。

    模式的所有部分都直接或者间接地绑定到开始点上。可选关系是一个可选描述模式的方法,但在真正图中可能没有匹配(节点可能没有或者没有此类关系时),将被估值为null。与SQL中的外联结类似,如果Cypher发现一个或者多个匹配,将会全部返回。如果没有匹配,Cypher将返回null。

如以下例子,b和p都是可选的病都可能包含null:

 

START a=node(1) MATCH p = a-[?]->b

START a=node(1) MATCH p = a-[*?]->b

START a=node(1) MATCH p = a-[?]->x-->b

START a=node(1), x=node(100) MATCH p = shortestPath( a-[*?]->x )

相关节点

符号—意味着相关性,不需要关心方向和类型。

查询:

START n=node(3)

MATCH (n)--(x)

RETURN x

所有与A相关节点都被返回。

结果:

接出关系(Outgong relationship)

当对关系的方向感兴趣时,可以使用-->或<--符号,如:

查询:

START n=node(3)

MATCH (n)-->(x)

RETURN x

所有A的接出关系到达的节点将被返回.

结果:

定向关系和标识符

如果需要关系的标识符,为了过滤关系的属性或为了返回关系,可如下例使用标识符。

查询:

START n=node(3)

MATCH (n)-[r]->()

RETURN r

所有从节点A接出的关系将被返回。

结果:

通过关系类型匹配

当已知关系类型并想通过关系类型匹配时,可以通过冒号详细描述。

查询:

START n=node(3)

MATCH (n)-[:BLOCKS]->(x)

RETURN x

返回A接出关系类型为BLOCKS的节点。

结果:

通过关系类型匹配和使用标识符

如果既想获得关系又要通过已知的关系类型,那就都添加上,如:

查询:

START n=node(3)

MATCH (n)-[r:BLOCKS]->()

RETURN r

所有从A接出的关系为BLOCKS的关系都被返回。

结果:

带有特殊字符的关系类型

有时候数据库中有非字母字符类型,或有空格在内时,使用单引号。

查询:

START n=node(3)

MATCH (n)-[r:`TYPE WITH SPACE IN IT`]->()

RETURN r

返回类型有空格的关系。

结果:

多重关系

关系可以通过使用在()—()多个语句来表达,或可以串在一起。如下:

查询:

START a=node(3)

MATCH (a)-[:KNOWS]->(b)-[:KNOWS]->(c)

RETURN a,b,c

路径中的三个节点。

结果:

可变长度的关系

可变数量的关系->节点可以使用-[:TYPE*minHops..maxHops]->

 

查询:

START a=node(3), x=node(2, 4)

MATCH a-[:KNOWS*1..3]->x

RETURN a,x

如果在1到3的关系中存在路径,将返回开始点和结束点。

结果:

在可变长度关系的关系标识符

当连接两个节点的长度是可变的不确定的时,可以使用一个关系标识符遍历所有关系。

查询:

START a=node(3), x=node(2, 4)

MATCH a-[r:KNOWS*1..3]->x

RETURN r

如果在1到3的关系中存在路径,将返回开始点和结束点。

结果:

零长度路径

当使用可变长度路径,可能其路径长度为0,这也就是说两个标识符指向的为同一个节点。如果两点间的距离为0,可以确定这是同一个节点。

查询:

START a=node(3)

MATCH p1=a-[:KNOWS*0..1]->b, p2=b-[:BLOCKS*0..1]->c

RETURN a,b,c, length(p1), length(p2)

这个查询将返回四个路径,其中有些路径长度为0.

结果:

可选关系

如果关系为可选的,可以使用问号表示。与SQL的外连接类似。如果关系存在,将被返回。如果不存在在其位置将以null代替。

查询:

START a=node(2)

MATCH a-[?]->x

RETURN a,x

返回一个节点和一个null,因为这个节点没有关系。

结果:

可选类型和命名关系

通过一个正常的关系,可以决定哪个标识符可以进入,那些关系类型是需要的。

查询:

START a=node(3)

MATCH a-[r?:LOVES]->()

RETURN a,r

返回一个节点和一个null,因为这个节点没有关系。

结果:

可选元素的属性

返回可选元素上的属性,null值将返回null。

查询:

START a=node(2)

MATCH a-[?]->x

RETURN x, x.name

元素x在查询中为null,所有其属性name为null。

结果:

复杂匹配

在Cypher中,可哟通过更多复杂模式来匹配,像一个钻石形状模式。

查询:

START a=node(3)

MATCH (a)-[:KNOWS]->(b)-[:KNOWS]->(c),(a)-[:BLOCKS]-(d)-[:KNOWS]-(c)

RETURN a,b,c,d

路径中的四个节点。

结果:

最短路径

使用shortestPath函数可以找出一条两个节点间的最短路径,如下。

查询:

START d=node(1), e=node(2)

MATCH p = shortestPath( d-[*..15]->e )

RETURN p

这意味着:找出两点间的一条最短路径,最大关系长度为15.圆括号内是一个简单的路径连接,开始节点,连接关系和结束节点。关系的字符描述像关系类型,最大数和方向在寻找最短路径中都将被用到。也可以标识路径为可选。

结果:

所有最但路径

找出两节点节点所有的最短路径。

查询:

START d=node(1), e=node(2)

MATCH p = allShortestPaths( d-[*..15]->e )

RETURN p

这将在节点d与e中找到两条有方向的路径。

结果:

命名路径

如果想在模式图上的路径进行过滤或者返回此路径,可以使用命名路径(named path)。

查询:

START a=node(3)

MATCH p = a-->b

RETURN p

开始节点的两个路径。

结果:

在绑定关系上的匹配

当模式中包含一个绑定关系时,此关系模式没有明确的方向,Cypher将尝试着切换连接节点的边匹配关系。

查询:

START a=node(3), b=node(2)

MATCH a-[?:KNOWS]-x-[?:KNOWS]-b

RETURN x

将返回两个连接节点,一次为开始节点,一次为结束节点。

结果:

Cypher查询语言--Neo4j-MATCH(二)的更多相关文章

  1. Cypher查询语言--Neo4j 入门 (一)

    目录 操作符 参数 标识符 注解 Start 通过id绑定点 通过id绑定关系 通过id绑定多个节点 所有节点 通过索引查询获取节点 通过索引查询获取关系 多个开始点  Cypher是一个描述性的图形 ...

  2. Cypher查询语言--Neo4j 之高级篇 (六)

    目录 排序Order by 通过节点属性排序节点 通过多节点属性排序节点 倒序排列节点 空值排序 Skip 跳过前三个 返回中间两个 Limit 返回第一部分 函数Functions 判断 All A ...

  3. Cypher查询语言--Neo4j之聚合函数(五)

    目录 聚合Aggregation 计数 计算节点数 分组计算关系类型 计算实体数 计算非空可以值数 求和sum 平均值avg 最大值max 最小值min 聚类COLLECT 相异DISTINCT 聚合 ...

  4. Cypher查询语言--Neo4j 综合(四)

    目录 返回节点 返回关系 返回属性 带特殊字符的标识符 列的别名 可选属性 特别的结果   查询中的返回部分,返回途中定义的感兴趣的部分.可以为节点.关系或其上的属性. 图 返回节点 返回一个节点,在 ...

  5. CYPHER 语句(Neo4j)

    CYPHER 语句(Neo4j) 创建电影关系图 新增 查找 修改 删除 导入 格式转换 创建电影关系图 CREATE (TheMatrix:Movie {title:'The Matrix', re ...

  6. Neo4j Cypher查询语言详解

    Cypher介绍 "Cypher"是一个描述性的图形查询语言,允许不必编写图形结构的遍历代码对图形存储有表现力和效率的查询.Cypher还在继续发展和成熟,这也就意味着有可能会出现 ...

  7. Cypher查询语言--Neo4j-WHERE(三)

    目录 Where Boolean 操作类型 节点属性上的过滤 正则表达式 转义正则表达式 不分大小些正则表达式 关系类型上的过滤 属性存在性 如果缺失属性默认为true 如果缺失属性默认为false ...

  8. Hibernate的查询语言之HQL(二)——Hibernate查询的from字句

    from 是最简单的HQL语句,也是最基本的HQL语句.from 关键字后紧跟持久化类的类名.例如: from Person 表明从Person持久化类中取出全部的实例. 大部分时候,推荐位该Pers ...

  9. Neo4j的查询语法笔记(二)

    cypher是neo4j官网提供的声明式查询语言,非常强大,用它可以完成任意的图谱里面的查询过滤,我们知识图谱的一期项目 基本开发完毕,后面会陆续总结学习一下neo4j相关的知识.今天接着上篇文章来看 ...

随机推荐

  1. CCNA笔记(2)

    CCNA第一天笔记:何为因特网?答:因特网,是连接各台pc与终端设备,正是因为有了因特网,我们才能与全世界交流,玩在线游戏,在线学习.因特网给我们教育带来什么方便?答:没有了地域的阻止,可以在线学习, ...

  2. 2017年第六届数学中国数学建模国际赛(小美赛)C题解题思路

    这篇文章主要是介绍下C题的解题思路,首先我们对这道C题进行一个整体的概括,结构如下: C题:经济类 第一问:发现危险人群. 发现:欺诈的方式开始.雇佣或浪漫的承诺. 数据→确定特定的经济萧条地区→确定 ...

  3. hackerrank DFS Edges

    瞬间移动 题意:要求构造一个图,使其dfs树中有t条树边,b条返祖边,f条前向边,c条其他边. 膜了题解才会,好神啊. 考虑所有结点的深度之和,这个值必须介于$[max(b,f+t),C^{2}_{n ...

  4. HDU 1004 Let the Balloon Rise【STL<map>】

    Let the Balloon Rise Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Oth ...

  5. HDU 1541 树状数组

    树状数组入门博客推荐 http://blog.csdn.net/qq_34374664/article/details/52787481 Stars Time Limit: 2000/1000 MS ...

  6. hdu_1286找新朋友(欧拉定理)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1286 找新朋友 Time Limit: 2000/1000 MS (Java/Others)    M ...

  7. CentOS 6.5 编译安装 LNMP环境

    建立一个软件包目录存放 mkdir -p /usr/local/src/ 清理已经安装包 rpm -e httpd rpm -e mysql rpm -e php yum -y remove http ...

  8. Sql Server——数据增删改

    所谓数据的增删改就是在创建好数据库和表后向表中添加数据.删除表中的数据.更改表中的一些数据. 新增数据: 语法一: insert into 表名 values (数据内容)        --这里需要 ...

  9. iOS钉钉远程打卡助手(支持越狱和非越狱)

    前言:本文主要讲述使用hook方式实现钉钉远程打卡功能,涉及到tweak相关知识,如果你不想了解具体实现细节可直接到我的Github地址参考安装(包含越狱和非越狱两种方法)   你是不是像小编一样每个 ...

  10. CSS学习笔记day1

    1.css的简介  css:层叠样式表 (层叠:一层一层的:样式表:很多的属性和属性值) 使页面显示效果更好 将页面内容和显示样式进行分离,提高了显示功能. 2.css和html的结合方式(4种) 在 ...