本文是記錄Neo4j圖數據庫中實用的Cypher語言語法。node
「Cypher」是一個描述性的類Sql的圖操做語言。至關於關係數據庫的Sql,可見其重要性。其語法針對圖的特色而設計,很是方便和靈活。正則表達式
CREATE (erzi:Person {id:‘erzi’}), //erzi是別名 (baba:Person {id:'baba'}), (yeye:Person {id:'yeye',name:'zhangsan'}), (nainai:Person {id:'nainai'}), (mama:Person {id:'mama'}), (bozi:Person {id:'bozi'}), // 建立關係 (erzi)-[:fathor]->(baba), (baba)-[:fathor]->(yeye), (baba)-[:mother]->(nainai), (erzi)-[:mother]->(mama), (erzi)-[:girlFrend]->(bozi)
match
至關於sql中的selectsql
MATCH (n:Person) RETURN n limit 25
等價於:數據庫
Select * from Person limit 25
merge
至關於Match or Create 有則match,無則Create函數
MERGE (n:Person { name: 'Ann' }) RETURN n
下面這兩條語句的對比?設計
match (n:Person {id:'mama'}),(m:Person {id:'nainai'}) merge (n)-[:poxi]->(m) return n,m 和 match (n:Person {id:'mama'}) with n match (m:Person {id:'nainai'}) merge (n)-[:poxi]->(m) return n,m
DELETE和REMOVE主要區別 : DELETE操做用於刪除節點和relation。 REMOVE操做用於刪除標籤label和屬性。 Remove label 等同於drop table 兩個命令都應該與MATCH命令一塊兒使用。code
Match (n:Person {id:'baba'}) remove n.age return n MATCH (s:Teacher)-[r:teach]->(d:Student) delete r,s,d //刪除與該關係相關的老師和學生及label MATCH (n:Test) remove n:Test //刪除label
如何僅僅刪除一個relation?索引
Match (a:Person),(b:Person) where a.id='erzi' and b.id='bozi' merge (a)-[r:FUQI]->(b) DELETE r
order by
同sqlip
limit
:顯示多少行 skip
:從最前面開始,跳過多少行開發
Union
:把多段Match的return結果 上線組合成一個結果集,會自動去掉重複行; Union all
:做用同union,但不去重;
MATCH (n:Person) where n.age>20 RETURN n.id,n.age union all MATCH (n:Person) where n.id='erzi' RETURN n.id,n.age
和sql的區別就是使用[]中括號,而不是()括弧號
MATCH (n:Person) where n.age>20 RETURN n.id,n.age union all MATCH (n:Person) where n.id in ['erzi','bozi','baba'] RETURN n.id,n.age
create index on:Person(id) drop index on:Person(id)
注意:
給某個屬性設置惟一約束
create constraint on (n:Person) assert n.id is unique drop constraint on (n:Person) assert n.id is unique
相似sql
Neo4j無 group by
UPPER
它用於將全部字母更改成大寫字母。LOWER
它用於將全部字母改成小寫字母。SUBSTRING
它用於獲取給定String的子字符串。REPLACE
它用於替換一個字符串的子字符串。 Match (n:Person) return SUBSTRING(n.id,2,0),n.id彙集函數
COUNT
它返回由MATCH命令返回的行數。MAX
它從MATCH命令返回的一組行返回最大值。MIN
它返回由MATCH命令返回的一組行的最小值。SUM
它返回由MATCH命令返回的全部行的求和值。AVG
它返回由MATCH命令返回的全部行的平均值。 Match (n:Person) return count(*) Match (n:Person) return avg(n.age) 只包含age不爲空的node查詢最短路徑
查詢最短路徑的必要性:6層關係理論:任何兩個事物之間的關係都不會超過6層。 關係鏈路越短,表明這兩個節點的關係越密切!
allShortestPaths
[*..n] 用於表示獲取n層關係,顯示全部的鏈路關係(Single shortest path) shortestPath
顯示最短的鏈路(Single shortest path)
match p=allshortestPaths((n:Person {id:'mama'})-[*..3]-(b:Person {id:'nainai'})) return p match p=shortestPath((n:Person {id:'mama'})-[*..3]-(b:Person {id:'nainai'})) return p