一、簡介
Cypher語言是在學習Neo4j時用到數據庫操作語言(DML),涵蓋對圖數據的增刪改查,跟SQL有較大不同,本文僅記錄一些要點備查
二、詳述
1、基本概念
Neo4j中不存在表的概念,只有兩類:節點(Node)和關聯(Relation),可以簡單理解爲圖裏面的點和邊,在數據查詢中,節點一般用小括號(),關聯用中括號[]。當然也隱含路徑的概念,是用節點和關聯表示的,如:(a)-[r]->(b),表示一條從節點a經關聯r到節點b的路徑
2、創建語句
1)創建節點
create (a) 創建空節點
create (a:Person) 創建標籤(可以理解爲類)爲Person的節點
create (a:Person {name:'Kaine',age:28}) 創建標籤爲Person,屬性name值爲Kaine,屬性age值爲28的節點
2)創建關聯
match (a),(b)
where a.name='Kaine' and b.name='Sharon'
create (a)-[r]->(b)
創建a節點和b節點的路徑,此時變量r即代表關聯,它也可以有標籤
2、查詢關鍵字
match:用來匹配一定模式,可以是簡單的節點、關聯,也可以是複雜的路徑
where:用來限定條件,一般是限定match中的出現變量的屬性
return:返回結果
start:開始節點,一般用於有索引的節點或者關聯
3、基本查詢樣式
match ... where ... return ...
如果match有多個對象,用逗號隔開;
如果where有多個條件,用and連接;
如果return有多個變量,用逗號隔開
4、查詢舉例
match (n) return n 查詢所有節點及關聯
match (a)-[r]->(b) where a.name='Kaine' return a,b 查詢屬性name的值是Kaine的節點,及其所有關聯節點
match (a)-[*1..3]->(b) where a.name='Kaine' return a,b 查詢屬性name值是Kaine的節點,及其所有距離爲1到3的關聯節點,
match (a)-[*2]->(b) where a.name='Kaine' and not (a)-[*1]->(b) return a,b 查詢屬性name的值是Kaine的節點,及其所有距離爲2並且去除距離爲1的節點。(在計算好友的好友時會用到,即如果a、b、c三個人都認識,如果僅計算跟a距離爲2的人的時候會把b、c也算上,因爲a->b->c,或者a->c->b都是通路)
注:關聯的中括號內數字的含義
n 距離爲n
..n 最大距離爲n
n.. 最小距離爲n
m..n 距離在m到n之間