Neo4j - CQL语法介绍(2)

Neo4j - CQL语法介绍(2)

  • 一、关系基础
  • 二、CREATE创建标签
      • 单个标签到节点
      • 多个标签到节点
      • 单个标签到关系
  • 三、WHERE子句
    • 使用WHERE子句创建关系
  • 四、DELETE删除
    • DELETE节点和关系子句语法
  • 五、REMOVE删除
    • 删除节点/关系的属性
    • 删除节点/关系的标签
  • 六、SET子句

一、关系基础

Neo4j图数据库遵循属性图模型来存储和管理其数据。

根据属性图模型,关系应该是定向的。 否则,Neo4j将抛出一个错误消息。

基于方向性,Neo4j关系被分为两种主要类型。

  • 单向关系
  • 双向关系

在以下场景中,我们可以使用Neo4j CQL CREATE命令来创建两个节点之间的关系。 这些情况适用于Uni和双向关系。

  • 在两个现有节点之间创建无属性的关系

  • 在两个现有节点之间创建有属性的关系

  • 在两个新节点之间创建无属性的关系

  • 在两个新节点之间创建有属性的关系

  • 在具有WHERE子句的两个退出节点之间创建/不使用属性的关系

注意 -

我们将创建客户和CreditCard之间的关系,如下所示:
Neo4j - CQL语法介绍(2)_第1张图片
在上一章中,我们已经创建了Customer和CreditCard节点。 现在我们将看到如何创建它们之间的关系

此图描述了客户与CreditCard之间的关系

客户→信用卡
这里的关系是箭头标记(→)

由于Neo4j CQL语法是以人类可读的格式。 Neo4j CQL也使用类似的箭头标记来创建两个节点之间的关系。

每个关系(→)包含两个节点

  • 从节点
  • 到节点

从上图中,Customer节点是“From Node”,CreditCard Node是“To Node”这种关系。

对于节点,它们是两种关系

  • 外向关系
  • 传入关系

从上图中,关系是到客户节点的“外向关系”,并且相同的关系是到信用卡节点的“到达关系”。

考虑下面的图。 这里我们创建了从“CreditCard”节点到“客户”节点的关系。
Neo4j - CQL语法介绍(2)_第2张图片
从上面的图中,关系是“出局关系”到“信用卡”节点,并且相同的关系是“到达关系”到“客户”节点。

考虑下面的图。 我们在“CreditCard”和“Customer”节点之间创建了两个关系:一个从“CreditCard”到“Customer”。 另一个从“客户”到“信用卡”。 这意味着它是双向关系。
Neo4j - CQL语法介绍(2)_第3张图片

二、CREATE创建标签

Neo4j CQL创建节点标签
Label是Neo4j数据库中的节点或关系的名称或标识符。

我们可以将此标签名称称为关系为“关系类型”。

我们可以使用CQL CREATE命令为节点或关系创建单个标签,并为节点创建多个标签。 这意味着Neo4j仅支持两个节点之间的单个关系类型。

我们可以在UI模式和网格模式下在CQL数据浏览器中观察此节点或关系的标签名称。 并且我们引用它执行CQL命令。

到目前为止,我们只创建了一个节点或关系的标签,但我们没有讨论它的语法。

使用Neo4j CQL CREATE命令

  • 为节点创建单个标签

  • 为节点创建多个标签

  • 为关系创建单个标签

我们将在本章中讨论如何创建一个节点的单个标签或多个标签。 我们将在下一章讨论如何为关系创建一个单独的标签。

单个标签到节点

语法:

CREATE (<node-name>:<label-name>)

Neo4j - CQL语法介绍(2)_第4张图片
注意 -

  • 我们应该使用colon(:)运算符来分隔节点名和标签名。

  • Neo4j数据库服务器使用此名称将此节点详细信息存储在Database.As Neo4j DBA或Developer中,我们不能使用它来访问节点详细信息

  • Neo4j数据库服务器创建一个标签名称作为内部节点名称的别名。作为Neo4j DBA或开发人员,我们应该使用此标签名称来访问节点详细信息。

例如
本示例演示如何为“GooglePlusProfile”节点创建单个标签。

步骤1 -打开Neo4j数据浏览器
Neo4j - CQL语法介绍(2)_第5张图片
步骤2 -在数据浏览器上键入以下命令

CREATE (google1:GooglePlusProfile)

这里google1是一个节点名

