Neo4j - CQL语法介绍(3)

本文详细介绍了Neo4j Cypher Query Language (CQL) 的关键概念,包括ORDER BY子句用于排序查询结果,UNION和UNION ALL子句用于合并不同查询结果,LIMIT和SKIP子句用于限制和跳过返回的记录。通过示例,展示了如何使用这些操作符来高效地管理和查询图数据库中的数据。
摘要由CSDN通过智能技术生成

一、ORDER BY排序

Neo4j CQL ORDER BY子句
Neo4j CQL在MATCH命令中提供了“ORDER BY”子句,对MATCH查询返回的结果进行排序。

我们可以按升序或降序对行进行排序。

默认情况下,它按升序对行进行排序。 如果我们要按降序对它们进行排序,我们需要使用DESC子句。

ORDER BY子句语法

ORDER BY  <property-name-list>  [DESC]	 

在这里插入图片描述
property-name-list语法:

<node-label-name>.<property1-name>,
<node-label-name>.<property2-name>, 
.... 
<node-label-name>.<propertyn-name> 

语法说明:
在这里插入图片描述
注意 -

我们应该使用逗号(,)运算符来分隔属性名列表。

例如
此示例演示如何按照升序排序“员工名称”结果。

步骤1 -打开Neo4j数据浏览器
在这里插入图片描述
步骤2 -在数据浏览器上键入以下命令

MATCH (emp:Employee)
RETURN emp.empid,emp.name,emp.salary,emp.deptno

在这里插入图片描述
步骤3 -点击“执行”按钮并观察结果。
在这里插入图片描述
它返回数据库中可用的结果的总数:4条记录

步骤4 -输入在数据浏览器下面的命令

MATCH (emp:Employee)
RETURN emp.empid,emp.name,emp.salary,emp.deptno
ORDER BY emp.name

在这里插入图片描述
步骤5 -点击“执行”按钮并观察结果。
在这里插入图片描述
如果我们观察结果,现在按照Employee.name按升序排序记录。

例如
此示例演示如何按照员工名称按降序使用排序结果。

步骤1 -打开Neo4j数据浏览器

步骤2 -在数据浏览器上键入以下命令

MATCH (emp:Employee)
RETURN emp.empid,emp.name,emp.salary,emp.deptno

在这里插入图片描述
步骤3 -点击“执行”按钮并观察结果。
在这里插入图片描述
它返回数据库中可用的结果的总数:4条记录

步骤4 - 在数据浏览器上键入以下命令

MATCH (emp:Employee)
RETURN emp.empid,emp.name,emp.salary,emp.deptno
ORDER BY emp.name DESC

在这里插入图片描述
第5步-点击“执行”按钮并观察结果。
在这里插入图片描述
如果我们观察结果,现在记录按照Employee.name按降序排序。

二、UNION合并

与SQL一样,Neo4j CQL有两个子句,将两个不同的结果合并成一组结果

  • UNION
  • UNION ALL

UNION子句

它将两组结果中的公共行组合并返回到一组结果中。 它不从两个节点返回重复的行。

限制:
结果列类型和来自两组结果的名称必须匹配,这意味着列名称应该相同,列的数据类型应该相同。

UNION子句语法

<MATCH Command1>
   UNION
<MATCH Command2>

语法说明:
在这里插入图片描述
注意 -

如果这两个查询不返回相同的列名和数据类型,那么它抛出一个错误。

在本章中,我们将采取一个银行应用程序的节点:信用卡式和借记卡解释UNION子句

信用卡式节点数据

第1步 -打开Neo4j的数据浏览器
在这里插入图片描述
第2步 -在数据浏览器的美元提示符处键入以下命令。

MATCH (cc:CreditCard) RETURN cc

借记卡数据的节点

第1步 -打开Neo4j的数据浏览器

第2步 -在数据浏览器的美元提示符处键入以下命令。

MATCH (dc:DebitCard) RETURN dc

本例说明:如果UNION子句的这两个查询确实有相同的名称或相同的数据类型及其列会发生什么。

第1步 -打开Neo4j的数据浏览器

第2步 -在数据浏览器的美元提示符处键入以下命令。

MATCH (cc:CreditCard) RETURN cc.id,cc.number
UNION
MATCH (dc:DebitCard) RETURN dc.id,dc.number

在这里插入图片描述
第3步 -点击执行按钮,看到成功消息数据浏览器。
在这里插入图片描述
这表明,这两个查询应具有相同的列名。

首先查询有:cc.id,cc.number。

第二个查询有:dc.id,dc.number。

这里既有信用卡式和借记卡具有相同的属性名:身份证和号码,但他们有不同的节点名称前缀。这就是为什么UNION命令显示此错误消息。为了避免这种错误,Neo4j的CQL提供“AS”子句。

像CQL,CQL Neo4j的“AS”子句用于给一些别名。

此示例演示如何使用UNION子句从两个节点检索数据。

第1步 -打开Neo4j的数据浏览器

第2步 -在数据浏览器的美元提示符处键入以下命令,然后单击执行按钮。

MATCH (cc:CreditCard)
RETURN cc.id as id,cc.number as number,cc.name as name,
   cc.valid_from as valid_from,cc.valid_to as valid_to
UNION
MATCH (dc:DebitCard)
RETURN dc.id as id,dc.number as number,dc.name as name,
   dc.valid_from as valid_from,dc.valid_to as valid_to

在这里插入图片描述
在这里,因为UNION子句过滤它们,我们可以看到该命令返回9行没有重复的行。

UNION ALL子句

它结合并返回两个结果集的所有行成一个单一的结果集。它还返回由两个节点重复行。

限制
结果列类型,并从两个结果集的名字必须匹配,这意味着列名称应该是相同的,列的数据类型应该是相同的。

UNION ALL子句语法

<MATCH Command1>
UNION ALL
<MATCH Command2>

语法说明
在这里插入图片描述
注意 -

如果这两个查询不返回相同的列名和数据类型,那么它抛出一个错误。

在本章中,我们将采取一个银行应用程序的节点:信用卡式和借记卡解释UNION子句

信用卡式节点数据

第1步 -打开Neo4j的数据浏览器

第2步 -在数据浏览器的美元提示符处键入以下命令。

MATCH (cc:CreditCard) RETURN cc

借记卡数据的节点

第1步 -打开Neo4j的数据浏览器

第2步 -在数据浏览器的美元提示符处键入以下命令。

MATCH (dc:DebitCard) RETURN dc

本例说明:如果UNION子句的这两个查询确实有相同的名称或相同的数据类型及其列会发生什么。

第1步 -打开Neo4j的数据浏览器
在这里插入图片描述
这是Neo4j的数据浏览器首页

第2步 -在数据浏览器的美元提示符处键入以下命令。

MATCH (cc:CreditCard)
RETURN cc.id as id,cc.number as number,cc.name as name,
   cc.valid_from as valid_from,cc.valid_to as valid_to
UNION ALL
MATCH (dc:DebitCard)
RETURN dc.id as id,dc.number as number,dc.name as name,
   dc.valid_from as valid_from,dc.valid_to as valid_to

第3步 -点击执行按钮,看到成功消息数据浏览器。
在这里插入图片描述
在这里,我们可以观察到这个命令返回10行,因为与UNION ALL子句不过滤它们重复行。如果我们使用UNION子句,它将返回只有9行。详情请参阅UNION子句章节进行检查。

三、LIMIT和SKIP子句

Neo4j CQL LIMIT子句

Neo4j CQL已提供“LIMIT”子句来过滤或限制查询返回的行数。 它修剪CQL查询结果集底部的结果。

如果我们要修整CQL查询结果集顶部的结果,那么我们应该使用CQL SKIP子句。 请参考本章的下一节CQL SKIP子句。

LIMIT子句语法

LIMIT <number>

语法说明:
在这里插入图片描述
例如:
本示例演示如何使用CQL LIMIT子句减少MATCH + RETURN查询返回的记录数。

步骤1 -打开Neo4j数据浏览器
在这里插入图片描述
它是Neo4j数据浏览器主页

步骤2 -在没有LIMIT子句的数据浏览器上键入以下命令

MATCH (emp:Employee) 
RETURN emp

步骤3 -点击“执行”按钮并观察结果。
在这里插入图片描述
它返回数据库中可用的结果的总数:4条记录

步骤4 -使用LIMIT子句在数据浏览器上键入以下命令

MATCH (emp:Employee) 
RETURN emp
LIMIT 2

在这里插入图片描述
步骤5 -点击“执行”按钮并观察结果。
在这里插入图片描述
它只返回Top的两个结果,因为我们定义了limit = 2。这意味着前两行。

Neo4j CQL SKIP子句

Neo4j CQL已提供“SKIP”子句来过滤或限制查询返回的行数。 它修整了CQL查询结果集顶部的结果。

如果我们要从CQL查询结果集底部修整结果,那么我们应该使用CQL LIMIT子句。 请参阅本章的上一节CQL LIMIT子句。

SKIP子句语法:

SKIP <number>

语法说明:
在这里插入图片描述

例如
此示例演示如何使用CQL SKIP子句减少MATCH + RETURN查询返回的记录数。

步骤1 -打开Neo4j数据浏览器

步骤2 -在没有SKIP子句的数据浏览器上键入以下命令

MATCH (emp:Employee) 
RETURN emp

在这里插入图片描述
步骤3 -点击“执行”按钮并观察结果。
在这里插入图片描述
它返回数据库中可用的结果的总数:4条记录

步骤4 -在带有SKIP子句的数据浏览器上键入以下命令

MATCH (emp:Employee) 
RETURN emp
SKIP 2

在这里插入图片描述
步骤5 -点击“执行”按钮并观察结果。
在这里插入图片描述
skip跳过两个节点,因此我们定义了skip = 2。这意味着最后两行。

四、合并

Neo4j使用CQL MERGE命令 -

创建节点,关系和属性

为从数据库检索数据

MERGE命令是CREATE命令和MATCH命令的组合。

MERGE = CREATE + MATCH

Neo4j CQL MERGE命令在图中搜索给定模式,如果存在,则返回结果

