




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Neo4j Cypher查詢(xún)語(yǔ)言詳解 Cypher介紹“Cypher”是一個(gè)描述性的圖形查詢(xún)語(yǔ)言,允許不必編寫(xiě)圖形結(jié)構(gòu)的遍歷代碼對(duì)圖形存儲(chǔ)有表現(xiàn)力和效率的查詢(xún)。Cypher還在繼續(xù)發(fā)展和成熟,這也就意味著有可能會(huì)出現(xiàn)語(yǔ)法的變化。同時(shí)也意味著作為組件沒(méi)有經(jīng)歷嚴(yán)格的性能測(cè)試。Cypher設(shè)計(jì)的目的是一個(gè)人類(lèi)查詢(xún)語(yǔ)言,適合于開(kāi)發(fā)者和在數(shù)據(jù)庫(kù)上做點(diǎn)對(duì)點(diǎn)模式(ad-hoc)查詢(xún)的專(zhuān)業(yè)操作人員(我認(rèn)為這個(gè)很重要)。它的構(gòu)念是基于英語(yǔ)單詞和靈巧的圖解。Cyper通過(guò)一系列不同的方法和建立于確定的實(shí)踐為表達(dá)查詢(xún)而激發(fā)的。許多關(guān)鍵字如like和order by是受SQL的啟發(fā)。模式匹配的表達(dá)式來(lái)自于S
2、PARQL。正則表達(dá)式匹配實(shí)現(xiàn)實(shí)用Scala programming language語(yǔ)言。Cypher是一個(gè)申明式的語(yǔ)言。對(duì)比命令式語(yǔ)言如Java和腳本語(yǔ)言如Gremlin和JRuby,它的焦點(diǎn)在于從圖中如何找回(what to retrieve),而不是怎么去做。這使得在不對(duì)用戶(hù)公布的實(shí)現(xiàn)細(xì)節(jié)里關(guān)心的是怎么優(yōu)化查詢(xún)。這個(gè)查詢(xún)語(yǔ)言包含以下幾個(gè)明顯的部分:§ START:在圖中的開(kāi)始點(diǎn),通過(guò)元素的ID或所以查找獲得。§ MATCH:圖形的匹配模式,束縛于開(kāi)始點(diǎn)。§ WHERE:過(guò)濾條件。§ RETURN:返回所需要的。在下例中看三個(gè)關(guān)鍵字示例圖片如下:如
3、:這個(gè)有個(gè)查詢(xún),通過(guò)遍歷圖找到索引里一個(gè)叫John的朋友的朋友(不是他的直接朋友),返回John和找到的朋友的朋友。START john=node:node_auto_index(name = 'John')MATCH john-:friend->()-:friend->fofRETURN john, fof返回結(jié)果:下一步添加過(guò)濾:在下一個(gè)例子中,列出一組用戶(hù)的id并遍歷圖查找這些用戶(hù)接出friend關(guān)系線,返回有屬性name并且其值是以S開(kāi)始的用戶(hù)。START user=node(5,4,1,2,3)MATCH user-:friend->follower
4、WHERE = /S.*/RETURN user, 返回結(jié)果:操作符Cypher中的操作符有三個(gè)不同種類(lèi):數(shù)學(xué),相等和關(guān)系。數(shù)學(xué)操作符有+,-,*,/和%。當(dāng)然只有+對(duì)字符有作用。等于操作符有=,<>,<,>,<=,>=。因?yàn)镹eo4j是一個(gè)模式少的圖形數(shù)據(jù)庫(kù),Cypher有兩個(gè)特殊的操作符?和!。有些是用在屬性上,有些事用于處理缺少值。對(duì)于一個(gè)不存在的屬性做比較會(huì)導(dǎo)致錯(cuò)誤。為替代與其他什么做比較時(shí)總是檢查屬性是否存在,在缺失屬性時(shí)問(wèn)號(hào)將使得比較總是返回true,感嘆號(hào)使得比較總是返回false。WHER
5、Ep? = "foo"這個(gè)斷言在屬性缺失情況下將評(píng)估為true。WHEREp! = "foo"這個(gè)斷言在屬性缺失情況下將評(píng)估為false。警告:在同一個(gè)比較中混合使用兩個(gè)符號(hào)將導(dǎo)致不可預(yù)料的結(jié)果。參數(shù)Cypher支持帶參數(shù)的查詢(xún)。這允許開(kāi)發(fā)者不需要必須構(gòu)建一個(gè)string的查詢(xún),并且使得Cypher的查詢(xún)計(jì)劃的緩存更容易。參數(shù)可以在where子句,start子句的索引key或索引值,索引查詢(xún)中作為節(jié)點(diǎn)/關(guān)系id的引用。以下是幾個(gè)在java中使用參數(shù)的示例:節(jié)點(diǎn)id參數(shù)Map<String, Object> params =
6、 new HashMap<String, Object>();params.put( "id", 0 );ExecutionResult result = engine.execute( "start n=node(id) return ", params );節(jié)點(diǎn)對(duì)象參數(shù)Map<String, Object> params = new HashMap<String, Object>();params.put( "node", andreasNode );ExecutionResult
7、result = engine.execute( "start n=node(node) return ", params );多節(jié)點(diǎn)id參數(shù)Map<String, Object> params = new HashMap<String, Object>();params.put( "id", Arrays.asList( 0, 1, 2 ) );ExecutionResult result = engine.execute( "start n=node(id) return ", pa
8、rams );字符串參數(shù)Map<String, Object> params = new HashMap<String, Object>();params.put( "name", "Johan" );ExecutionResult result = engine.execute( "start n=node(0,1,2) where = name return n", params );索引鍵值參數(shù)Map<String, Object> params = new HashMap<
9、;String, Object>();params.put( "key", "name" );params.put( "value", "Michaela" );ExecutionResult result = engine.execute( "start n=node:people(key = value) return n", params );索引查詢(xún)參數(shù)Map<String, Object> params = new HashMap<String, Object&
10、gt;();params.put( "query", "name:Andreas" );ExecutionResult result = engine.execute( "start n=node:people(query) return n", params );§ SKIP 與LIMIT * 的數(shù)字參數(shù)Map<String, Object> params = new HashMap<String, Object>();params.put( "s", 1 );params.pu
11、t( "l", 1 );ExecutionResult result = engine.execute( "start n=node(0,1,2) return skip s limit l", params );§ 正則表達(dá)式參數(shù)Map<String, Object> params = new HashMap<String, Object>();params.put( "regex", ".*h.*" );ExecutionResult result = engin
12、e.execute( "start n=node(0,1,2) where = regex return ", params );標(biāo)識(shí)符當(dāng)你參考部分的模式時(shí),需要通過(guò)命名完成。定義的不同的命名部分就被稱(chēng)為標(biāo)識(shí)符。如下例中:START n=node(1) MATCH n->b RETURN b標(biāo)識(shí)符為n和b。標(biāo)識(shí)符可以是大寫(xiě)或小些,可以包含下劃線。當(dāng)需要其他字符時(shí)可以使用符號(hào)。對(duì)于屬性名的規(guī)則也是一樣。注解可以在查詢(xún)語(yǔ)句中使用雙斜杠來(lái)添加注解。如:START n=node(1) RETURN b /這是行結(jié)束注釋START n=node(1)
13、RETURN bSTART n=node(1) WHERE perty = "/這部是一個(gè)注釋" RETURN bStart每一個(gè)查詢(xún)都是描述一個(gè)圖案(模式),在這個(gè)圖案(模式)中可以有多個(gè)限制點(diǎn)。一個(gè)限制點(diǎn)是為模式匹配的從開(kāi)始點(diǎn)出發(fā)的一條關(guān)系或一個(gè)節(jié)點(diǎn)??梢酝ㄟ^(guò)id或索引查詢(xún)綁定點(diǎn)。通過(guò)id綁定點(diǎn)通過(guò)node(*)函數(shù)綁定一個(gè)節(jié)點(diǎn)作為開(kāi)始點(diǎn)查詢(xún):START n=node(1)RETURN n返回引用的節(jié)點(diǎn)。結(jié)果:通過(guò)id綁定關(guān)系可以通過(guò)relationship()函數(shù)綁定一個(gè)關(guān)系作為開(kāi)始點(diǎn)。也可以通過(guò)縮寫(xiě)rel()。查詢(xún):START r=relationship
14、(0)RETURN rId為0的關(guān)系將被返回結(jié)果:通過(guò)id綁定多個(gè)節(jié)點(diǎn)選擇多個(gè)節(jié)點(diǎn)可以通過(guò)逗號(hào)分開(kāi)。查詢(xún):START n=node(1, 2, 3)RETURN n結(jié)果:所有節(jié)點(diǎn)得到所有節(jié)點(diǎn)可以通過(guò)星號(hào)(*),同樣對(duì)于關(guān)系也適用。查詢(xún):START n=node(*)RETURN n這個(gè)查詢(xún)將返回圖中所有節(jié)點(diǎn)。結(jié)果:通過(guò)索引查詢(xún)獲取節(jié)點(diǎn)如果開(kāi)始節(jié)點(diǎn)可以通過(guò)索引查詢(xún)得到,可以如此來(lái)寫(xiě):node:index-name(key=”value”)。在此列子中存在一個(gè)節(jié)點(diǎn)索引叫nodes。查詢(xún):START n=node:nodes(name = "A")RETURN n索引中命名為A的
15、節(jié)點(diǎn)將被返回。結(jié)果:通過(guò)索引查詢(xún)獲取關(guān)系如果開(kāi)始點(diǎn)可以通過(guò)索引查詢(xún)得到,可以如此做:Relationship:index-name(key=”value”)。查詢(xún):START r=relationship:rels(property ="some_value")RETURN r索引中屬性名為”some_value”的關(guān)系將被返回。結(jié)果:多個(gè)開(kāi)始點(diǎn)有時(shí)需要綁定多個(gè)開(kāi)始點(diǎn)。只需要列出并以逗號(hào)分隔開(kāi)。查詢(xún):START a=node(1), b=node(2)RETURN a,bA和B兩個(gè)節(jié)點(diǎn)都將被返回。結(jié)果:Match在一個(gè)查詢(xún)的匹配(match)部分申明圖形(模式)。模式的申明
16、導(dǎo)致一個(gè)或多個(gè)以逗號(hào)隔開(kāi)的路徑(path)。節(jié)點(diǎn)標(biāo)識(shí)符可以使用或者不是用圓括號(hào)。使用圓括號(hào)與不使用圓括號(hào)完全對(duì)等,如:MATCH(a)->(b) 與 MATCH a->b 匹配模式完全相同。模式的所有部分都直接或者間接地綁定到開(kāi)始點(diǎn)上??蛇x關(guān)系是一個(gè)可選描述模式的方法,但在真正圖中可能沒(méi)有匹配(節(jié)點(diǎn)可能沒(méi)有或者沒(méi)有此類(lèi)關(guān)系時(shí)),將被估值為null。與SQL中的外聯(lián)結(jié)類(lèi)似,如果Cypher發(fā)現(xiàn)一個(gè)或者多個(gè)匹配,將會(huì)全部返回。如果沒(méi)有匹配,Cypher將返回null。如以下例子,b和p都是可選的病都可能包含null:START a=node(1) MATCH p = a-?->b
17、START a=node(1) MATCH p = a-*?->bSTART a=node(1) MATCH p = a-?->x->bSTART a=node(1), x=node(100) MATCH p = shortestPath( a-*?->x )相關(guān)節(jié)點(diǎn)符號(hào)意味著相關(guān)性,不需要關(guān)心方向和類(lèi)型。查詢(xún):START n=node(3)MATCH (n)-(x)RETURN x所有與A相關(guān)節(jié)點(diǎn)都被返回。結(jié)果:接出關(guān)系(Outgong relationship)當(dāng)對(duì)關(guān)系的方向感興趣時(shí),可以使用->或<-符號(hào),如:查詢(xún):START n=node(3)MAT
18、CH (n)->(x)RETURN x所有A的接出關(guān)系到達(dá)的節(jié)點(diǎn)將被返回.結(jié)果:定向關(guān)系和標(biāo)識(shí)符如果需要關(guān)系的標(biāo)識(shí)符,為了過(guò)濾關(guān)系的屬性或?yàn)榱朔祷仃P(guān)系,可如下例使用標(biāo)識(shí)符。查詢(xún):START n=node(3)MATCH (n)-r->()RETURN r所有從節(jié)點(diǎn)A接出的關(guān)系將被返回。結(jié)果:通過(guò)關(guān)系類(lèi)型匹配當(dāng)已知關(guān)系類(lèi)型并想通過(guò)關(guān)系類(lèi)型匹配時(shí),可以通過(guò)冒號(hào)詳細(xì)描述。查詢(xún):START n=node(3)MATCH (n)-:BLOCKS->(x)RETURN x返回A接出關(guān)系類(lèi)型為BLOCKS的節(jié)點(diǎn)。結(jié)果:通過(guò)關(guān)系類(lèi)型匹配和使用標(biāo)識(shí)符如果既想獲得關(guān)系又要通過(guò)已知的關(guān)系類(lèi)型,那就
19、都添加上,如:查詢(xún):START n=node(3)MATCH (n)-r:BLOCKS->()RETURN r所有從A接出的關(guān)系為BLOCKS的關(guān)系都被返回。結(jié)果:帶有特殊字符的關(guān)系類(lèi)型有時(shí)候數(shù)據(jù)庫(kù)中有非字母字符類(lèi)型,或有空格在內(nèi)時(shí),使用單引號(hào)。查詢(xún):START n=node(3)MATCH (n)-r:TYPE WITH SPACE IN IT->()RETURN r返回類(lèi)型有空格的關(guān)系。結(jié)果:多重關(guān)系關(guān)系可以通過(guò)使用在()()多個(gè)語(yǔ)句來(lái)表達(dá),或可以串在一起。如下:查詢(xún):START a=node(3)MATCH (a)-:KNOWS->(b)-:KNOWS->(c)R
20、ETURN a,b,c路徑中的三個(gè)節(jié)點(diǎn)。結(jié)果:可變長(zhǎng)度的關(guān)系可變數(shù)量的關(guān)系->節(jié)點(diǎn)可以使用-:TYPE*minHops.maxHops->。查詢(xún):START a=node(3), x=node(2, 4)MATCH a-:KNOWS*1.3->xRETURN a,x如果在1到3的關(guān)系中存在路徑,將返回開(kāi)始點(diǎn)和結(jié)束點(diǎn)。結(jié)果:在可變長(zhǎng)度關(guān)系的關(guān)系標(biāo)識(shí)符當(dāng)連接兩個(gè)節(jié)點(diǎn)的長(zhǎng)度是可變的不確定的時(shí),可以使用一個(gè)關(guān)系標(biāo)識(shí)符遍歷所有關(guān)系。查詢(xún):START a=node(3), x=node(2, 4)MATCH a-r:KNOWS*1.3->xRETURN r如果在1到3的關(guān)系中存在路
21、徑,將返回開(kāi)始點(diǎn)和結(jié)束點(diǎn)。結(jié)果:零長(zhǎng)度路徑當(dāng)使用可變長(zhǎng)度路徑,可能其路徑長(zhǎng)度為0,這也就是說(shuō)兩個(gè)標(biāo)識(shí)符指向的為同一個(gè)節(jié)點(diǎn)。如果兩點(diǎn)間的距離為0,可以確定這是同一個(gè)節(jié)點(diǎn)。查詢(xún):START a=node(3)MATCH p1=a-:KNOWS*0.1->b, p2=b-:BLOCKS*0.1->cRETURN a,b,c, length(p1), length(p2)這個(gè)查詢(xún)將返回四個(gè)路徑,其中有些路徑長(zhǎng)度為0.結(jié)果:可選關(guān)系如果關(guān)系為可選的,可以使用問(wèn)號(hào)表示。與SQL的外連接類(lèi)似。如果關(guān)系存在,將被返回。如果不存在在其位置將以null代替。查詢(xún):START a=node(2)MATC
22、H a-?->xRETURN a,x返回一個(gè)節(jié)點(diǎn)和一個(gè)null,因?yàn)檫@個(gè)節(jié)點(diǎn)沒(méi)有關(guān)系。結(jié)果:可選類(lèi)型和命名關(guān)系通過(guò)一個(gè)正常的關(guān)系,可以決定哪個(gè)標(biāo)識(shí)符可以進(jìn)入,那些關(guān)系類(lèi)型是需要的。查詢(xún):START a=node(3)MATCH a-r?:LOVES->()RETURN a,r返回一個(gè)節(jié)點(diǎn)和一個(gè)null,因?yàn)檫@個(gè)節(jié)點(diǎn)沒(méi)有關(guān)系。結(jié)果:可選元素的屬性返回可選元素上的屬性,null值將返回null。查詢(xún):START a=node(2)MATCH a-?->xRETURN x, 元素x在查詢(xún)中為null,所有其屬性name為null。結(jié)果:復(fù)雜匹配在Cypher中,可喲通過(guò)
23、更多復(fù)雜模式來(lái)匹配,像一個(gè)鉆石形狀模式。查詢(xún):START a=node(3)MATCH (a)-:KNOWS->(b)-:KNOWS->(c),(a)-:BLOCKS-(d)-:KNOWS-(c)RETURN a,b,c,d路徑中的四個(gè)節(jié)點(diǎn)。結(jié)果:最短路徑使用shortestPath函數(shù)可以找出一條兩個(gè)節(jié)點(diǎn)間的最短路徑,如下。查詢(xún):START d=node(1), e=node(2)MATCH p = shortestPath( d-*.15->e )RETURN p這意味著:找出兩點(diǎn)間的一條最短路徑,最大關(guān)系長(zhǎng)度為15.圓括號(hào)內(nèi)是一個(gè)簡(jiǎn)單的路徑連接,開(kāi)始節(jié)點(diǎn),連接關(guān)系和結(jié)束
24、節(jié)點(diǎn)。關(guān)系的字符描述像關(guān)系類(lèi)型,最大數(shù)和方向在尋找最短路徑中都將被用到。也可以標(biāo)識(shí)路徑為可選。結(jié)果:所有最但路徑找出兩節(jié)點(diǎn)節(jié)點(diǎn)所有的最短路徑。查詢(xún):START d=node(1), e=node(2)MATCH p = allShortestPaths( d-*.15->e )RETURN p這將在節(jié)點(diǎn)d與e中找到兩條有方向的路徑。結(jié)果:命名路徑如果想在模式圖上的路徑進(jìn)行過(guò)濾或者返回此路徑,可以使用命名路徑(named path)。查詢(xún):START a=node(3)MATCH p = a->bRETURN p開(kāi)始節(jié)點(diǎn)的兩個(gè)路徑。結(jié)果:在綁定關(guān)系上的匹配當(dāng)模式中包含一個(gè)綁定關(guān)系時(shí),
25、此關(guān)系模式?jīng)]有明確的方向,Cypher將嘗試著切換連接節(jié)點(diǎn)的邊匹配關(guān)系。查詢(xún):START a=node(3), b=node(2)MATCH a-?:KNOWS-x-?:KNOWS-bRETURN x將返回兩個(gè)連接節(jié)點(diǎn),一次為開(kāi)始節(jié)點(diǎn),一次為結(jié)束節(jié)點(diǎn)。結(jié)果:Where如果需要從查找的數(shù)據(jù)的圖中過(guò)濾,可以在查詢(xún)語(yǔ)句中添加where子句。圖:Boolean 操作類(lèi)型可以使用boolean操作符and 和 or 或者也可以使用not()函數(shù)。查詢(xún):START n=node(3, 1)WHERE (n.age < 30 and = "Tobias") ornot
26、( = "Tobias")RETURN n返回節(jié)點(diǎn)。結(jié)果:節(jié)點(diǎn)屬性上的過(guò)濾查詢(xún):START n=node(3, 1)WHERE n.age < 30RETURN n結(jié)果:正則表達(dá)式可以通過(guò)使用= /regexp/來(lái)匹配正在表達(dá)式。如下:查詢(xún):START n=node(3, 1)WHERE = /Tob.*/RETURN n返回名叫Tobias的節(jié)點(diǎn)。結(jié)果: 轉(zhuǎn)義正則表達(dá)式如果在正則表達(dá)式中需要有斜杠時(shí)可以通過(guò)轉(zhuǎn)義實(shí)現(xiàn)。查詢(xún):START n=node(3, 1)WHERE = /Some/thing/RETURN n沒(méi)有
27、匹配的節(jié)點(diǎn)返回。結(jié)果:不分大小些正則表達(dá)式在正則表達(dá)式前加上?i,整個(gè)正則表達(dá)式將會(huì)忽略大小寫(xiě)。查詢(xún):START n=node(3, 1)WHERE = /(?i)ANDR.*/RETURN n屬性name為Andres的節(jié)點(diǎn)將返回結(jié)果: 關(guān)系類(lèi)型上的過(guò)濾可以match模式中通過(guò)添加具體的關(guān)系類(lèi)型,但有時(shí)需要針對(duì)類(lèi)型的更加高級(jí)的過(guò)濾??梢允褂妹鞔_的type屬性來(lái)對(duì)比,查詢(xún)對(duì)關(guān)系類(lèi)型名作一個(gè)正則比較。查詢(xún):START n=node(3)MATCH (n)-r->()WHERE type(r) = /K.*/RETURN r關(guān)系整個(gè)以K開(kāi)始的類(lèi)型名都將返回。結(jié)果:
28、160;屬性存在性查詢(xún):START n=node(3, 1)WHERE n.beltRETURN n結(jié)果:如果缺失屬性默認(rèn)為true僅當(dāng)屬性存在時(shí),比較一個(gè)圖的元素的此屬性,使用允許空屬性的語(yǔ)法。查詢(xún):START n=node(3, 1)WHERE n.belt? = 'white'RETURN n所有節(jié)點(diǎn)即使沒(méi)有belt屬性的 都將返回。此類(lèi)比較返回為true。結(jié)果: 如果缺失屬性默認(rèn)為false需要在缺失屬性時(shí)為false,即不想返回此屬性不存在的節(jié)點(diǎn)時(shí)。使用感嘆號(hào)。查詢(xún):START n=node(3, 1)WHERE n.belt! = 'white
29、39;RETURN n結(jié)果: 空置null過(guò)濾有時(shí)候需要測(cè)試值或者標(biāo)識(shí)符是否為null。與sql類(lèi)似使用 is null 或 not(is null x)也能起作用。查詢(xún):START a=node(1), b=node(3, 2)MATCH a<-r?-bWHERE r is nullRETURN bTobias節(jié)點(diǎn)沒(méi)有鏈接上。結(jié)果: 關(guān)系過(guò)濾為過(guò)濾兩點(diǎn)間基于關(guān)系的子圖,在match子句中使用限制部分??梢悦枋鰩Х较虻年P(guān)系和可能的類(lèi)型。這些都是有效的表達(dá):WHERE a-b WHERE a-b WHERE a:KNOWS-bWHERE a-:KNOWS-b查詢(xún):STA
30、RT a=node(1), b=node(3, 2)WHERE a<-bRETURN bTobias節(jié)點(diǎn)沒(méi)有鏈接結(jié)果: neo4j 綜合目錄1. 返回節(jié)點(diǎn)2. 返回關(guān)系3. 返回屬性4. 帶特殊字符的標(biāo)識(shí)符5. 列的別名6. 可選屬性7. 特別的結(jié)果 查詢(xún)中的返回部分,返回途中定義的感興趣的部分??梢詾楣?jié)點(diǎn)、關(guān)系或其上的屬性。圖返回節(jié)點(diǎn)返回一個(gè)節(jié)點(diǎn),在返回語(yǔ)句中列出即可。查詢(xún):START n=node(2)RETURN n 結(jié)果:返回關(guān)系查詢(xún):START n=node(1)MATCH (n)-r:KNOWS->(c)RETURN r結(jié)果:返
31、回屬性查詢(xún):START n=node(1)RETURN 結(jié)果:帶特殊字符的標(biāo)識(shí)符使用不在英語(yǔ)字符表中的字符,可以使用單引號(hào)。查詢(xún):START This isn't a commonidentifier=node(1)RETURN This isn't a commonidentifier.<<!_?>>結(jié)果:列的別名可以給展示出來(lái)的列名起別名。查詢(xún):START a=node(1)RETURN a.age AS SomethingTotallyDifferent 返回節(jié)點(diǎn)的age屬性,但重命名列名。結(jié)果:可選屬性屬
32、性在節(jié)點(diǎn)上可能存在也可能不存在,可以使用問(wèn)號(hào)來(lái)標(biāo)識(shí)標(biāo)識(shí)符即可。查詢(xún):START n=node(1, 2)RETURN n.age?如果存在age屬性,則返回,不存在則返回null。結(jié)果:特別的結(jié)果DISTINCT 僅檢索特別的行,基于選擇輸出的列。查詢(xún):START a=node(1)MATCH (a)->(b)RETURN distinct b返回name為B的節(jié)點(diǎn),但僅為一次。結(jié)果:neo4j 聚合函數(shù)目錄1. 聚合Aggregation1. 計(jì)數(shù)2. 計(jì)算節(jié)點(diǎn)數(shù)3. 分組計(jì)算關(guān)系類(lèi)型4. 計(jì)算實(shí)體數(shù)5. 計(jì)算非空可以值數(shù)6. 求和sum7. 平均值avg8. 最大值max9
33、. 最小值min10. 聚類(lèi)COLLECT11. 相異DISTINCT聚合(Aggregation)為集合計(jì)算數(shù)據(jù),Cypher提供聚類(lèi)功能,與SQL的group by類(lèi)似。在return語(yǔ)句中發(fā)現(xiàn)的任何聚類(lèi)函數(shù),所有沒(méi)有聚類(lèi)函數(shù)的列將作為聚合key使用。圖:計(jì)數(shù)計(jì)數(shù)(count)使用來(lái)計(jì)算行數(shù)。Count有兩種使用方法。Count(*)計(jì)算匹配的行的行數(shù),count(<標(biāo)識(shí)符>)計(jì)算標(biāo)識(shí)符中非空值數(shù)。計(jì)算節(jié)點(diǎn)數(shù)計(jì)算鏈接到一個(gè)節(jié)點(diǎn)的節(jié)點(diǎn)數(shù),可以使用count(*)。查詢(xún):START n=node(2)MATCH (n)->(x)RETURN n, count(*)
34、返回開(kāi)始節(jié)點(diǎn)和相關(guān)節(jié)點(diǎn)節(jié)點(diǎn)數(shù)。結(jié)果:分組計(jì)算關(guān)系類(lèi)型計(jì)算分組了得關(guān)系類(lèi)型,返回關(guān)系類(lèi)型并使用count(*)計(jì)算。查詢(xún):START n=node(2)MATCH (n)-r->()RETURN type(r), count(*) 返回關(guān)系類(lèi)型和其分組數(shù)。結(jié)果:計(jì)算實(shí)體數(shù)相比使用count(*),可能計(jì)算標(biāo)識(shí)符更實(shí)在。查詢(xún):START n=node(2)MATCH (n)->(x)RETURN count(x) 返回鏈接到開(kāi)始節(jié)點(diǎn)上的節(jié)點(diǎn)數(shù)結(jié)果:計(jì)算非空可以值數(shù)查詢(xún):START n=node(2,3,4,1)RETURN count(perty?)
35、60;結(jié)果:求和(sum)Sum集合簡(jiǎn)單計(jì)算數(shù)值類(lèi)型的值。Null值將自動(dòng)去掉。如下:查詢(xún):START n=node(2,3,4)RETURN sum(perty) 計(jì)算所有節(jié)點(diǎn)屬性值之和。結(jié)果:平均值(avg)Avg計(jì)算數(shù)量列的平均值查詢(xún):START n=node(2,3,4)RETURN avg(perty) 結(jié)果:最大值(max)Max查找數(shù)字列中的最大值。查詢(xún):START n=node(2,3,4)RETURN max(perty) 結(jié)果:最小值(min)Min使用數(shù)字屬性作為輸入,并返回在列中最小的值。查詢(xún):START n=
36、node(2,3,4)RETURN min(perty) 結(jié)果:聚類(lèi)(COLLECT)Collect將所有值收集到一個(gè)集合list中。查詢(xún):START n=node(2,3,4)RETURN collect(perty) 返回一個(gè)帶有所有屬性值的簡(jiǎn)單列。結(jié)果:相異(DISTINCT)聚合函數(shù)中使用distinct來(lái)去掉值中重復(fù)的數(shù)據(jù)。查詢(xún):START a=node(2)MATCH a->bRETURN count(distinct b.eyes) 結(jié)果:neo4j 高級(jí)篇目錄1. 排序Order by1. 通過(guò)節(jié)點(diǎn)屬性排序節(jié)點(diǎn)2. 通過(guò)多
37、節(jié)點(diǎn)屬性排序節(jié)點(diǎn)3. 倒序排列節(jié)點(diǎn)4. 空值排序2. Skip1. 跳過(guò)前三個(gè)2. 返回中間兩個(gè)3. Limit1. 返回第一部分4. 函數(shù)Functions1. 判斷2. All3. Any4. None5. Single6. Scalar函數(shù)7. Length8. Type9. Id10. Coalesce11. Iterable函數(shù)12. Nodes13. Relationships14. Extract排序(Order by)輸出結(jié)果排序可以使用order by 子句。注意,不能使用節(jié)點(diǎn)或者關(guān)系排序,僅僅只針對(duì)其屬性有效。圖:通過(guò)節(jié)點(diǎn)屬性排序節(jié)點(diǎn)查詢(xún):START n=node(3,1,
38、2)RETURN nORDER BY 結(jié)果:通過(guò)多節(jié)點(diǎn)屬性排序節(jié)點(diǎn)在order by子句中可以通過(guò)多個(gè)屬性來(lái)排序每個(gè)標(biāo)識(shí)符。Cypher首先將通過(guò)第一個(gè)標(biāo)識(shí)符排序,如果第一個(gè)標(biāo)識(shí)符或?qū)傩韵嗟?,則在order by中檢查下一個(gè)屬性,依次類(lèi)推。查詢(xún):START n=node(3,1,2)RETURN nORDER BY n.age, 首先通過(guò)age排序,然后再通過(guò)name排序。結(jié)果:倒序排列節(jié)點(diǎn)可以在標(biāo)識(shí)符后添加desc或asc來(lái)進(jìn)行倒序排列或順序排列。查詢(xún):START n=node(3,1,2)RETURN nORDER BY DES
39、C 結(jié)果: 空值排序當(dāng)排列結(jié)果集時(shí),在順序排列中null將永遠(yuǎn)放在最后,而在倒序排列中放最前面。查詢(xún):START n=node(3,1,2)RETURN n.length?, nORDER BY n.length? 結(jié)果: SkipSkip允許返回總結(jié)果集中的一個(gè)子集。此不保證排序,除非使用了order by子句。 圖:跳過(guò)前三個(gè)返回結(jié)果中一個(gè)子集,從第三個(gè)結(jié)果開(kāi)始,語(yǔ)法如下:查詢(xún):START n=node(3, 4, 5, 1, 2)RETURN nORDER BY SKIP 3 前三個(gè)節(jié)點(diǎn)將略過(guò),最后兩個(gè)節(jié)點(diǎn)將被返回。結(jié)果:
40、160;返回中間兩個(gè)查詢(xún):START n=node(3, 4, 5, 1, 2)RETURN nORDER BY SKIP 1LIMIT 2 中間兩個(gè)節(jié)點(diǎn)將被返回。結(jié)果: LimitLimit允許返回結(jié)果集中的一個(gè)子集。圖:返回第一部分查詢(xún):START n=node(3, 4, 5, 1, 2)RETURN nLIMIT 3 結(jié)果:函數(shù)(Functions)在Cypher中有一組函數(shù),可分為三類(lèi)不同類(lèi)型:判斷、標(biāo)量函數(shù)和聚類(lèi)函數(shù)。圖:判斷判斷為boolean函數(shù),對(duì)給出的輸入集合做判斷并返回true或者false。常用在where子句中過(guò)濾子集。All
41、迭代測(cè)試集合中所有元素的判斷。語(yǔ)法:All(標(biāo)識(shí)符 in iterable where 判斷)參數(shù):Ø iterable :一個(gè)集合屬性,或者可迭代的元素,或一個(gè)迭代函數(shù)。Ø 標(biāo)識(shí)符:可用于判斷比較的標(biāo)識(shí)符。Ø 判斷:一個(gè)測(cè)試所有迭代器中元素的判斷。查詢(xún):START a=node(3), b=node(1)MATCH p=a-*1.3->bWHERE all(x in nodes(p) WHERE x.age > 30)RETURN p過(guò)濾包含age30的節(jié)點(diǎn)的路徑,返回符合條件路徑中所有節(jié)點(diǎn)。結(jié)果:Any語(yǔ)法:AN
42、Y(identifierin iterable WHERE predicate)參數(shù):Ø Iterable(迭代器):一個(gè)集合屬性,或者可迭代的元素,或一個(gè)迭代函數(shù)。Ø Identifier(標(biāo)識(shí)符):可用于判斷比較的標(biāo)識(shí)符。Ø Predicate(判斷):一個(gè)測(cè)試所有迭代器中元素的判斷。查詢(xún):START a=node(2)WHERE any(x in a.array WHERE x = "one")RETURN a結(jié)果:None在迭代器中沒(méi)有元素判斷將返回true。語(yǔ)法:NONE(identifierin
43、iterable WHERE predicate)Ø Iterable(迭代器):一個(gè)集合屬性,或者可迭代的元素,或一個(gè)迭代函數(shù)。Ø Identifier(標(biāo)識(shí)符):可用于判斷比較的標(biāo)識(shí)符。Ø Predicate(判斷):一個(gè)測(cè)試所有迭代器中元素的判斷。查詢(xún):START n=node(3)MATCH p=n-*1.3->bWHERE NONE(x in nodes(p) WHERE x.age = 25)RETURN p 結(jié)果:Single如果迭代器中僅有一個(gè)元素則返回true。語(yǔ)法:SINGLE(identifierin iterable WHERE predicate)參數(shù):Ø Iterable(迭代器):一個(gè)集合屬性,或者可迭代的元素,或一個(gè)迭代函數(shù)。Ø Identifier(標(biāo)識(shí)符):可用于判斷比較的標(biāo)識(shí)符。Ø Pre
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 無(wú)人機(jī)應(yīng)用技術(shù)2.9.固定翼無(wú)人機(jī)滑跑起降(實(shí)操)
- 無(wú)人機(jī)應(yīng)用技術(shù)1.15.穿越機(jī)的攝像頭
- 內(nèi)蒙古呼和浩特市重點(diǎn)名校2025年化學(xué)高二下期末調(diào)研試題含解析
- 2025屆太原師院附中化學(xué)高二下期末綜合測(cè)試試題含解析
- 新疆烏魯木齊市四中2025年高二化學(xué)第二學(xué)期期末質(zhì)量檢測(cè)模擬試題含解析
- 支部工作研討題目及答案
- 政治紀(jì)律教育題目及答案
- 湖北省武漢為明學(xué)校2025屆化學(xué)高二下期末教學(xué)質(zhì)量檢測(cè)試題含解析
- 2025年中國(guó)高速單面毛巾針織機(jī)行業(yè)投資前景及策略咨詢(xún)研究報(bào)告
- 2025年中國(guó)音簧行業(yè)投資前景及策略咨詢(xún)研究報(bào)告
- 智能化設(shè)備技術(shù)規(guī)格書(shū)范本
- 電子商務(wù)數(shù)據(jù)分析題庫(kù)與參考答案
- 期末考試-公共財(cái)政概論-章節(jié)習(xí)題
- 幼兒園體能大循環(huán)培訓(xùn)
- (正式版)JBT 3300-2024 平衡重式叉車(chē) 整機(jī)試驗(yàn)方法
- 團(tuán)體心理咨詢(xún)的主要理論專(zhuān)家講座
- 骨盆骨折中醫(yī)護(hù)理常規(guī)
- mil-std-1916抽樣標(biāo)準(zhǔn)(中文版)
- 大學(xué)學(xué)院“十四五”師資隊(duì)伍建設(shè)規(guī)劃(2021-2025)
- 鋰電池行業(yè)MES應(yīng)用解決方案
- TCHALPA 0004-2023 民用無(wú)人機(jī)應(yīng)急救援應(yīng)用專(zhuān)業(yè)操控員合格證考試點(diǎn)管理辦法
評(píng)論
0/150
提交評(píng)論