GooglePlusProfile是google1node的标签名称
Neo4j - CQL语法介绍(2)_第6张图片
步骤3 -点击“执行”按钮并观察结果。
Neo4j - CQL语法介绍(2)_第7张图片
我们可以观察到在Neo4j数据库中创建了一个标签和一个节点。

多个标签到节点

语法:

CREATE (<node-name>:<label-name1>:<label-name2>.....:<label-namen>)

Neo4j - CQL语法介绍(2)_第8张图片
注意 -

  • 我们应该使用colon(:)运算符来分隔节点名和标签名。

  • 我们应该使用colon(:)运算符将一个标签名称分隔到另一个标签名称。

例如
本示例演示如何为“Cinema”节点创建多个标签名称。

我们的客户提供的多个标签名称:Cinema,Film,Movie,Picture。

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

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

CREATE (m:Movie:Cinema:Film:Picture)

这里m是一个节点名

Movie, Cinema, Film, Picture是m节点的多个标签名称
Neo4j - CQL语法介绍(2)_第9张图片
步骤3 -点击“执行”按钮并观察结果。
Neo4j - CQL语法介绍(2)_第10张图片
这里我们可以观察到在Neo4j数据库中创建了四个标签和一个节点。

单个标签到关系

语法:

CREATE (<node1-name>:<label1-name>)-
	[<relationship-name>:<relationship-label-name>]
	->(<node2-name>:<label2-name>)

语法说明
Neo4j - CQL语法介绍(2)_第11张图片
注意 -

我们应该使用colon(:)运算符来分隔节点名和标签名。

我们应该使用colon(:)运算符来分隔关系名称和关系标签名称。

我们应该使用colon(:)运算符将一个标签名称分隔到另一个标签名称。

Neo4J数据库服务器使用此名称将此节点详细信息存储在Database.As中作为Neo4J DBA或开发人员,我们不能使用它来访问节点详细信息。

Neo4J Database Server创建一个标签名称作为内部节点名称的别名。作为Neo4J DBA或Developer,我们应该使用此标签名称来访问节点详细信息。

例如:
本示例演示如何为关系创建标签

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

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

CREATE (p1:Profile1)-[r1:LIKES]->(p2:Profile2)

这里p1和profile1是节点名称和节点标签名称“From Node”

p2和Profile2是“To Node”的节点名称和节点标签名称

r1是关系名称

LIKES是一个关系标签名称
Neo4j - CQL语法介绍(2)_第12张图片
步骤3 -点击“执行”按钮并观察结果。
Neo4j - CQL语法介绍(2)_第13张图片
这里我们可以观察到两个节点,两个标签和一个关系被添加到Neo4J数据库。

三、WHERE子句

像SQL一样,Neo4j CQL在CQL MATCH命令中提供了WHERE子句来过滤MATCH查询的结果。

简单WHERE子句语法

WHERE <condition>

复杂WHERE子句语法

WHERE <condition> <boolean-operator> <condition>

我们可以使用布尔运算符在同一命令上放置多个条件。 请参考下一节,了解Neo4j CQL中可用的布尔运算符。

<condition>语法:
<property-name> <comparison-operator> <value>

语法说明:
Neo4j - CQL语法介绍(2)_第14张图片
Neo4j CQL中的布尔运算符

Neo4j支持以下布尔运算符在Neo4j CQL WHERE子句中使用以支持多个条件。
Neo4j - CQL语法介绍(2)_第15张图片
Neo4j CQL中的比较运算符

Neo4j 支持以下的比较运算符,在 Neo4j CQL WHERE 子句中使用来支持条件。
Neo4j - CQL语法介绍(2)_第16张图片
例如
此示例演示如何在MATCH Command中使用CQL WHERE子句根据员工名称检索员工详细信息。

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

在这里插入图片描述
这是Neo4j数据浏览器主页

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

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

Neo4j - CQL语法介绍(2)_第17张图片
步骤3 -点击“执行”按钮并观察结果。
Neo4j - CQL语法介绍(2)_第18张图片
如果我们观察结果,它返回4个员工节点详细信息。

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

MATCH (emp:Employee) 
WHERE emp.name = 'Abc'
RETURN emp

Neo4j - CQL语法介绍(2)_第19张图片

步骤5 -点击“执行”按钮并观察结果。
Neo4j - CQL语法介绍(2)_第20张图片
使用“网格视图”查看节点详细信息。如果我们观察结果,它只返回一个名为“Abc”的员工详细信息。

例如:
此示例演示如何在MATCH Command中的CQL WHERE子句中使用多个条件与布尔运算符,以根据员工名称检索员工详细信息。

步骤1 -打开Neo4j数据浏览器
Neo4j - CQL语法介绍(2)_第21张图片
步骤2 -在数据浏览器上键入以下命令

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

Neo4j - CQL语法介绍(2)_第22张图片
步骤3 -点击“执行”按钮并观察结果。
Neo4j - CQL语法介绍(2)_第23张图片
如果我们观察结果,它返回4个员工节点详细信息。

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

MATCH (emp:Employee) 
WHERE emp.name = 'Abc' OR emp.name = 'Xyz'
RETURN emp

Neo4j - CQL语法介绍(2)_第24张图片
步骤5-点击“执行”按钮并观察结果。

Neo4j - CQL语法介绍(2)_第25张图片
使用“网格视图”查看节点详细信息。如果我们观察到结果,它只返回两个名为“Abc”或“Xyz”的员工详细信息。

使用WHERE子句创建关系

在Neo4J CQL中,我们可以以不同的方式创建拖曳节点之间的关系。

  • 创建两个现有节点之间的关系

  • 一次创建两个节点和它们之间的关系

  • 使用WHERE子句创建两个现有节点之间的关系

我们已经讨论了前两章中的前两种方法。 现在我们将在本章中讨论“使用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>) 

语法说明:
Neo4j - CQL语法介绍(2)_第26张图片
例如
此示例演示如何使用WHERE子句创建两个现有节点之间的关系。

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

步骤2 -在数据浏览器上键入以下命令,以验证我们的Neo4J数据库中是否存在所需的客户节点。

MATCH (cust:Customer)
RETURN cust.id,cust.name,cust.dob

Neo4j - CQL语法介绍(2)_第27张图片
步骤3 -点击“执行”按钮并观察结果。
Neo4j - CQL语法介绍(2)_第28张图片
如果我们观察结果,它表明我们所需的客户节点在我们的Neo4J数据库中可用。

步骤4 -在数据浏览器上键入以下命令,验证我们的Neo4J数据库中是否存在所需的CreditCard节点。

MATCH (cc:CreditCard)
RETURN cc.id,cc.number,cc.expiredate,cc.cvv

Neo4j - CQL语法介绍(2)_第29张图片
步骤5 -点击“执行”按钮并观察结果。
Neo4j - CQL语法介绍(2)_第30张图片
如果我们观察结果,它表明我们所需的CreditCard节点在我们的Neo4J数据库中可用。

步骤6 -在数据浏览器上键入以下命令以创建客户和CreditCard节点之间的关系。

MATCH (cust:Customer),(cc:CreditCard) 
WHERE cust.id = "1001" AND cc.id= "5001" 
CREATE (cust)-[r:DO_SHOPPING_WITH{shopdate:"12/12/2014",price:55000}]->(cc) 
RETURN r

Neo4j - CQL语法介绍(2)_第31张图片
步骤7 -点击“执行”按钮并观察结果。

Neo4j - CQL语法介绍(2)_第32张图片

单击关系并在单独的窗口中观察其属性

Neo4j - CQL语法介绍(2)_第33张图片
现在我们通过使用Neo4J CQL WHERE子句在两个现有节点之间创建了一个NEW关系。

四、DELETE删除

Neo4j使用CQL DELETE子句

  • 删除节点。
  • 删除节点及相关节点和关系。

我们将在本章中讨论如何删除一个节点。 我们将在下一章讨论如何删除节点和相关的节点和关系。

删除节点 -
通过使用此命令,我们可以从数据库永久删除节点及其关联的属性。

DELETE节点子句语法

DELETE <node-name-list>

Neo4j - CQL语法介绍(2)_第34张图片
注意 -

我们应该使用逗号(,)运算符来分隔节点名。

例如:
此示例演示如何从数据库中永久删除节点。

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

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

MATCH (e: Employee) RETURN e 

注意 -

MATCH (e: 'Employee') RETURN e

MATCH (e: "Employee") RETURN e

MATCH (e: Employee) RETURN e

Neo4j - CQL语法介绍(2)_第35张图片

所有三个命令都相同,我们可以选择这些命令中的任何一个。

步骤3 - 点击“执行”按钮并观察结果
Neo4j - CQL语法介绍(2)_第36张图片
这里我们可以观察到在数据库中有一个节点可用“Employee”名称。

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

MATCH (e: Employee) DELETE e

现在,而不是“返回e”,使用“DELETE e”命令删除Employee节点
Neo4j - CQL语法介绍(2)_第37张图片
步骤5 - 单击“执行”按钮并观察结果。

Neo4j - CQL语法介绍(2)_第38张图片
这里我们可以看到一个节点从数据库中删除。

现在检查是否从数据库中删除Employee节点。

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

MATCH (e: Employee) RETURN e

Neo4j - CQL语法介绍(2)_第39张图片
在这里我们可以观察到Employee节点被永久删除为零查询返回的行。

DELETE节点和关系子句语法

DELETE <node1-name>,<node2-name>,<relationship-name>

Neo4j - CQL语法介绍(2)_第40张图片
注意 -

我们应该使用逗号(,)运算符来分隔节点名称和关系名称。

例如
此示例演示如何从数据库永久删除节点及其关联节点和关系。

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

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

MATCH (cc:CreditCard)-[r]-(c:Customer)RETURN r 

Neo4j - CQL语法介绍(2)_第41张图片
Step 3 - 点击“执行”按钮并观察结果。

Neo4j - CQL语法介绍(2)_第42张图片
在这里我们观察到一个节点为客户,一个节点为信用卡和它们之间的关系是可用的。

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

MATCH (cc: CreditCard)-[rel]-(c:Customer) 
DELETE cc,c,rel

Neo4j - CQL语法介绍(2)_第43张图片
步骤5 - 点击“执行”按钮并观察结果。
Neo4j - CQL语法介绍(2)_第44张图片
这里我们可以观察到两个节点及其关联的10个关系被成功删除。

现在检查DELETE操作是否成功完成。

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

MATCH (cc:CreditCard)-[r]-(c:Customer) RETURN r

Neo4j - CQL语法介绍(2)_第45张图片
步骤7 - 点击“执行”按钮并观察结果。
Neo4j - CQL语法介绍(2)_第46张图片
这里我们可以看到从数据库返回的零行。

五、REMOVE删除

有时基于我们的客户端要求,我们需要向现有节点或关系添加或删除属性。

我们使用Neo4j CQL SET子句向现有节点或关系添加新属性。

我们使用Neo4j CQL REMOVE子句来删除节点或关系的现有属性。

Neo4j CQL REMOVE命令用于

  • 删除节点或关系的标签
  • 删除节点或关系的属性

Neo4j CQL DELETE和REMOVE命令之间的主要区别 -

  • DELETE操作用于删除节点和关联关系。
  • REMOVE操作用于删除标签和属性。

Neo4j CQL DELETE和REMOVE命令之间的相似性 -

  • 这两个命令不应单独使用。
  • 两个命令都应该与MATCH命令一起使用。

删除节点/关系的属性

我们可以使用相同的语法从数据库中永久删除节点或关系的属性或属性列表。

REMOVE属性子句语法

REMOVE <property-name-list>

property-name-list <属性名称列表>语法

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

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

注意 -

我们应该使用逗号(,)运算符来分隔标签名称列表。
我们应该使用dot(。)运算符来分隔节点名称和标签名称。

例如
此示例演示如何创建节点并从数据库中永久删除此节点的属性。

步骤1 - 打开Neo4j数据浏览器
Neo4j - CQL语法介绍(2)_第47张图片
步骤2 -在数据浏览器上键入以下命令

CREATE (book:Book {id:122,title:"Neo4j Tutorial",pages:340,price:250}) 

Neo4j - CQL语法介绍(2)_第48张图片
步骤3 -点击“执行”按钮并观察结果。
Neo4j - CQL语法介绍(2)_第49张图片
它类似于以下两个SQL命令在一个镜头。

CREATE TABLE BOOK(
	id number,
	title varchar2(20),
	pages number,
	price number
);
INSERT INTO BOOK VALUES (122,'Neo4j Tutorial',340,250);

这里我们可以观察到一个标签和一个节点有4个属性被成功创建。

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

MATCH (book : Book)
RETURN book

它类似于下面的SQL命令。

SELECT * FROM BOOK;

步骤5 -点击“执行”按钮并观察结果。
Neo4j - CQL语法介绍(2)_第50张图片
这里我们可以观察到这个书节点有4个属性。

