網(wǎng)站怎么做排名長沙網(wǎng)絡(luò)營銷推廣公司
Cypher基礎(chǔ)操作
Cypher是圖形存儲(chǔ)數(shù)據(jù)庫Neo4j的查詢語言,Cypher是通過模式匹配Neo4j數(shù)據(jù)庫中的節(jié)點(diǎn)和關(guān)系,從而對(duì)數(shù)據(jù)庫Neo4j中的節(jié)點(diǎn)和關(guān)系進(jìn)行一系列的相關(guān)操作。
下面,通過一張表來介紹一下常用的Neo4j操作命令及相關(guān)說明,具體如表所示。
操作命令 | 相關(guān)說明 |
---|---|
CREATE | 創(chuàng)建節(jié)點(diǎn)、關(guān)系 |
MATCH | 查找所有符合給定模式的節(jié)點(diǎn)、關(guān)系以及屬性數(shù)據(jù) |
RETURN | 返回查詢結(jié)果 |
WHERE | 過濾條件,篩選出符合條件的數(shù)據(jù) |
DELETE | 永久刪除節(jié)點(diǎn)和關(guān)系 |
REMOVE | 刪除節(jié)點(diǎn)的屬性 |
增-CREATE命令
語法
使用CREATE命令創(chuàng)建節(jié)點(diǎn)、關(guān)系,具體語法如下:
# 創(chuàng)建帶有標(biāo)簽的節(jié)點(diǎn)
CREATE (<node-name>:<label-name>)
# 創(chuàng)建帶有標(biāo)簽、屬性的節(jié)點(diǎn)
CREATE (<node-name>:<label-name>{<property-name>:<property-value>})
# 創(chuàng)建帶有標(biāo)簽的關(guān)系
CREATE (<node1-name>:<label1-name>)-[(<relationship-name>:<relationship-label-name>)] ->(<node2-name>:<label2-name>)
上述語法中,CREATE是創(chuàng)建節(jié)點(diǎn)、關(guān)系的命令;
- <node-name>表示節(jié)點(diǎn)名稱,Neo4j使用此名稱將該節(jié)點(diǎn)的詳細(xì)信息存儲(chǔ)在Database.As中,用作Neo4j數(shù)據(jù)庫管理(注:不能使用節(jié)點(diǎn)名稱來訪問節(jié)點(diǎn)的詳細(xì)信息);
- <label-name>表示標(biāo)簽名稱,是內(nèi)部節(jié)點(diǎn)名稱的別名(注:可使用標(biāo)簽名稱訪問節(jié)點(diǎn)的詳細(xì)信息);
- <property-name>表示屬性名;
- < property-value >表示屬性值;
- <relationship-name>表示關(guān)系;
- <relationship-label-name>表示關(guān)系的標(biāo)簽。
案例練習(xí)
我們演示創(chuàng)建一個(gè)節(jié)點(diǎn)p,其中標(biāo)簽為Person、屬性分別為“name、age、hobby”、屬性值分別為“張三、18、swimming”,具體如下:
$ create (p:Person{name:'張三',age:18,hobby:'swimming'})
執(zhí)行上述命令后,Web UI界面的控制臺(tái)返回“Added 1 label, created 1 node, set 3 properties, completed after 15 ms.”信息,說明我們新增一個(gè)標(biāo)簽、創(chuàng)建一個(gè)節(jié)點(diǎn),并設(shè)置了三個(gè)屬性。
下面,我們演示創(chuàng)建標(biāo)簽為Likes的關(guān)系friend,其中起始節(jié)點(diǎn)為Jac、屬性name為Jack,結(jié)束節(jié)點(diǎn)為Emm、屬性name為Emma,具體如下:
$ create (Jac:Person{name:'Jack'})-[friend:Likes]->(Emma:Person{name:'Emma'})
執(zhí)行上述命令后,Web UI界面的控制臺(tái)返回“Added 2 labels, created 2 nodes, set 2 properties, created 1 relationship, completed after 3 ms.”信息,說明我們新增兩個(gè)標(biāo)簽、創(chuàng)建兩個(gè)節(jié)點(diǎn)、設(shè)置兩個(gè)屬性、創(chuàng)建一個(gè)關(guān)系(注意:標(biāo)簽Person是節(jié)點(diǎn)的標(biāo)簽;標(biāo)簽Likes是關(guān)系的標(biāo)簽)。
查看圖示數(shù)據(jù)
查
1.match命令
語法
使用MATCH命令查找所有符合給定模式的節(jié)點(diǎn)、關(guān)系以及屬性數(shù)據(jù),具體語法如下:
MATCH (<node-name>:<label-name>)
上述語法中,MATCH用于查找所有符合給定模式的節(jié)點(diǎn)、關(guān)系以及屬性數(shù)據(jù)的命令;<node-name>表示節(jié)點(diǎn)名稱;<label-name>表示標(biāo)簽名稱。
案例練習(xí)
演示查找數(shù)據(jù)庫中標(biāo)簽為Person節(jié)點(diǎn)p的詳細(xì)信息,具體如下:
$ match (p:Person)
從圖中可看出是語法錯(cuò)誤,若想要使用MATCH命令,則需要與RETURN命令或更新命令結(jié)合使用。
2.RETURN命令
語法
使用RETURN命令返回查詢結(jié)果,具體語法如下:
RETURN (<node-name>:<property-name>)
上述語法中,RETURN是用于返回查詢結(jié)果的命令;<node-name>表示節(jié)點(diǎn)名稱;< property -name>表示屬性名。
案例練習(xí)
下面,我們演示返回屬性為age的節(jié)點(diǎn)p的所有信息,具體如下:
$ return p.age
執(zhí)行上述命令后,查看Web UI界面控制臺(tái)的返回結(jié)果,具體如圖所示。
從圖中可看出是語法錯(cuò)誤,若想要使用RETURN命令,則需要與METCH命令或CREATE命令結(jié)合使用。
查詢案例練習(xí)(正確版)
題目1:我們演示查詢數(shù)據(jù)庫中節(jié)點(diǎn)p的詳細(xì)信息,具體如下:
$ match (p:Person) return p.name,p.age,p.hobby
若想要使用RETURN命令,則需要與METCH命令或CREATE命令結(jié)合使用。
題目2:我們演示查詢數(shù)據(jù)庫中所有節(jié)點(diǎn)的詳細(xì)信息,具體如下:
$ match (n) return n
如果我們要按照某種條件查詢呢?–WHERE命令
3.WHERE命令
語法
使用WHERE命令查詢符合條件的數(shù)據(jù),具體語法如下:
WHERE <condition>
上述語法中,WHERE是用于查詢符合條件的數(shù)據(jù)命令,該命令需要與MATCH命令和RETURN命令結(jié)合使用;<condition>表示查詢的條件。
案例練習(xí)
演示查詢符合條件“p.name=‘張三’”的節(jié)點(diǎn)詳細(xì)信息,具體如下:
$ match (p:Person) where p.name='張三' return p
和sql很像!
刪
1.-DELETE命令
語法
使用DELETE命令永久的刪除節(jié)點(diǎn)或關(guān)系,具體語法如下:
# 刪除節(jié)點(diǎn)
DELETE <node-name-list>
# 刪除節(jié)點(diǎn)及關(guān)聯(lián)的關(guān)系
DELETE <node1-name>,<node2-name>,<relationship-name>
上述語法中,DELETE是用于永久刪除節(jié)點(diǎn)或關(guān)系的命令,該命令需要與MATCH命令結(jié)合使用,刪除滿足某個(gè)條件的節(jié)點(diǎn);<node-name-list>表示節(jié)點(diǎn)名稱列表;<relationship-name>表示關(guān)系名稱。
案例練習(xí)
題目1:我們演示刪除屬性name為張三的節(jié)點(diǎn),具體如下:
$ match (p{name:'Bob'}) delete p
執(zhí)行“match (p:Person) return p”命令,然后查看Web UI界面控制臺(tái)的返回結(jié)果,如圖所示。
若是想要清空數(shù)據(jù)庫中的節(jié)點(diǎn)或者關(guān)系,則可以執(zhí)行“match (n) detach delete n”命令,但是該命令要慎用。
題目2:我們演示刪除屬性name分別為Jack和Emma的節(jié)點(diǎn)以及相關(guān)聯(lián)的關(guān)系,具體如下:
$ match (Jac{name:'Jack'})-[friend]->(Emm{name:'Emma'}) delete Jac,Emm,friend
2.REMOVE命令
語法
使用REMOVE命令刪除節(jié)點(diǎn)的屬性,具體語法如下:
# 刪除節(jié)點(diǎn)的屬性
REMOVE <property-name-list>
上述語法中,REMOVE是用于刪除節(jié)點(diǎn)的屬性的命令,該命令需要與MATCH命令結(jié)合使用;<property-name-list>表示節(jié)點(diǎn)的屬性名稱列表。
案例練習(xí)
我們演示刪除節(jié)點(diǎn)的屬性hobby,由于上述小節(jié)中演示刪除了數(shù)據(jù)庫中的所有節(jié)點(diǎn),導(dǎo)致數(shù)據(jù)庫中無任何節(jié)點(diǎn),因此,需要先執(zhí)行創(chuàng)建節(jié)點(diǎn)的命令,然后再執(zhí)行刪除屬性hobby的命令,具體如下:
$ create (p:Person{name:'Bob',age:22,hobby:'go dancing'})
$ match (p:Person) remove p.hobby
創(chuàng)建節(jié)點(diǎn)
刪除屬性
$match (n) detach delete n
#清空Neo4j數(shù)據(jù)庫中的節(jié)點(diǎn)和關(guān)系數(shù)據(jù)
其他
先行工作
插入節(jié)點(diǎn)、關(guān)系
create (Jac:Person{name:'Jack',age:19})-[friend:Likes]->(Emma:Person{name:'Emma',age:17})-[girlfriend:Likes]->(Rose:Person{name:'Rose',age:17})
列訪問、排序和分頁
查詢節(jié)點(diǎn)姓名、年齡并按照年齡排序返回前十個(gè)
SQL語句
SELECT p.name, p.age
FROM Person as p
ORDER BY p.age DESC
LIMIT 10;
Neo4j語句
MATCH (p:Person)
RETURN p.name, p.age
ORDER BY p.age DESC
LIMIT 10;
索引(Indexing)
如果要通過此節(jié)點(diǎn)標(biāo)簽和屬性組合快速匹配,則可以在導(dǎo)入期間創(chuàng)建索引,這很有意義。
CREATE INDEX ON :Person(name);
過濾
Cypher中具有完整的集合支持,不僅包括IN
運(yùn)算符,還包括集合函數(shù)、謂詞和轉(zhuǎn)換。
查找名字在’Bob’,'Emma’中的節(jié)點(diǎn)
MATCH (p:Person)
WHERE p.name IN ['Bob','Emma']
RETURN p.name, p.age;
按多個(gè)數(shù)字和文本謂詞過濾
現(xiàn)在,讓我們嘗試找到一些名字以“ B”開頭的大于17歲的節(jié)點(diǎn)。
sql語句
SELECT p.name, p.age
FROM Person AS p
WHERE p.name LIKE 'B%' AND p.age > 17;
在LIKE
操作者通過所取代STARTS WITH
(也有CONTAINS
和ENDS WITH
)所有其中的三個(gè)索引支持。
MATCH (p:Person)
WHERE p.name STARTS WITH "B" AND p.age > 17
RETURN p.name, p.age;
還可以使用正則表達(dá)式,例如p.name =~ "B."
。
想學(xué)習(xí)更多請(qǐng)參考:史上最全-Neo4j相關(guān)資源傳送門 - 知乎 (zhihu.com)