美文网首页
Nosql-图数据库-CQL简介

Nosql-图数据库-CQL简介

作者: Viterbi | 来源:发表于2022-09-07 08:28 被阅读0次

    CQL简介

    CQL代表Cypher查询语言。 像Oracle数据库具有查询语言SQL,Neo4j具有CQL作为查询语言。

    Neo4j CQL -

    • 它是Neo4j图形数据库的查询语言。
    • 它是一种声明性模式匹配语言
    • 它遵循SQL语法。
    • 它的语法是非常简单且人性化、可读的格式。

    如Oracle SQL -

    • Neo4j CQL 已命令来执行数据库操作。
    • Neo4j CQL 支持多个子句像在哪里,顺序等,以非常简单的方式编写非常复杂的查询。
    • NNeo4j CQL 支持一些功能,如字符串,Aggregation.In 加入他们,它还支持一些关系功能。

    Neo4j CQL命令

    CQL命令 用法
    CREATE 创建 创建节点,关系和属性
    MATCH 匹配 检索有关节点,关系和属性数据
    RETURN 返回 返回查询结果
    WHERE 哪里 提供条件过滤检索数据
    DELETE 删除 删除节点和关系
    REMOVE 移除 删除节点和关系的属性
    ORDER BY 以…排序排序检索数据
    SET 组 添加或更新标签

    Neo4j CQL 函数

    定制列表功能 用法
    String 字符串 它们用于使用String字面量。
    Aggregation 聚合 它们用于对CQL查询结果执行一些聚合操作。
    Relationship 关系 他们用于获取关系的细节,如startnode,endnode等。

    Neo4j CQL数据类型

    CQL数据类型 用法
    boolean 用于表示布尔文字:true,false。
    byte 用于表示8位整数。
    short 用于表示16位整数。
    int 用于表示32位整数。
    long 用于表示64位整数。
    float I用于表示32位浮点数。
    double 用于表示64位浮点数。
    char 用于表示16位字符。
    String 用于表示字符串。

    Neo4j CQL - CREATE命令

    • 创建没有属性的节点
    • 使用属性创建节点
    • 在没有属性的节点之间创建关系
    • 使用属性创建节点之间的关系
    • 为节点或关系创建单个或多个标签

    创建没有属性的节点

    Neo4j CQL“CREATE”命令用于创建没有属性的节点。 它只是创建一个没有 任何数据的节点。

    CREATE命令语法
    CREATE (<node-name>:<label-name>)

    语法说明

    语法元素 描述
    CREATE 它是一个Neo4j CQL命令。
    它是我们要创建的节点名称
    它是一个节点标签名称

    注意事项

    • Neo4j数据库服务器使用此<node-name>将此节点详细信息存储在Database.As中作为Neo4j DBA或Developer,我们不能使用它来访问节点详细信息
    • Neo4j数据库服务器创建一个<label-name>作为内部节点名称的别名。作为Neo4j DBA或Developer,我们应该使用此标签名称来访问节点详细信息

    例如:本示例演示如何创建一个简单的“Employee”节点。 按照以下步骤:

    • 步骤1 - 打开Neo4j数据浏览器
    • 步骤2 - 在数据浏览器中的美元提示符下键入以下命令。CREATE (emp:Employee)这里emp是一个节点名Employee是emp节点的标签名称
    • 步骤3 - 单击执行按钮,并在数据浏览器中看到成功消息。 它显示在Neo4j数据库中创建一个标签和一个节点。 它在数据库中创建一个带有标签名“Employee”的节点“emp”。

    使用属性创建节点

    Neo4j CQL“CREATE”命令用于创建带有属性的节点。 它创建一个具有一些属性(键值对)的节点来存储数据

    CREATE命令语法

    CREATE (
       <node-name>:<label-name>
       { 	
          <Property1-name>:<Property1-Value>
          ........
          <Propertyn-name>:<Propertyn-Value>
       }
    )
    

    语法说明

    语法元素 描述
    它是我们将要创建的节点名称。
    它是一个节点标签名称
    属性是键值对。 定义将分配给创建节点的属性的名称
    属性是键值对。 定义将分配给创建节点的属性的值

    例如:此示例演示如何创建具有一些属性(deptno,dname,位置)的Dept节点。 按照下面给出的步骤

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

    • 步骤2 - 在数据浏览器中的dollar提示符下键入以下命令。
      CREATE (dept:Dept { deptno:10,dname:"Accounting",location:"Hyderabad" })

      这里dept是一个节点名Dept是emp节点的标签名称

      这里的属性名称是deptno,dname,location
      属性值为10,“Accounting”,“Hyderabad”
      正如我们讨论的,属性一个名称 - 值对。
      Property = deptno:10
      因为deptno是一个整数属性,所以我们没有使用单引号或双引号定义其值10。 由于dname和location是String类型属性,因此我们使用单引号或双引号定义其值10。

      注意 - 要定义字符串类型属性值,我们需要使用单引号或双引号

    • 步骤3 -单击执行按钮,并在数据浏览器中查看成功消息。

    Neo4j CQL - MATCH命令

    Neo4j CQL MATCH命令用于 -

    • 从数据库获取有关节点和属性的数据
    • 从数据库获取有关节点,关系和属性的数据

    MATCH命令语法

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

    语法说明

    语法元素 描述
    这是我们要创建一个节点名称。
    这是一个节点的标签名称

    注意事项 -

    • Neo4j数据库服务器使用此<node-name>将此节点详细信息存储在Database.As中作为Neo4j DBA或Developer,我们不能使用它来访问节点详细信息
    • Neo4j数据库服务器创建一个<label-name>作为内部节点名称的别名。作为Neo4j DBA或Developer,我们应该使用此标签名称来访问节点详细信息

    注意-我们不能单独使用MATCH Command从数据库检索数据。 如果我们单独使用它,那么我们将InvalidSyntax错误。
    我们可以使用MATCH命令与RETURN子句或更新子句

    Neo4j CQL - RETURN子句

    Neo4j CQL RETURN子句用于 -

    • 检索节点的某些属性
    • 检索节点的所有属性
    • 检索节点和关联关系的某些属性
    • 检索节点和关联关系的所有属性

    RETURN命令语法

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

    语法说明:

    语法元素 描述
    它是我们将要创建的节点名称
    属性是键值对。定义要分配给创建节点的属性的名称
    • 我们不能单独使用RETURN子句。我们应该既MATCH使用或CREATE命令。

    Neo4j CQL - MATCH & RETURN匹配和返回

    在Neo4j CQL中,我们不能单独使用MATCH或RETURN命令,因此我们应该合并这两个命令以从数据库检索数据

    Neo4j使用CQL MATCH + RETURN命令 -

    • 检索节点的某些属性
    • 检索节点的所有属性
    • 检索节点和关联关系的某些属性
    • 检索节点和关联关系的所有属性
    MATCH RETURN命令语法:
    MATCH Command
    RETURN Command
    

    例如: 本示例演示如何从数据库检索Dept节点的一些属性(deptno,dname)数据。

    注-结点包含3个属性:deptno,dname,location。 然而在这个例子中,我们感兴趣的是只查看两个属性数据。 按照下面给出的步骤 -

    • 步骤1 -打开Neo4j的数据浏览器。
    • 步骤2 -在数据浏览器中的dollar提示符下键入以下命令。
    MATCH (dept: Dept)
    RETURN dept.deptno,dept.dname
    

    这里 -

    • dept是节点名称
    • 这里Dept是一个节点标签名
    • deptno是dept节点的属性名称
    • dname是dept节点的属性名

    例如: 此示例演示如何从数据库检索Dept节点的数据,而无需指定其属性。

    注-结点包含3个属性:deptno,dname,location。 按照下面给出的步骤 -

    • 步骤1 -打开Neo4j数据浏览器。
    • 步骤2 -在数据浏览器中的dollar提示符下键入以下命令。
    MATCH (dept: Dept)
    RETURN dept
    

    这里dept是一个节点名 这里Dept是一个节点标签名

    • 步骤3 -单击执行按钮,并在数据浏览器中看到成功消息。

    Neo4j CQL - 关系基础

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

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

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

    • 单向关系
    • 双向关系

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

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

    例如:
    我们将创建客户和CreditCard之间的关系,如下所示:
    在上一章中,我们已经创建了Customer和CreditCard节点。 现在我们将看到如何创建它们之间的关系

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

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

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

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

    • 从节点
    • 到节点

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

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

    • 外向关系
    • 传入关系

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

    Neo4j-没有属性的关系与现有节点

    在这种情况下,我们将使用两个现有节点:CreditCard和Customer创建没有属性的关系。 这意味着,我们的Neo4J数据库应该有这两个节点。

    我们使用CQL MATCH命令检索现有的两个节点和CQL CREATE命令,以创建它们之间的新关系。

    语法:

    MATCH (<node1-name>:<node1-label-name>),(<node2-name>:<node2-label-name>)
    CREATE  
    	(<node1-name>)-[<relationship-name>:<relationship-label-name>]->(<node2-name>)
    RETURN <relationship-name>
    

    语法说明:

    语法元素 描述
    MATCH,CREATE,RETURN 他们是Neo4J CQL关键字。
    它用于创建关系的“From Node”的名称。
    它用于创建关系的“From Node”的标签名称。
    它用于创建关系的“To Node”的名称。
    它用于创建关系的“To Node”的标签名称。
    这是一个关系的名称。
    它是一个关系的标签名称。

    注意: 在此语法中,RETURN子句是可选的。 如果我们想立即看到结果,那么使用它。 否则,我们可以省略这个子句。

    例如: 此示例演示如何在两个现有节点之间创建无属性的单向关系:从客户到信用卡。

    • 步骤1 - 打开Neo4J数据浏览器
      它是Neo4J数据浏览器主页。 在创建从客户到信用卡的关系之前,首先检查那些节点在我们的Neo4J数据库中可用。 如果不是,请创建它们。

    • 步骤2 - 验证客户和CreditCard节点可用。在数据浏览器上键入以下命令并验证它们 在数据浏览器上键入以下命令并验证它们

    MATCH (e:Customer) 
    RETURN e
    MATCH (cc:CreditCard) 
    RETURN cc
    
    • 步骤3 - 在数据浏览器上键入以下命令
    
    MATCH (e:Customer),(cc:CreditCard) 
    CREATE (e)-[r:DO_SHOPPING_WITH ]->(cc) 
    

    这里关系标签为“DO_SHOPPING_WITH”

    关系名为“r”。

    shopdate和price是关系“r”的属性。

    Neo4j-与现有节点的属性的关系

    语法:

    MATCH (<node1-name>:<node1-label-name>),(<node2-name>:<node2-label-name>)
    CREATE  
            (<node1-name>)-[<relationship-name>:<relationship-label-name>
    {<define-properties-list>}]->(<node2-name>)
    RETURN <relationship-name>
    

    注意 - 在此语法中,RETURN子句是可选的。 如果我们想立即看到结果,那么使用它。 否则,我们可以省略这个子句。

    我们可以表示这{}如下。

    语法 -

    { 
       <property1-name>:<property1-value>,
       <property2-name>:<property2-value>,
       ...
       <propertyn-name>:<propertyn-value>
    }
    

    在数据浏览器上键入以下命令

    MATCH (cust:Customer),(cc:CreditCard) 
    CREATE (cust)-[r:DO_SHOPPING_WITH{shopdate:"12/12/2014",price:55000}]->(cc) 
    RETURN r
    

    Neo4j-新节点无属性关系

    在这种情况下,我们将一次创建两个没有属性的节点和关系。 这意味着,我们的Neo4J数据库没有这两个节点。

    我们使用CQL CREATE命令一次创建两个结束节点和它们之间的新关系。

    语法:

    CREATE  
       (<node1-name>:<node1-label-name>)-
       [<relationship-name>:<relationship-label-name>]->
       (<node1-name>:<node1-label-name>)
    RETURN <relationship-name>
    

    Neo4j-新节点与属性的关系

    在这种情况下,我们将一次创建两个节点和关系属性。 这意味着,我们的Neo4J数据库没有这两个节点。

    我们使用CQL CREATE命令一次创建两个结束节点和它们之间的新关系。

    语法:

    CREATE  
    	(<node1-name>:<node1-label-name>{<define-properties-list>})-
    	[<relationship-name>:<relationship-label-name>{<define-properties-list>}]
    	->(<node1-name>:<node1-label-name>{<define-properties-list>})
    RETURN <relationship-name>
    

    Neo4j-检索关系节点的详细信息

    我们可以使用MATCH + RETURN命令来查看单独创建或作为关系的一部分创建的节点的详细信息。

    在本章中,我们将讨论如何检索参与关系的Node的详细信息。

    语法:

    MATCH 
    (<node1-name>)-[<relationship-name>:<relationship-label-name>]->(<node2-name>)
    RETURN <relationship-name>
    

    Neo4j CQL - CREATE创建标签

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

    我们可以将此标签名称称为关系为“关系类型”。
    我们可以使用CQL CREATE命令为节点或关系创建单个标签,并为节点创建多个标签。 这意味着Neo4j仅支持两个节点之间的单个关系类型。 我们可以在UI模式和网格模式下在CQL数据浏览器中观察此节点或关系的标签名称。 并且我们引用它执行CQL命令。

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

    使用Neo4j CQL CREATE命令

    • 为节点创建单个标签
    • 为节点创建多个标签
    • 为关系创建单个标签

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

    单个标签到节点

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

    多个标签到节点

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

    单个标签到关系

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

    Neo4j CQL - WHERE子句

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

    • 简单WHERE子句语法
    WHERE <condition>
    
    • 复杂WHERE子句语法
    WHERE <condition> <boolean-operator> <condition>
    

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

    语法:

    <property-name> <comparison-operator> <value>
    
    语法元素 描述
    WHERE 它是一个Neo4j CQL关键字。
    <属性名称> 它是节点或关系的属性名称。
    <比较运算符> 它是Neo4j CQL比较运算符之一。请参考下一节查看Neo4j CQL中可用的比较运算符。
    <值> 它是一个字面值,如数字文字,字符串文字等。

    Neo4j CQL中的布尔运算符

    Neo4j支持以下布尔运算符在Neo4j CQL WHERE子句中使用以支持多个条件。

    布尔运算符 描述
    AND 它是一个支持AND操作的Neo4j CQL关键字。
    OR 它是一个Neo4j CQL关键字来支持OR操作。
    NOT 它是一个Neo4j CQL关键字支持NOT操作。
    XOR 它是一个支持XOR操作的Neo4j CQL关键字。

    Neo4j CQL中的比较运算符

    Neo4j 支持以下的比较运算符,在 Neo4j CQL WHERE 子句中使用来支持条件。

    布尔运算符 描述
    = 它是Neo4j CQL“等于”运算符。
    <> 它是一个Neo4j CQL“不等于”运算符。
    < 它是一个Neo4j CQL“小于”运算符。
    > 它是一个Neo4j CQL“大于”运算符。
    <= 它是一个Neo4j CQL“小于或等于”运算符。
    >= 它是一个Neo4j CQL“大于或等于”运算符

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

    使用WHERE子句创建关系

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

    • 创建两个现有节点之间的关系
    • 一次创建两个节点和它们之间的关系
    • 使用WHERE子句创建两个现有节点之间的关系

    我们已经讨论了前两章中的前两种方法。 现在我们将在本章中讨论“使用WHERE子句创建两个现有节点之间的关系”。

    语法

    MATCH (<node1-name>:<node1-label-name>),(<node2-name>:<node2-label-name>) 
    WHERE <condition>
    CREATE (<node1-name>)-[<relationship-name>:<relationship-label-name>
           {<relationship-properties>}]->(<node2-name>) 
    

    Neo4j CQL - DELETE删除

    Neo4j CQL - DELETE删除 Neo4j使用CQL DELETE子句

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

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

    删除节点 -

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

    DELETE节点子句语法
    DELETE <node-name-list>

    DELETE节点和关系子句语法

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

    Neo4j CQL - 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>

    删除节点/关系的标签

    我们可以使用相同的语法从数据库中永久删除节点或关系的标签或标签列表。
    REMOVE一个Label子句语法:
    REMOVE <label-name-list>

    Neo4j CQL - SET子句

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

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

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

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

    SET子句语法
    SET <property-name-list>

    Neo4j CQL - Sorting排序

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

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

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

    ORDER BY子句语法
    ORDER BY <property-name-list> [DESC]

    Neo4j CQL - UNION联盟

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

    • UNION
    • UNION ALL

    UNION子句

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

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

    UNION子句语法

    <MATCH Command1>
       UNION
    <MATCH Command2>
    

    例子:

    
    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 ALL子句

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

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

    UNION ALL子句语法

    <MATCH Command1>
    UNION ALL
    <MATCH Command2>
    

    例子

    
    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
    

    Neo4j CQL - LIMIT和SKIP子句

    Neo4j CQL LIMIT子句

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

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

    LIMIT子句语法
    LIMIT <number>

    Neo4j CQL SKIP子句

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

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

    SKIP子句语法:
    SKIP <number>

    Neo4j CQL - 合并

    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 - NULL值

    Neo4j CQL将空值视为对节点或关系的属性的缺失值或未定义值。

    当我们创建一个具有现有节点标签名称但未指定其属性值的节点时,它将创建一个具有NULL属性值的新节点。

    让我们用一个例子来看这个。

    MATCH (e:Employee) 
    WHERE e.id IS NOT NULL
    RETURN e.id,e.name,e.sal,e.deptno
    
    
    MATCH (e:Employee) 
    WHERE e.id IS NULL
    RETURN e.id,e.name,e.sal,e.deptno
    

    Neo4j CQL-IN操作符

    与SQL一样,Neo4j CQL提供了一个IN运算符,以便为CQL命令提供值的集合。
    IN操作符语法IN[<Collection-of-values>]

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

    Neo4j - ID属性

    在Neo4j中,“Id”是节点和关系的默认内部属性。 这意味着,当我们创建一个新的节点或关系时,Neo4j数据库服务器将为内部使用分配一个数字。 它会自动递增。我们将通过一个例子来理解这个概念

    注意 -

    • 以相同的方式,Neo4j数据库服务器为关系分配一个默认Id属性。
    • 节点的Id属性的最大值约为35亿。
    • Id的最大值关系的属性的大约35亿。

    Neo4j - 方向关系

    在Neo4j中,两个节点之间的关系是有方向性的。 它们是单向或双向的。

    由于Neo4j遵循属性图数据模型,它应该只支持方向关系。 如果我们尝试创建一个没有任何方向的关系,那么Neo4j DB服务器应该抛出一个错误。

    在本章中,我们将提供一个例子来证明这一点。

    我们使用以下语法来创建两个节点之间的关系。

    这里 -

    • 是“From Node”节点详细信息
    • 是“到节点”节点详细信息

    relationship-details>是关系详细信息

    如果我们观察上面的语法,它使用一个箭头标记:() - []→()。 它表示从左侧节点到右侧节点的方向。

    如果我们尝试使用相同的语法,没有箭头标记like() - [] - (),这意味着没有方向的关系。 然后Neo4j DB服务器应该抛出一个错误消息

    节点和标签之间关系

    Neo4j中的节点标签,基本等同于关系数据库中的table表名,或者说是一个类别。但是跟table不同的是,这里节点很方便的有多个标签: (n:Person :User)

    官方文档:
    A label is a named graph construct that is used to group nodes into sets; all nodes labeled with the same label belongs to the same set。

    问题中的CREATE (p:学生{name:"小红"})中的p只是在这个命令中的一个变量而已,命令执行完了之后,就没用了,所以后续就无法用它访问节点了。而可以用label做match访问。

    • :之前的节点名(类似于变量名),: 之后的是标签名

    • 如果你不对对象进行操作就可以不写,比如create操作:

    create(:程序员 {name:"小东",age:23,birthday:"1995/12/06"})
    >>Added 1 label, created 1 node, set 3 properties, completed after 21 ms.
    
    • 由上面的例子可以看出,无论你节点起什么名字都无所谓,它相当于是python语言里面的一个变量名,指向一个对象,可以对其进行操作.
    • 所以节点是可写可不写的.需要操作实例的时候就需要写节点,也可以理解为节点是对应实例的变量名.
    • 但是注意标签是一定要写的.标签是Neo4j图数据库的分类.需要根据这个进行搜索.

    本文使用 文章同步助手 同步

    相关文章

      网友评论

          本文标题:Nosql-图数据库-CQL简介

          本文链接:https://www.haomeiwen.com/subject/zszwnrtx.html