如果它不存在于图中,则它创建新的节点/关系并返回结果。

Neo4j CQL MERGE语法

MERGE (<node-name>:<label-name>
{
   <Property1-name>:<Pro<rty1-Value>
   .....
   <Propertyn-name>:<Propertyn-Value>
})

语法说明:
在这里插入图片描述
注意 -

Neo4j CQL MERGE命令语法与CQL CREATE命令类似。

我们将使用这两个命令执行以下操作 -

  • 创建具有一个属性的配置文件节点:Id,名称

  • 创建具有相同属性的同一个Profile节点:Id,Name

  • 检索所有Profile节点详细信息并观察结果

我们将使用CREATE命令执行这些操作

Neo4j CQL CREATE示例
此示例通过使用CREATE,MATCH和RETURN命令创建Google+个人资料,执行上述所有操作。

操作(1):创建具有属性:Id,Name的Profile节点

步骤1 -打开Neo4j数据浏览器
在这里插入图片描述
步骤2 -在数据浏览器上键入以下命令

CREATE (gp1:GoogleProfile1 {Id: 201401, Name:"Apple"})

在这里插入图片描述
步骤3 -点击“执行”按钮并观察结果。
在这里插入图片描述
如果我们观察到成功消息,它已经向GoogleProfile1节点添加了两个属性。

操作(2):创建具有相同属性的同一个Profile节点:Id,Name。

步骤1 -打开Neo4j的数据浏览器

步骤2 -输入在数据浏览器下面的命令

CREATE (gp1:GoogleProfile1 {Id: 201401, Name:"Apple"})

在这里插入图片描述
步骤3 -点击“执行”按钮并观察结果。
在这里插入图片描述
如果我们观察到成功消息,它已经向GoogleProfile1节点添加了两个属性。

操作(3):检索所有Profile节点详细信息并观察结果。

步骤1 -打开Neo4j数据浏览器

步骤2 -在数据浏览器上键入以下命令

MATCH  (gp1:GoogleProfile1) 
RETURN gp1.Id,gp1.Name

在这里插入图片描述
步骤3 -点击“执行”按钮并观察结果。

在这里插入图片描述
如果我们观察到上面的查询结果,它显示2行重复的值。

CQL CREATE命令检查此节点是否可用,它只是在数据库中创建新节点。
通过观察这些结果,我们可以说CREATE命令总是向数据库添加新的节点。

Neo4j CQL MERGE示例
此示例通过使用MERGE和RETURN命令创建Google+个人资料,执行相同的上述操作。

操作(1):创建具有属性:Id,Name的Profile节点

步骤1 -打开Neo4j数据浏览器

步骤2 -在数据浏览器上键入以下命令

MERGE (gp2:GoogleProfile2{ Id: 201402,Name:"Nokia"})

在这里插入图片描述
步骤3 -点击“执行”按钮并观察结果
在这里插入图片描述
如果我们观察到成功消息,它已经向GoogleProfile1节点添加了两个属性。

操作(2):创建具有相同属性的同一个Profile节点:Id,Name。

步骤1 -打开Neo4j数据浏览器

步骤2 -在数据浏览器上键入以下命令

MERGE (gp2:GoogleProfile2{ Id: 201402,Name:"Nokia"})

在这里插入图片描述
步骤3 -点击“执行”按钮并观察结果。
在这里插入图片描述
如果我们观察到成功消息,它已经向GoogleProfile1节点添加了两个属性。

操作(3):检索所有Profile节点详细信息并观察结果

步骤1 -打开Neo4j数据浏览器

步骤2 -在数据浏览器上键入以下命令

MATCH  (gp2:GoogleProfile2) 
RETURN gp2.Id,gp2.Name

在这里插入图片描述
步骤3 -点击“执行”按钮并观察结果。

在这里插入图片描述
如果我们观察上面的查询结果,它只显示一行,因为CQL MERGE命令检查该节点在数据库中是否可用。 如果它不存在,它创建新节点。 否则,它不创建新的。

通过观察这些结果,我们可以说,CQL MERGE命令将新的节点添加到数据库,只有当它不存在。

五、IN操作符

与SQL一样,Neo4j CQL提供了一个IN运算符,以便为CQL命令提供值的集合。

IN操作符语法

IN[<Collection-of-values>]

语法说明:
在这里插入图片描述
让我们用一个例子来研究一下。

例如
此示例演示如何使用IN运算符检索Employee节点详细信息。

步骤1 -打开Neo4j数据浏览器
在这里插入图片描述
步骤2 -在数据浏览器中的dollar提示符下键入以下命令。

MATCH (e:Employee) 
RETURN e.id,e.name,e.sal,e.deptno

在这里插入图片描述
步骤3 -点击执行按钮,观察结果。
在这里插入图片描述
我们可以观察到这个查询返回4行。

步骤4 -键入以下命令,然后单击执行按钮。

MATCH (e:Employee) 
WHERE e.id IN [123,124]
RETURN e.id,e.name,e.sal,e.deptno

在这里插入图片描述
此查询仅返回在IN运算符中指定的id匹配的两行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yitahutu79

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值