Cypher查詢語言--Neo4j中的SQL(6)
排序(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屬性值。
結果: