Neo4j-Cypher語言語法

Neo4j-Cypher語言語法

本文是記錄Neo4j圖數據庫中實用的Cypher語言語法。node

Cypher是什麼

「Cypher」是一個描述性的類Sql的圖操做語言。至關於關係數據庫的Sql,可見其重要性。其語法針對圖的特色而設計,很是方便和靈活。正則表達式

  • Cypher是一個申明式查詢語言,適合於開發者和在數據庫上作點對點模式(ad-hoc)查詢。
  • Cypher經過一系列不一樣的方法和創建於肯定的實踐爲表達查詢而激發的。許多關鍵字如
  • like和order by是受SQL的啓發。正則表達式匹配實現模仿Scala 語言。 學好Cypher是學好Neo4j的關鍵,也是核心所在!

Cypher語法

Create

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

match至關於sql中的selectsql

MATCH (n:Person) RETURN n limit 25

等價於:數據庫

Select * from Person limit 25

Merge

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和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

order by 同sqlip

Limit 和 Skip

limit:顯示多少行 skip:從最前面開始,跳過多少行開發

Union 和 Union all

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

In

和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

Cypher 索引

create index on:Person(id)
drop index on:Person(id)

注意:

  • 建立索引時不須要給索引發名稱,只須要設置索引的字段便可
  • 經過該字段的查詢都走索引 where in =

惟一約束 Constraint

給某個屬性設置惟一約束

create constraint on (n:Person) assert n.id is unique
drop constraint on (n:Person) assert n.id is unique

執行計劃 explain

相似sql

14220628_8Rao

經常使用函數

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
相關文章
相關標籤/搜索