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>
})
语法说明:
S.No. | 语法元素 | 描述 |
---|---|---|
1 | MERGE | 它是一个 Neo4j CQL 关键字。 |
2 | 它是节点或关系的名称。 | |
3 | 它是节点或关系的标签名称。 | |
4 | 它是节点或关系的属性名称。 | |
5 | 它是节点或关系的属性值。 | |
6 | : | 使用 colon(:) 运算符来分隔节点或关系的属性名称和值。 |
注意 -
Neo4j CQL MERGE 命令语法与 CQL CREATE 命令类似。
我们将使用这两个命令执行以下操作 -
创建具有一个属性的配置文件节点:Id,名称
创建具有相同属性的同一个 Profile 节点:Id,Name
检索所有 Profile 节点详细信息并观察结果
我们将使用 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 命令总是向数据库添加新的节点。
示例
此示例通过使用 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 命令将新的节点添加到数据库,只有当它不存在。
NULL值
Neo4j CQL 将空值视为对节点或关系的属性的缺失值或未定义值。
当我们创建一个具有现有节点标签名称但未指定其属性值的节点时,它将创建一个具有 NULL 属性值的新节点。
让我们用一个例子来看这个。
例如:
此示例演示 CREATE 命令如何将 NULL 值设置为未定义属性。 如何检索没有 NULL 行的节点的所有行。
步骤 1 - 打开 Neo4j 数据浏览器
步骤 2 - 在数据浏览器中的美元提示符下键入以下命令。
MATCH (e:Employee)
RETURN e.id,e.name,e.sal,e.deptno
步骤 3 - 点击执行按钮,观察结果。
这里观察所有 Employee 节点不包含 NULL 属性值。
步骤 4 - 键入以下命令,然后单击执行按钮
CREATE (e:Employee)
如果我们观察到上面的成功消息,它没有创建任何属性到 Employee 节点。
步骤 5 - 键入以下命令,然后单击执行按钮
MATCH (e:Employee)
RETURN e.id,e.name,e.sal,e.deptno
如果我们观察这些结果,则以前的 CREATE 命令通过将其所有属性值设置为 NULL 来插入 Employee 节点。
步骤 6 - 键入以下命令并单击执行按钮
MATCH (e:Employee)
WHERE e.id IS NOT NULL
RETURN e.id,e.name,e.sal,e.deptno
如果我们观察这些结果,它不返回 NULL 值行,因为我们提供了一个 WHERE 子句来过滤该行,即 Id 属性不应该包含 NULL 值。
WHERE IS NOT NULL
这里我们使用 IS NOT 运算符来过滤 NULL 行。
步骤 7 - 键入以下命令,然后单击执行按钮
MATCH (e:Employee)
WHERE e.id IS NULL
RETURN e.id,e.name,e.sal,e.deptno
如果我们观察这些结果,它只返回 NULL 值行,因为我们提供了一个 WHERE 子句来检查 ID 值为 NULL。
WHERE IS NULL
这里我们使用 IS 操作符来仅返回 NULL 行。
IN语法
与 SQL 一样,Neo4j CQL 提供了一个 IN 运算符,以便为 CQL 命令提供值的集合。
IN[<Collection-of-values>]
语法说明:
S.No. | 语法元素 | 描述 |
---|---|---|
1。 | IN | 它是一个 Neo4j CQL 关键字。 |
2。 | [ | 它告诉 Neo4j CQL,一个值的集合的开始。 |
3。 | ] | 它告诉 Neo4j CQL,值集合的结束。 |
4。 | 它是由逗号运算符分隔的值的集合。 |
让我们用一个例子来研究一下。
例如:
此示例演示如何使用 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 匹配的两行。