日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

(二)Cypher语言常用方法举例

發布時間:2023/12/10 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (二)Cypher语言常用方法举例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、概述

Cypher是一個描述性Sql圖操作語言。相當于關系數據庫的Sql,可見其重要性!其語法針對圖的特點而設計,非常方便和靈活。沒有Join,是一大特點!學好Cypher是學好Neo4j的關鍵,也是核心所在!

2、Neo4j字段類型

Neo4j字段類型

3、Neo4j基本操作

3.1 增(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)說明: create (n:Person {id:'20140101',name:'王五',age:30,card:123456}) 相當于關系Sql的: Create table Person(id varchar2,name varchar2,age number,card number ); Insert into Person values(‘20140101’,’王五’,30,123456);

3.2 查(match)

Match查詢語法Match 相當于selectMATCH (n:Person) RETURN n limit 25 等價于: Select * from Person limit 25問題1: 如何給已經存在的人添加關系? Match (n:Person {id:'erzi'}),(f:Person {id:'bozi'}) Merge (n)-[:fuqi]->(f)問題2: 兒子和柏之結婚了,relation如何修改? Match (n:Person ),(f:Person) where n.id='erzi' and f.id='bozi' Merge (n)-[r:fuqi]->(f) # 更Neo4j的一種寫法 Match (n:Person{id:'erzi'}),(f:Person{id:'bozi'}) Merge (n)-[r:fuqi]->(f) 說明:merge用來創建關系,如果已經存在,則可以作為查詢# 查詢和baba這個節點是fathor關系的其它節點,并返回查看這兩個節點 match (n:Person {id:'baba'})-[:fathor]-(f) return n,f # 查詢和baba這個節點的fathor,并返回查看這兩個節點 match (n:Person {id:'baba'})-[:fathor]->(f) return n,f # 查詢和baba這個節點的fathor,只返回baba這個節點的fathor match (n:Person {id:'baba'})-[:fathor]-(f) return f

3.3、改(set)

Cypher中無Update,用set代替# 更新屬性 Match (n:Person {id:'baba'}) set n.name='張三' return n# 屬性名是寫數據時自動創建,無schme特性,這點同no-sql庫;支持非結構化數據;非結構化:不同行的數據可以有不同的列個數; Match (n:Person {id:'baba'}) set n.name='張三',n.age=50 return n說明:Cypher語言中,任意語法都可以有return

3.4 刪(delete,remove)

DELETE和REMOVE主要區別 : ① DELETE操作用于刪除節點和relation(針對圖結構)。 ② REMOVE操作用于刪除標簽label和屬性(針對關系型結構)。說明:Remove label 等同于drop table;兩個命令都應該與MATCH命令一起使用。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 # 或者更Neo4j的寫為 Match (a:Person{id:'erzi'}),(b:Person{id:'bozi'}) merge (a)-[r:FUQI]->(b) DELETE r# 刪除所有記錄 MATCH (n) OPTIONAL MATCH (n)-[r]-() DELETE n,r

3.5 排序(order by)

# 同關系sql MATCH (n:Person) RETURN n order by n.id,n.name desc LIMIT 25# 正序 MATCH (n:Person) RETURN n order by n.id LIMIT 25

3.6 限制顯示(limit)

MATCH (n:Customer) RETURN n LIMIT 25

3.7 跳過前n條(skip)

MATCH (n:Person) RETURN n order by n.id desc skip 2 LIMIT 25

3.8 union和union all

# 同關系sql # 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

3.9 Null

# Where 屬性 is null,其實同關系sql語法,就是把結果進行“并” MATCH (n:Person) where n.age>20 RETURN n.id,n.age union all MATCH (n:Person) where n.id='erzi' and n.age is not null RETURN n.id,n.age

3.10 in

# 中括號標識某個字段的范圍 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

3.11 內置id

每個節點或relation都有個系統分配的id,從0開始遞增,全局唯一! Create (a:Person {id:’123’}) //這里的ID是一個屬性,和內置ID是兩碼事 通過函數id(node/relation) 可以獲取id值; 不透明,猶如Oracle里的rowid; 用戶可定義id屬性,與內置id無關;

3.12?Relation 具有方向性

# Create節點之間關系時,必須指定方向,否則會報錯 # 查詢時可以不指定方向,意思時哪個方向都可以 MATCH (n:Person)-[:FUQI]-(s:Person) RETURN distinct n,s

3.13 索引(index)

# 建立索引后前后的復雜度分別時O(n),O(1) create index on :Person(id); drop index on :Person(id); 給哪些字段創建索引呢?根據查詢需要,把查詢多的字段建索引。 create index on :Person(name);1、不需要給索引起名稱,只需要設置索引字段即可; 2、通過該字段的查詢都走索引whereinsubstring 關系DB中:索引字段套一層函數的話,基本不走索引了。

3.14?執行計劃(explain)

# 用于跟蹤顯示查詢的過程 explain MATCH p=()-[r:ORDERS]->() RETURN p LIMIT 25 explain

?

3.15?屬性唯一約束? CONSTRAINT

# 給屬性建立索引時,同一個屬性值不能對應兩條記錄,其實就是屬性的唯一性約束要求 # 通過CONSTRAINT可以給屬性設置、取消唯一性要求 CREATE CONSTRAINT ON (a:Person) ASSERT a.id IS UNIQUE Drop CONSTRAINT ON (a:Person) ASSERT a.id IS UNIQUE

3.16 常用函數

# 即用即查 功能函數 描述 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命令返回的所有行的平均值。# Neo4j無 group by,用以下方式執行 Match (n:Person) return count(*) Match (n:Person) return avg(n.age) 只包含age不為空的node

3.17?查詢最短路徑(shortestPath)

# 返回所有最短路徑 allShortestPaths # [*..n] 用于表示獲取n層關系,下面的意思時獲取奶奶和媽媽之間距離為<=3的最短路徑,兩個點相連 # 其距離是1,存在多個最短路徑時,僅隨機返回1個 match p=shortestPath((n:Person {id:'mama'})-[*..3]-(b:Person {id:'nainai'})) return p# 關系鏈路越短,代表這兩個節點的關系越密切!

?

總結

以上是生活随笔為你收集整理的(二)Cypher语言常用方法举例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。