您的位置:首页 > 数据库

Cypher查询语言--Neo4j中的SQL(6)

2012-02-22 14:25 507 查看

排序(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属性值。



结果:


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: