排序(Order by)

输出结果排序可以使用order by 子句。注意,不能使用节点或者关系排序,仅仅只针对其属性有效。

图:

通过节点属性排序节点

查询:

START n=node(3,1,2)

RETURN n

ORDER BY n.name

结果:

通过多节点属性排序节点

在order by子句中可以通过多个属性来排序每个标识符。Cypher首先将通过第一个标识符排序,如果第一个标识符或属性相等,则在order by中检查下一个属性,依次类推。

查询:

START n=node(3,1,2)

RETURN n

ORDER BY n.age, n.name

首先通过age排序,然后再通过name排序。

结果:

倒序排列节点

可以在标识符后添加desc或asc来进行倒序排列或顺序排列。

查询:

START n=node(3,1,2)

RETURN n

ORDER BY n.name DESC

结果:

空值排序

当排列结果集时,在顺序排列中null将永远放在最后,而在倒序排列中放最前面。

查询:

START n=node(3,1,2)

RETURN n.length?, n

ORDER BY n.length?

结果:

Skip

Skip允许返回总结果集中的一个子集。此不保证排序,除非使用了order by’子句。

图:

跳过前三个

返回结果中一个子集,从第三个结果开始,语法如下:

查询:

START n=node(3, 4, 5, 1, 2)

RETURN n

ORDER BY n.name

SKIP 3

前三个节点将略过,最后两个节点将被返回。

结果:

返回中间两个

查询:

START n=node(3, 4, 5, 1, 2)

RETURN n

ORDER BY n.name

SKIP 1

LIMIT 2

中间两个节点将被返回。

结果:

Limit

Limit允许返回结果集中的一个子集。

图:

返回第一部分

查询:

START n=node(3, 4, 5, 1, 2)

RETURN n

LIMIT 3

结果:

函数(Functions)

在Cypher中有一组函数,可分为三类不同类型:判断、标量函数和聚类函数。

图:

判断

判断为boolean函数,对给出的输入集合做判断并返回true或者false。常用在where子句中过滤子集。

All

迭代测试集合中所有元素的判断。

语法:

All(标识符 in iterable where 判断)

参数:

Ø  iterable :一个集合属性,或者可迭代的元素,或一个迭代函数。

Ø  标识符:可用于判断比较的标识符。

Ø  判断:一个测试所有迭代器中元素的判断。

查询:

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

MATCH p=a-[*1..3]->b

WHERE all(x in nodes(p) WHERE x.age > 30)

RETURN p

过滤包含age〈30的节点的路径,返回符合条件路径中所有节点。

结果:

Any

语法:ANY(identifierin iterable WHERE predicate)

参数:

Ø  Iterable(迭代器):一个集合属性,或者可迭代的元素,或一个迭代函数。

Ø  Identifier(标识符):可用于判断比较的标识符。

Ø  Predicate(判断):一个测试所有迭代器中元素的判断。

查询:

START a=node(2)

WHERE any(x in a.array WHERE x = "one")

RETURN a

结果:

None

在迭代器中没有元素判断将返回true。

语法:NONE(identifierin iterable WHERE predicate)

Ø  Iterable(迭代器):一个集合属性,或者可迭代的元素,或一个迭代函数。

Ø  Identifier(标识符):可用于判断比较的标识符。

Ø  Predicate(判断):一个测试所有迭代器中元素的判断。

查询:

START n=node(3)

MATCH p=n-[*1..3]->b

WHERE NONE(x in nodes(p) WHERE x.age = 25)

RETURN p

结果:

Single

如果迭代器中仅有一个元素则返回true。

语法:SINGLE(identifierin iterable WHERE predicate)

参数:

Ø  Iterable(迭代器):一个集合属性,或者可迭代的元素,或一个迭代函数。

Ø Identifier(标识符):可用于判断比较的标识符。

Ø Predicate(判断):一个测试所有迭代器中元素的判断。

查询:

START n=node(3)

MATCH p=n-->b

WHERE SINGLE(var in nodes(p) WHERE var.eyes = "blue")

RETURN p

结果:

Scalar函数

标量函数返回单个值。

Length

使用详细的length属性,返回或过滤路径的长度。

语法:LENGTH(iterable )

参数:

Ø  Iterable(迭代器):一个集合属性,或者可迭代的元素,或一个迭代函数。

查询:

START a=node(3)

MATCH p=a-->b-->c

RETURN length(p)

返回路径的长度。

结果:

Type

返回关系类型的字符串值。

语法:TYPE(relationship )

参数:

Ø  Relationship:一条关系。

查询:

START n=node(3)

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

RETURN type(r)

返回关系r的类型。

结果:

Id

返回关系或者节点的id

语法:ID(property-container )

参数:

Ø  Property-container:一个节点或者一条关系。

查询:

START a=node(3, 4, 5)

RETURN ID(a)

返回这三个节点的id。

结果:

Coalesce

返回表达式中第一个非空值。

语法:COALESCE(expression [, expression]* )

参数:

Ø  Expression:可能返回null的表达式。

查询:

START a=node(3)

RETURN coalesce(a.hairColour?,a.eyes?)

结果:

Iterable函数

迭代器函数返回一个事物的迭代器---在路径中的节点等等。

Nodes

返回一个路径中的所有节点。

语法:NODES(path )

参数:

Ø  Path:路径

查询:

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

MATCH p=a-->b-->c

RETURN NODES(p)

结果:

Relationships

返回一条路径中的所有关系。

语法:RELATIONSHIPS(path )

参数:

Ø  Path:路径

查询:

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

MATCH p=a-->b-->c

RETURN RELATIONSHIPS(p)

结果:

Extract

可以使用extract单个属性,或从关系或节点集合迭代一个函数的值。将遍历迭代器中所有的节点并运行表达式返回结果。

语法:EXTRACT(identifier in iterable : expression )

Ø  Iterable(迭代器):一个集合属性,或者可迭代的元素,或一个迭代函数。

Ø  Identifier(标识符):闭包中表述内容的标识符,这决定哪个标识符将用到。

Ø  expression(表达式):这个表达式将对于迭代器中每个值运行一次,并生成一个结果迭代器。

查询:

START a=node(3), b=node(4),c=node(1)

MATCH p=a-->b-->c

RETURN extract(n in nodes(p) : n.age)

返回路径中所有age属性值。

结果:

Cypher查询语言--Neo4j中的SQL(6)相关推荐

  1. Cypher查询语言--Neo4j中的SQL

    Cypher查询语言--Neo4j中的SQL   转自:http://www.uml.org.cn/sjjm/201203063.asp   "Cypher"是一个描述性的图形查询 ...

  2. 读书笔记——Neo4j实战 Cypher查询语言

    Cypher是对图形的声明查询语言, 使用图形模式匹配作为主要的机制作图形数据选择(包括只读和变更操作) . Cypher的声明模式匹配性质意味着可以通过描述想从它那里得到什么查询图形数据. 执行Cy ...

  3. neo4j︱Cypher 查询语言简单案例(二)

    图数据库常规的有:neo4j(支持超多语言).JanusGraph/Titan(分布式).Orientdb,google也开源了图数据库Cayley(Go语言构成).PostgreSQL存储RDF格式 ...

  4. Neo4J 与 Cypher 查询语言基础

    前言 图数据库,存储的是节点和关系,而不是表.在Neo4j中,节点和关系都由属性和标签描述. 在 Cypher 查询语句中,节点和关系的表述一般为: 节点:(Variable:Label1:Label ...

  5. Cypher查询语言

    背景介绍 属性图模型以及其上的Cypher查询语言最早定义于著名的图数据库系统--Neo4j.Neo4j是由Neo4j公司开发的图数据库系统,其起源于2000年Neo4j的创始人开发的多媒体资产管理系 ...

  6. 知识图谱:属性图数据模型与Cypher查询语言

    属性图数据模型 属性图模型简介 属性图模型是一种不同于RDF 三元组的一种图数据模型 这个模型由点来表示现实世界中的实体,由边来表示实体与实体之间的关系.同时,点和边上都可以通过键值对的形式被关联上任 ...

  7. 同样是查询语言,它和 SQL 竟然有这么多不同

    简介:这篇文章将介绍图数据库 Nebula Graph 的查询语言 nGQL 和 SQL 的区别. 摘要:这篇文章将介绍图数据库 Nebula Graph 的查询语言 nGQL 和 SQL 的区别. ...

  8. 在SQL Server中使用SQL Coalesce函数

    This article explores the string manipulation using SQL Coalesce function in SQL Server. 本文探讨了在SQL S ...

  9. VB中的SQL语言——增、删、改、查

    结构化查询语言简称SQL,SQL是一种数据库查询和程序设计语言,用于存取数据以及查询.更新和管理关系数据库系统.SQL语言主要有四个部分:数据定义语言.数据操纵语言.嵌入式SQL语言的使用规定.数据控 ...

最新文章

  1. 分布式系统的时间顺序
  2. 7项最佳实践助您利用媒体转换不断发展数据中心网络
  3. DOS 中for遍历文件内容
  4. java swing jbutton_Java 反射
  5. 开启AngularJS 1.X的学习之路(1)
  6. Linux操作系统下Sudo命令的使用方法说明
  7. 跨域技术(JSONP与CROS)
  8. 手把手教你用.NET Core写爬虫
  9. 学习小实例--滚动条
  10. leetcode—24.堆题目leetcode总结
  11. mybatis注册映射文件
  12. 华为网络安全工程师:HCNA-Security(H12-711)题型解析(第二部分)-马青-专题视频课程...
  13. 【OpenGL】高级片段着色器——高斯模糊和索贝尔边缘检测
  14. 解决命令提示符已被系统管理员停用的问题
  15. OpenMesh-网格光顺的算法
  16. 网络信息安全之基于时间的安全模型(PDR和PPDR模型)
  17. SQL、MySQL与HiveSQL的使用区别ing
  18. cmos逻辑门传输延迟时间_用DSLogic 逻辑分析仪 解析出来的IIC协议太完美了!
  19. 对比PASCAL和C语言的差异
  20. 莫得感情的资源记录器

热门文章

  1. 展望十二五:“核高基”突破核心技术走向产业化
  2. 【资源网站】推荐几个搜索资源网站
  3. homeassistant
  4. 清空mysql数据库(适用虚拟主机)
  5. 我的世界 1.12.2 Idea 开发包构建教程
  6. 机器学习12-支持向量机的数学上定义
  7. python barrier_Python多线程Barrier(障碍对象) 雷子
  8. 2021-2022 CSU C语言期末考试二
  9. Linux安装lamp环境,安装配置discus论坛
  10. Kmeans聚类K值选择Parametric Bootstrap方法,以及数据重抽样方法Bootstrapping