步骤6 -在数据浏览器上键入以下命令,然后单击执行按钮从书节点中删除“price”属性。

MATCH (book { id:122 })
REMOVE book.price
RETURN book

它类似于下面的SQL命令。

ALTER TABLE BOOK REMOVE COLUMN PRICE;
SELECT * FROM BOOK WHERE ID = 122;

Neo4j - CQL语法介绍(2)_第51张图片
在这里,我们只能看到节点书的3个属性,因为“价格”属性被删除。

有时基于客户端要求,我们需要删除一些现有的属性到节点或关系。

我们需要使用REMOVE子句来删除一个属性或一组属性。

例如
此示例演示如何从数据库中永久删除现有节点的属性。

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

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

MATCH (dc:DebitCard) 
RETURN dc

Neo4j - CQL语法介绍(2)_第52张图片
步骤3 -点击“执行”按钮并观察结果。
Neo4j - CQL语法介绍(2)_第53张图片
这里我们可以观察到DebitCard节点包含6个属性。

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

MATCH (dc:DebitCard) 
REMOVE dc.cvv
RETURN dc

Neo4j - CQL语法介绍(2)_第54张图片
步骤5 -点击“执行”按钮并观察结果。
Neo4j - CQL语法介绍(2)_第55张图片
如果我们观察输出,“cvv”属性从“DebitCard”节点中删除。

删除节点/关系的标签

我们可以使用相同的语法从数据库中永久删除节点或关系的标签或标签列表。

REMOVE一个Label子句语法:

REMOVE <label-name-list> 

Neo4j - CQL语法介绍(2)_第56张图片
label-name-list语法

<node-name>:<label2-name>, 
.... 
<node-name>:<labeln-name> 

语法说明:
Neo4j - CQL语法介绍(2)_第57张图片
注意 -

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

我们应该使用colon(:)运算符来分隔节点名和标签名。

例如
此示例演示如何从数据库永久删除不需要的标签到节点。

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

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

MATCH (m:Movie) RETURN m

Neo4j - CQL语法介绍(2)_第58张图片
步骤3 -点击“执行”按钮并观察结果。
Neo4j - CQL语法介绍(2)_第59张图片
步骤4 -点击节点以查看其属性窗口。
Neo4j - CQL语法介绍(2)_第60张图片
在这里我们可以观察到四个标签可用于单个节点。

根据我们的客户要求,我们需要删除“图片”属性到此节点。

步骤5 -在浏览器上键入以下命令,然后单击执行按钮。

MATCH (m:Movie) 
REMOVE m:Picture

Neo4j - CQL语法介绍(2)_第61张图片
步骤6 -点击“执行”按钮并观察结果。
Neo4j - CQL语法介绍(2)_第62张图片
在这里我们可以观察到一个标签从数据库永久删除的节点。

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

MATCH (m:Movie) RETURN m

Neo4j - CQL语法介绍(2)_第63张图片
步骤8 -点击“执行”按钮并观察结果
Neo4j - CQL语法介绍(2)_第64张图片
步骤9 -单击节点以查看其属性窗口。
Neo4j - CQL语法介绍(2)_第65张图片
这里我们可以观察到这个节点只有三个标签:Movie,Cinema,Film from Properties Window。 这意味着我们的上一个命令已成功删除图片标签。

六、SET子句

有时,根据我们的客户端要求,我们需要向现有节点或关系添加新属性。

要做到这一点,Neo4j CQL 提供了一个SET子句。

Neo4j CQL 已提供 SET 子句来执行以下操作。

  • 向现有节点或关系添加新属性
  • 添加或更新属性值

SET子句语法

SET  <property-name-list>

Neo4j - CQL语法介绍(2)_第66张图片

<属性名称列表>语法:

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

语法说明:
Neo4j - CQL语法介绍(2)_第67张图片
注意 -

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

示例:演示如何向现有 DebitCard 节点添加新属性。

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

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

MATCH (book:Book)
RETURN book

Neo4j - CQL语法介绍(2)_第68张图片
步骤3 -在数据浏览器上键入以下命令然后查询。

MATCH (book:Book)
SET book.title = 'superstar'
RETURN book

Neo4j - CQL语法介绍(2)_第69张图片
这里我们可以观察到新的属性被添加到“book”节点。

你可能感兴趣的:(neo4j,知识图谱)