返回節點
返回一個節點,在返回語句中列出即可。
查詢:
START n=node(2)
RETURN n
結果:
返回關系
查詢:
START n=node(1)
MATCH (n)-[r:KNOWS]->(c)
RETURN r
結果:
返回屬性
查詢:
START n=node(1)
RETURN n.name
結果:
帶特殊字符的標識符
使用不在英語字符表中的字符,可以使用’單引號。
查詢:
START
This isn't a commonidentifier=node(1)
RETURN
This isn't a commonidentifier.
<<!!__??>>`
結果:
列的別名
可以給展示出來的列名起別名。
查詢:
START a=node(1)
RETURN a.age AS SomethingTotallyDifferent
返回節點的age屬性,但重命名列名。
結果:
可選屬性
屬性在節點上可能存在也可能不存在,可以使用問號來標識標識符即可。
查詢:
START n=node(1, 2)
RETURN n.age?
如果存在age屬性,則返回,不存在則返回null。
結果:
特別的結果
DISTINCT 僅檢索特別的行,基於選擇輸出的列。
查詢:
START a=node(1)
MATCH (a)-->(b)
RETURN distinct b
返回name為B的節點,但僅為一次。
結果:
neo4j 聚合函數
目錄
- 聚合Aggregation
- 計數
- 計算節點數
- 分組計算關系類型
- 計算實體數
- 計算非空可以值數
- 求和sum
- 平均值avg
- 最大值max
- 最小值min
- 聚類COLLECT
- 相異DISTINCT
聚合(Aggregation)
為集合計算數據,Cypher提供聚類功能,與SQL的group by類似。在return語句中發現的任何聚類函數,所有沒有聚類函數的列將作為聚合key使用。圖:
計數
計數(count)使用來計算行數。Count有兩種使用方法。Count(*)計算匹配的行的行數,count(<標識符>)計算標識符中非空值數。
計算節點數
計算鏈接到一個節點的節點數,可以使用count(*)。
查詢:
START n=node(2)
MATCH (n)-->(x)
RETURN n, count(*)
返回開始節點和相關節點節點數。
結果:
分組計算關系類型
計算分組了得關系類型,返回關系類型並使用count(*)計算。
查詢:
START n=node(2)
MATCH (n)-[r]->()
RETURN type(r), count(*)
返回關系類型和其分組數。
結果:
計算實體數
相比使用count(*),可能計算標識符更實在。
查詢:
START n=node(2)
MATCH (n)-->(x)
RETURN count(x)
返回鏈接到開始節點上的節點數
結果:
計算非空可以值數
查詢:
START n=node(2,3,4,1)
RETURN count(n.property?)
結果:
求和(sum)
Sum集合簡單計算數值類型的值。Null值將自動去掉。如下:
查詢:
START n=node(2,3,4)
RETURN sum(n.property)
計算所有節點屬性值之和。
結果:
平均值(avg)
Avg計算數量列的平均值
查詢:
START n=node(2,3,4)
RETURN avg(n.property)
結果:
最大值(max)
Max查找數字列中的最大值。
查詢:
START n=node(2,3,4)
RETURN max(n.property)
結果:
最小值(min)
Min使用數字屬性作為輸入,並返回在列中最小的值。
查詢:
START n=node(2,3,4)
RETURN min(n.property)
結果:
聚類(COLLECT)
Collect將所有值收集到一個集合list中。
查詢:
START n=node(2,3,4)
RETURN collect(n.property)
返回一個帶有所有屬性值的簡單列。
結果:
相異(DISTINCT)
聚合函數中使用distinct來去掉值中重復的數據。
查詢:
START a=node(2)
MATCH a-->b
RETURN count(distinct b.eyes)
結果:
neo4j 高級篇
目錄
- 排序Order by
- 通過節點屬性排序節點
- 通過多節點屬性排序節點
- 倒序排列節點
- 空值排序
- Skip
- 跳過前三個
- 返回中間兩個
- Limit
- 返回第一部分
- 函數Functions
- 判斷
- All
- Any
- None
- Single
- Scalar函數
- Length
- Type
- Id
- Coalesce
- Iterable函數
- Nodes
- Relationships
- Extract
排序(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屬性值。
結果: