上一篇文章我们介绍的图数据库Neo4j,这篇文章我们来看一下它的查询语言——Cypher。Cypher是一种声明式图查询语言,表达高效查询和更新图数据库。关注专栏《知识图谱系列》了解更多相关知识~
目录
一、简介
1.1 常用的命令和函数
1.2 数据类型
二、常用的命令
2.1 CREATE命令
2.1.1 创建没有属性的节点
2.1.2 创建具有属性的节点
2.2 MATCH命令
2.3 RETURN命令
2.4 关系
2.4.1 创建没有属性的关系
2.4.2 创建有属性的关系
2.5 WHERe命令
2.5.1 布尔运算符
2.5.2 比较运算符
2.5.3 使用WHERe子句创建关系
2.6 DELETE命令
2.6.1 删除节点
2.6.2 删除节点和关系
2.7 REMOVE命令
2.8 SET命令
2.9 ORDER BY 命令
2.10 UNIOn命令
2.11 LIMIT和SKIP命令
2.12 MERGE命令
2.13 NULL值
2.14 IN命令
一、简介
1.1 常用的命令和函数
Cypher查询语言也叫做CQL,它常用的命令如下:
CQL常用的函数如下所示:
1.2 数据类型
CQL的数据类型跟Java语言类似,它们用于定义节点或关系的属性。
二、常用的命令
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查询的结果,语法如下:
1、简单语法:WHERe <condition>
2、复杂语法: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常用的函数命令。你们在此过程中遇到了什么问题,欢迎留言,让我看看你们都遇到了什么问题~