上一篇文章咱们介绍的图数据库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经常使用的函数命令。大家在此过程当中遇到了什么问题,欢迎留言,让我看看大家都遇到了什么问题~