Neo4j圖數(shù)據(jù)庫學習手冊

為什么需要圖數(shù)據(jù)庫肚吏?

?????現(xiàn)在,業(yè)務需求的頻繁變動和數(shù)據(jù)之間的復雜聯(lián)系都需要數(shù)據(jù)庫有很強的適應力。對于傳統(tǒng)關系型數(shù)據(jù)庫分扎,對于復雜的數(shù)據(jù)關系并不能很好的展現(xiàn)。比如社交網站的用戶關系胧洒,錯綜復雜就像一張網 畏吓。對于這種數(shù)據(jù),圖數(shù)據(jù)庫就能很好以圖結構來存儲卫漫。

聯(lián)系才是數(shù)據(jù)本質的存在

聊聊neo4j的CQL操作

CQL

CQL是neo4j的圖形查詢語言菲饼。【Cyther(友情提示:賽粉兒) Query Language】

圖數(shù)據(jù)庫有什么列赎?

最簡單的回答:點和邊昂暝谩!
正經一點回答:點代表一個節(jié)點信息,邊代表節(jié)點信息之間的關系饼煞。點和邊都可以具有屬性源葫,以鍵值對的形式。

創(chuàng)建節(jié)點

語法結構:create (<node-name>:<label-name>)
節(jié)點名稱砖瞧、標簽名稱息堂。

create (p:phone)          //創(chuàng)建了一個沒有屬性的節(jié)點,這個節(jié)點是個phone块促,具體是什么phone看使用者是如何定義了
create (p:phone{type:"phone",phoneNumber:"181XXXX3333"})  //創(chuàng)建了一個有屬性的節(jié)點荣堰,想必這種形式大家不陌生。對竭翠,就是你們想的那樣振坚。并且,type也只是屬性之一逃片,并不是必須的屡拨。

按照以上格式,我們可以創(chuàng)建多個褥实。如果想要在創(chuàng)建的時候看到創(chuàng)建結果可以在后面追加
return p;
create (p:phone)  return p;

eg2:
create (b:bag{color:"red"}),(b2:bag{color:"green"})
創(chuàng)建關系

關系是節(jié)點與節(jié)點之間的關聯(lián)呀狼。
關系分為單向和雙向。創(chuàng)建關系時請帶上箭頭>或者<损离。
語法:
match:匹配
where:在某某條件前提下
return:返回一個而結果哥艇,返回什么由后面內容決定
在明確這些前提之后。我們可以這樣:

  1. 已有節(jié)點之間創(chuàng)建無屬性的關系
eg1:
match (p1:phone{phone:"18145626687"}),(p2:phone{phone:"13415556888"}) 
create (p1)-[r:call]->(p2)
return r;

eg2:
match (b1:bag{color:"red"}),(b2:bag{color:"green"}) create (b1)-[r:mixWith]->(b2) return r;

根據(jù)上列CQL僻澎,相信大家還是能讀懂字面意思貌踏。就是我要match倆phone節(jié)點,他們分別是具有某某電話的屬性窟勃。然后我create一個鏈路祖乳,從p1到p2,中間中括號是r:call秉氧,還有個方向鍵眷昆。

即創(chuàng)建一個關系,這個關系是從a到b的汁咏,然后關系的名字是call亚斋。
其中p1和p2就像是對象一樣,隨便叫什么攘滩。

同理帅刊,我們還可以有另一種寫法,把where用上

match (p1:phone),(p2:phone) 
where p1.phone="18145626687" and p2.phone="13415556888"
create (p1)-[r:call]->(p2)
return r;
//創(chuàng)建關系
  1. 已有節(jié)點之間創(chuàng)建有屬性的關系
match (p1:phone),(p2:phone) 
where p1.phone="18145626687" and p2.phone="13415556888"
create (p1)<-[r:call{sumTime:"30.22",counts:"3"}]-(p2)
return r;//可要可以不要這一句漂问,只是看看返回結果
  1. 沒有節(jié)點赖瞒,直接創(chuàng)建節(jié)點和關系
create (h1:hero{name:"ez",age:"18"})-[r:loves{loveTime:"10"}]->(h2:hero{name:"lux",age:"16"})
查詢

語法:match 匹配 + return 返回
單獨使用match是會報錯的女揭,因為只是匹配沒有返回
where 用于篩選條件
with 在return之前進行特殊處理,值得注意的一點是如果return返回某個值冒黑,這個值要在with中申明田绑。

//普通查找節(jié)點
match (pn:hero) where pn.name="ez" return pn;
match res=(pn:hero) where pn.name="ez" return res;
match (pn:hero{name:"ez"}) return pn; 

//排序查找節(jié)點
match res=(p1:hero) return res order by p1.age desc;

//普通查找關系
match res = (p1:hero{name:"ez"})-[r:loves]->(p2:hero) return res; //返回ez愛上了誰,
match res = (p1:hero{name:"ez"})<-[r:loves]-(p2:hero) return res; //返回誰愛ez抡爹,
match res = (p1:hero{name:"ez"})-[r:loves]-(p2:hero) return res; //返回誰和ez相愛了掩驱,
match res = (p1:hero{name:"ez"})-[r:loves]-() return res; //返回ez喜歡的任何東西,除了人還有其他的冬竟,

聚合查找
with 在where后對搜索結果進行二次處理時需要用到
distinct 去重欧穴,可以對節(jié)點去重也可以對節(jié)點的屬性去重
as 重命名(和sql一樣)
count(*)計數(shù)
sum(屬性值的累加) avg、min泵殴、max
沒有group by涮帘。

這里隨便寫一個
match res=(p1:hero{name:"ez"})-[r:loves]->(p2:hero) with distinct p2.name as lover return p1,lover; //返回ez和ez愛上的人,并且出現(xiàn)同名的則只要顯示一個名字就可以了
刪除節(jié)點笑诅、關系

delete 刪除節(jié)點或者關系调缨,刪除節(jié)點時,如果存在關系則刪不掉

match (p:hero{name:"lux"}) delete p;

Neo.ClientError.Schema.ConstraintValidationFailed: Cannot delete node<106743711>, because it still has relationships. To delete this node, you must first delete its relationships.

match (p1:hero{name:"ez"})-[r:loves]->(p2:hero{name:"lux"}) delete r,p2; //刪除關系r和節(jié)點p2吆你。ez不愛拉克絲了弦叶。

待續(xù)。妇多。伤哺。。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末者祖,一起剝皮案震驚了整個濱河市立莉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌七问,老刑警劉巖蜓耻,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異械巡,居然都是意外死亡刹淌,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進店門坟比,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人嚷往,你說我怎么就攤上這事葛账。” “怎么了皮仁?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵籍琳,是天一觀的道長菲宴。 經常有香客問我,道長趋急,這世上最難降的妖魔是什么喝峦? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮呜达,結果婚禮上谣蠢,老公的妹妹穿的比我還像新娘。我一直安慰自己查近,他們只是感情好眉踱,可當我...
    茶點故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著霜威,像睡著了一般谈喳。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上戈泼,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天婿禽,我揣著相機與錄音,去河邊找鬼大猛。 笑死扭倾,一個胖子當著我的面吹牛,可吹牛的內容都是我干的胎署。 我是一名探鬼主播吆录,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼琼牧!你這毒婦竟也來了恢筝?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤巨坊,失蹤者是張志新(化名)和其女友劉穎撬槽,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體趾撵,經...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡侄柔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了占调。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片暂题。...
    茶點故事閱讀 38,814評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖究珊,靈堂內的尸體忽然破棺而出薪者,到底是詐尸還是另有隱情,我是刑警寧澤剿涮,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布言津,位于F島的核電站攻人,受9級特大地震影響,放射性物質發(fā)生泄漏悬槽。R本人自食惡果不足惜怀吻,卻給世界環(huán)境...
    茶點故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望初婆。 院中可真熱鬧蓬坡,春花似錦、人聲如沸烟逊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽宪躯。三九已至乔宿,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間访雪,已是汗流浹背详瑞。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留臣缀,地道東北人坝橡。 一個月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像精置,于是被迫代替她去往敵國和親计寇。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,728評論 2 351

推薦閱讀更多精彩內容