上一篇文章咱們介紹的圖數據庫Neo4j,這篇文章咱們來看一下它的查詢語言——Cypher。Cypher是一種聲明式圖查詢語言,表達高效查詢和更新圖數據庫。關注專欄《知識圖譜系列》瞭解更多相關知識~html
目錄node
1、簡介sql
1.2 數據類型ide
2.1.2 建立具備屬性的節點.net
1、簡介
1.1 經常使用的命令和函數
Cypher查詢語言也叫作CQL,它經常使用的命令以下:
CQL經常使用的函數以下所示:
1.2 數據類型
CQL的數據類型跟Java語言相似,它們用於定義節點或關係的屬性。
2、經常使用的命令
2.1 CREATE命令
2.1.1 建立沒有屬性的節點
語法以下:
CREATE (<node-name>:<label-name>)
其中,node-name是節點的名稱,label-name是節點標籤名稱。
例如:
CREATE(person:Person)
2.1.2 建立具備屬性的節點
語法以下:
CREATE ( <node-name>:<label-name> { <Property1-name>:<Property1-Value> ........ <Propertyn-name>:<Propertyn-Value> } )
其中,Propertyn-name是建立節點屬性的名稱,Propertyn-Value是建立節點屬性的值。
例如:
CREATE (person:Person { name:"xzw",sex:"m",location:"QD" })
2.2 MATCH命令
MATCH命令用於從數據庫獲取有關節點、關係和屬性的數據。語法以下:
MATCH ( <node-name>:<label-name> )
MATCH命令一般與RETURN命令一塊兒使用。
2.3 RETURN命令
RETURN命令用於檢索節點和關聯關係的屬性。語法以下:
RETURN <node-name>.<property1-name>, ........ <node-name>.<propertyn-name>
例如:
CREATE (t: test {name:"xzw", sex:"m", loc: "QD"}) MATCH (t: test) RETURN t.name,t.sex
2.4 關係
基於方向性,Neo4j關係被分爲兩種主要類型:單向關係和雙向關係。
2.4.1 建立沒有屬性的關係
語法以下:
CREATE (<node1-label-name>:<node1-name>)- [<relationship-label-name>:<relationship-name>]-> (<node1-label-name>:<node1-name>) RETURN <relationship-label-name>
其中,relationship-name是關係的名稱,relationship-label-name是關係的標籤名稱。上述語法中的return子句不是必須的。
例如:
CREATE (f1:Favorite1)-[like:LIKES]->(f2:Favorite2) RETURN like
2.4.2 建立有屬性的關係
語法以下:
CREATE (<node1-label-name>:<node1-name>{<define-properties-list>})- [<relationship-label-name>:<relationship-name>{<define-properties-list>}] ->(<node1-label-name>:<node1-name>{<define-properties-list>}) RETURN <relationship-label-name>
例如:
CREATE (v1:Video1{title:"Action1",updated_by:"A",uploaded_date:"10/10/2020"}) -[movie:ACTION_MOVIES{rating:1}]-> (v2:Video2{title:"Action2",updated_by:"X",uploaded_date:"12/12/2020"})
MATCH (v1:Video1)-[movie:ACTION_MOVIES]->(v2:Video2) RETURN movie
2.5 WHERE命令
像SQL同樣,Neo4j CQL在CQL MATCH命令中提供了WHERE子句來過濾MATCH查詢的結果,語法以下:
一、簡單語法:WHERE <condition> 二、複雜語法:WHERE <condition> <boolean-operator> <condition> 其中,condition的語法爲:<property-name> <comparison-operator> <value>
其中,<comparison-operator>爲CQL的比較運算符。
例如:
MATCH (p:People) RETURN p.name,p.sex,p.location
MATCH (p:People) WHERE p.name = 'xzw' RETURN p
2.5.1 布爾運算符
2.5.2 比較運算符
2.5.3 使用WHERE子句建立關係
語法以下:
MATCH (<node1-label-name>:<node1-name>),(<node2-label-name>:<node2-name>) WHERE <condition> CREATE (<node1-label-name>)-[<relationship-label-name>:<relationship-name> {<relationship-properties>}]->(<node2-label-name>)
例如:
CREATE (c:Customer {id:"1", name: "xzw", sex:"m"}) CREATE (f:Fav {id:"1", favor: "sleep"}) MATCH (c:Customer) RETURN c.id,c.name,c.sex MATCH (f:Fav) RETURN f.id, f.favor
MATCH (c:Customer),(f:Fav) WHERE c.id = "1" AND f.id= "1" CREATE (c)-[r:Relat{location:"QD"}]->(f) RETURN r
2.6 DELETE命令
刪除節點及相關節點和關係。
2.6.1 刪除節點
語法以下:
DELETE <node-name-list>
例如:
MATCH (p:People) RETURN p.name
MATCH (p:People) DELETE p
MATCH (p:People) RETURN p.name
2.6.2 刪除節點和關係
語法以下:
DELETE <node1-name>,<node2-name>,<relationship-name>
爲了節省篇幅,如下無特殊說明,再也不給出示例,由於這些語法都比較簡單,感興趣的朋友能夠本身測試一下。
2.7 REMOVE命令
刪除現有節點或關係的屬性或標籤。值得注意的是DELETE和REMOVE兩個命令都應該與MATCH命令一塊兒使用。REMOVE命令語法以下:
REMOVE <property-name-list>/<label-name-list> 其中,<property-name-list>是一個屬性列表,其用法以下: <node-name>.<property1-name>, <node-name>.<property2-name>, .... <node-name>.<propertyn-name> <label-name-list>它是一個標籤列表,其用法以下: <node-name>:<label2-name>, .... <node-name>:<labeln-name>
2.8 SET命令
SET命令用來向現有節點或者關係添加或更新屬性值,其語法以下:
SET <property-name-list> 其中,<property-name-list>是一個屬性列表,其語法以下: <node-label-name>.<property1-name>, <node-label-name>.<property2-name>, .... <node-label-name>.<propertyn-name>
2.9 ORDER BY 命令
Neo4j CQL在MATCH命令中提供了「ORDER BY」子句,對MATCH查詢返回的結果進行排序。默認狀況下,它按升序對行進行排序。 若是咱們要按降序對它們進行排序,咱們須要使用DESC子句。其語法以下:
ORDER BY <property-name-list> [DESC] 其中,<property-name-list>是屬性列表,其語法以下: <node-label-name>.<property1-name>, <node-label-name>.<property2-name>, .... <node-label-name>.<propertyn-name>
2.10 UNION命令
它將兩組結果中的公共行組合並返回到一組結果中, 它不從兩個節點返回重複的行。跟SQL相似,UNION ALL是返回全部的數據。語法以下:
<MATCH Command1> UNION <MATCH Command2>
2.11 LIMIT和SKIP命令
LIMIT命令來過濾或限制查詢返回的行數,它修剪CQL查詢結果集底部的結果。若是咱們要修整CQL查詢結果集頂部的結果,那麼咱們應該使用SKIP命令。他們的語法以下:
LIMIT <number> SKIP <number>
2.12 MERGE命令
MERGE命令是CREATE命令和MATCH命令的組合。它在圖中搜索給定模式,若是存在,則返回結果,若是它不存在於圖中,則它建立新的節點/關係並返回結果。其語法以下:
MERGE (<node-name>:<label-name> { <Property1-name>:<Pro<rty1-Value> ..... <Propertyn-name>:<Propertyn-Value> })
2.13 NULL值
Neo4j CQL將空值視爲對節點或關係的屬性的缺失值或未定義值。當咱們建立一個具備現有節點標籤名稱但未指定其屬性值的節點時,它將建立一個具備NULL屬性值的新節點。
2.14 IN命令
與SQL同樣,Neo4j CQL提供了一個IN運算符,以便爲CQL命令提供值的集合。其語法以下:
IN[<Collection-of-values>]
本文到此已經接近尾聲了,本文主要講述了一些Neo4j CQL經常使用命令,下一篇會講一下CQL經常使用的函數命令。大家在此過程當中遇到了什麼問題,歡迎留言,讓我看看大家都遇到了什麼問題~