1. 程式人生 > >Cypher查詢語言--Neo4j中的SQL(6)

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屬性值。

結果: