neo4j 圖資料庫之 cypher常用文法
- cypher語言說明
-
- CQL資料類型
- 删除語句
- 建立節點語句
- 建立關系語句
- 查詢庫資訊語句
- 查詢資料語句
- 全文索引
- 配置檔案
- 權限配置
- 清空資料庫
cypher語言說明
cypher 是neo4j聲明式聲明式查詢語言,簡稱CQL。它遵循SQL文法,非常簡單并且具有可讀性的結構化格式。
CQL資料類型
類型 | 說明 |
---|---|
boolean | 用于表示布爾文字:true,false。 |
byte | 用于表示8位整數。 |
short | 用于表示16位整數。 |
int | 用于表示32位整數。 |
long | 用于表示64位整數。 |
float | 用于表示32位浮點數。 |
double | 用于表示64位浮點數。 |
char | 用于表示16位字元。 |
String | 用于表示字元串。 |
删除語句
- 删除所有節點及其關系
MATCH (a) OPTIONAL MATCH (a)-[r]-() DELETE a,r
- 删除某個節點
MATCH (a:student) DELETE a
- 删除屬性
- 删除屬性
MATCH (a:student) REMOVE a.name
- 删除關系
MATCH (a:student1)-[r:test_graph]-(a:student2) DELETE r
建立節點語句
- 建立一個空節點
- 建立一個帶有lable節點
- 建立節點并配置設定屬性
CREATE (a:student{age:18,name:'張三'}) RETURN * //注意:在已有的節點且屬性相同會重複建立
MERGE (a:student{age:18,name:'張三'}) RETURN * //注意:沒有此節點會建立立,已有此節點且屬性相同會融合,已有此節點且屬性值包含建立語句的屬性值不會新建立,已有此節點且屬性不同會建立立
MERGE (a:student{age:18,name:'張三',nick:['三三','小三']}) RETURN *
- 批量建立節點并且配置設定屬性
UNWIND [{name:"李四"},{name:"張三"}] AS nodes CREATE (student) SET student= nodes
- 新增、更新屬性
MERGE (a:student{name:'張三'}) ON CREATE SET a.age='19' RETURN * //注意:已有節點時屬性不會建立和更新,未有節點會建立
MERGE (a:student{name:'張三'}) SET a.age='19' RETURN * //新增、更新
//合并
MERGE (n:student{name: '張三'})
ON CREATE SET n.age = 20
ON MATCH SET n.age = 20
- 建立多lable
- 在已有節點上添加新lable
MATCH (a{name:'張三'}) SET a:person RETURN a //添加一個标簽
MATCH (a{name:'張三'}) SET a:person:student RETURN a //添加一個标簽
建立關系語句
- 建立兩個節點同時建立一個關系,給兩個節點建立關系,指定關系類型、方向和屬性。
- 在已有兩個節點基礎上建立關系,指定關系類型、方向和屬性。
//注意:多次執行該語句使用 `CREATE` 會重複建立關系, 非重複建立使用 `MERGE` 即可
MATCH (a:student{name:"李四"}),(b:student{name:"張三"}) CREATE (a)-[r:test_graph]->(b) return *
- 在已有兩個節點基礎上建立關系,關系上附加屬性。
查詢庫資訊語句
- 幫助
:help
- 查詢所有關系類型、節點标簽
call db.propertyKeys
call db.labels
- 檢視資料庫結構
- 檢視連接配接資訊
- 檢視系統資訊
:play sysinfo
- 檢視所有lables
- 查詢所有的type
- 查詢庫内有多少個節點
- 查詢有多少關系,不帶方向的話結果為2倍
MATCH ()-->() RETURN count(*);
MATCH ()-[r]->() RETURN count(r);
查詢資料語句
- 查詢(
)所有節點及其關系
- 查詢(
)孤立節點,及無關系節點
- 查詢(
)比對結果集中如果有丢的部分,則會用null來補充
OPTIONAL MATCH (n)-[r]->(m) RETURN m
- 查詢(
)所有标簽為 student 的節點
- 查詢(
)多标簽節點
- 查詢(
)标簽為 student 并且屬性為 age=18 的所有節點
MATCH (a:student) WHERE a.age = 18 RETURN *
//或者
MATCH (a:student{age:18}) RETURN *
- 查詢(
)節點 Id
MATCH (a:student) WHERE id(a)=2 RETURN *
MATCH (a:student) RETURN ID(a)
- 查詢(
)比對屬性字元串的開頭關鍵詞 STARTS WITH
MATCH (a) WHERE a.name STARTS WITH '張' RETURN a
- 查詢(
)比對屬性字元串的結尾關鍵詞 ENDS WITH
MATCH (a) WHERE a.name ENDS WITH '三' RETURN a
- 查詢(
)比對屬性字元串的結尾關鍵詞 ENDS WITH
MATCH (a) WHERE a.name ENDS WITH '三' RETURN a
- 查詢(
)比對屬性字元串的不包含關鍵詞 CONTAINS
MATCH (a) WHERE NOT a.name CONTAINS '三' RETURN a
- 查詢(
)支援正規表達式
MATCH (a) WHERE a.name =~'.*三.*' RETURN a
- 查詢(
)屬性不為空
- 查詢(
)Coalesce
- 查詢(
)條件 IN、與、或、NOT、NULL
MATCH (a:student) WHERE a.age IN [18,17,20] AND a.name IS NOT NULL OR a.age IS NULL RETURN *
MATCH (a:student) WHERE NOT a.age IN [18,17,20] RETURN *
MATCH (a:student) WHERE NOT (a)-[]-() DELETE a
- 查詢(
)排序
- 查詢(
)分頁
- 查詢(
)計算 最大值、最小值、平均值、和、統計
//注意age為數值等可計算字段且不為空,如有為空請排除後計算
MATCH (a:student) RETURN max(a.age),min(a.age),avg(a.age),sum(a.age),count(a.age)
- 查詢(
分組、聚類數量、相異去重
MATCH (a:student) WITH COLLECT(distinct a.name) as c WHERE SIZE(c)<20 RETURN *
MATCH (a:student) WITH TYPE(a.age) AS t,COLLECT(distinct a.name) as c WHERE SIZE(c)<20 RETURN *
- 查詢(
)關系、過濾
//無指定方向和關系
MATCH (a:student)-[]-(b:student) RETURN *
//指定方向和關系
MATCH (a:student)-[:test_graph]->(b:student) RETURN *
//指定方向和關系,并且傳回指定屬性 name 和關系類型以 t 開頭的關系資料
MATCH (a:student)-[]->(b:student) WHERE a.name ='李四' and TYPE(r)=~ 't.*' RETURN *
MATCH (a{ name: '張三' }),(b) WHERE b.name IN ['李四','王五'] AND (a)<--(b) RETURN b
//傳回任意關系為 test_graph 和 belong 的所有節點關系
MATCH p=(a)-[:test_graph|:belong]->(b) RETURN p
//關系屬性範圍過濾
MATCH (a)-[r:test_graph]->(b) WHERE r.influence < 2000 RETURN *
- 查詢(
)節點之間最短路徑
MATCH n=allshortestPaths((a:student{name:"李四"})-[*]-(b:student{name:"張三"})) return n
- 查詢(
)深度關系比對
//可變長度的關系
START a=node(3), x=node(2, 4) MATCH p1=a-[r:test_graph*1..3]->x RETURN a,x,length(p1)
//比對從a到b,任意關系,深度1到5的節點
MATCH p=(a)-[*1..5]->(b) RETURN p
//比對從a到b,任意關系、任意深度的節點
MATCH p=(a)-[*]->(b) RETURN p
- 查詢(
)關鍵詞 All、Any、None、Single
//疊代測試集合中所有元素的判斷
MATCH p=(a:student) WHERE ALL(x IN nodes(p) WHERE x.name='李四') RETURN a
MATCH (a:student) WHERE ANY(x IN a.array WHERE x.name='李四') RETURN *
//在疊代器中沒有元素判斷将傳回true
MATCH p=(a:student)-[*1..3]-() WHERE NONE(x IN nodes(p) WHERE x.name= '李四') RETURN p
//如果疊代器中僅有一個元素則傳回true
MATCH p=(a:student)-[*1..3]-() WHERE SINGLE(x in nodes(p) WHERE x.name= '李四') RETURN p
- 查詢(
)Nodes、Relationships、Extract
//傳回一個路徑中的所有節點
MATCH p=(a:student)--(r:test_graph)--(b:student) RETURN nodes(p)
//傳回一條路徑中的所有關系
MATCH p=(a:student)--(r:test_graph)--(b:student) RETURN relationships(p)
//傳回一個路徑中的所有節點
MATCH p=(a:student)--(r:test_graph)--(b:student) RETURN extract(n in nodes(p):n.name)
- 查詢(
)UNION 語句
//使用UNION結果去重,求并集
MATCH (a)-[:test_graph]->(b) RETURN b.name UNION MATCH (a)-[:belong]->(b) RETURN b.name
//使用UNION ALL結果不去重, 求和集
MATCH (a)-[:test_graph]->(b) RETURN b.name UNION ALL MATCH (a)-[:belong]->(b) RETURN b.name
//執行過程
EXPLAIN MATCH (n:LabelsTree) return *
全文索引
請跳轉下期部落格: (二)neo4j 之 全文索引
配置檔案
請跳轉下期部落格: (三)neo4j 之 配置檔案參數
權限配置
- 建立新使用者及管理角色
功能 | 語句 |
---|---|
管理者賬戶建立一個使用者 | |
配置設定使用者一個角色 | |
改變使用者密碼 | |
删除使用者的讀寫權限 | |
給使用者配置設定讀資料權限 | |
- 禁用和重新激活使用者
功能 | 語句 |
---|---|
禁用 | |
重新激活 | |
-
通過控制台添加新使用者
a.控制台輸入欄輸入
b.設定username,setPassword,ConfirmPassword,點選AddUser:server user add
清空資料庫
删除資料 databases/graph.db