• Neo4j CQL


    1、CQL简介

    CQL代表Cypher查询语言。 像关系型数据库具有查询语言SQL,Neo4j使用CQL作为查询语言。

    Neo4j CQL

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

    常用的Neo4j CQL命令/条款如下:

    CQL命令/条作用
    CREATE 创建创建节点,关系和属性
    MATCH 匹配检索有关节点,关系和属性数据
    RETURN 返回返回查询结果
    WHERE 条件提供条件过滤检索MATCH数据
    DELETE 删除删除节点和关系
    REMOVE 移除删除节点和关系的属性
    SET 设置添加或更新标签
    ORDER BY 排序对结果排序
    SKIP LIMIT 分页分页
    DISTINCT 排重排重

    完成上面的语法,我们基于庆余年电视剧人物关系图片:

    2、CREATE

    1. CREATE (
    2. <node-name>:<label-name>
    3. [{
    4. <property1-name>:<property1-Value>
    5. ........
    6. <propertyn-name>:<propertyn-Value>
    7. }]
    8. )

    注意:方括号中的部分,代表可选内容。

    语法说明:

    语法元素描述
    < node-name>它是我们将要创建的节点名称。
    < label-name>它是一个节点标签名称
    < property1-name>...< propertyn-name>属性是键值对。 定义将分配给创建节点的属性的名称
    < property1-value>...< propertyn-value>属性是键值对。 定义将分配给创建节点的属性的值

    举例:

    1. CREATE (person:Person);
    2. CREATE (person:Person {cid:1,name:"范闲",age:24,gender:0,character:"A",money:1000});
    3. CREATE (person:Person {cid:2,name:"林婉儿",age:20,gender:1,character:"B",money:800});
    4. CREATE (person:Person {cid:3,name:"庆帝",age:49,gender:0,character:"A",money:8900});

    3、MATCH RETURN命令语法

    1. MATCH
    2. (
    3. <node-name>:<label-name>
    4. )
    5. RETURN
    6. <node-name>.<property1-name>,
    7. ...
    8. <node-name>.<propertyn-name>

    语法说明: 

    语法元素描述
    < node-name>它是我们将要创建的节点名称。
    < label-name>它是一个节点标签名称
    < property1-name>...< propertynname>属性是键值对。 定义将分配给创建节点的属性的名称

    举例:

    1. MATCH (person:Person) return person
    2. MATCH (person:Person) return person.name,person.age

    4、关系创建

    (1)使用现有节点创建没有属性的关系

    1. MATCH (<node1-name>:<node1-label-name>),(<node2-name>:<node2-label-name>)
    2. CREATE
    3. (<node1-name>)-[<relationship-name>:<relationship-label-name>]->(<node2-name>)
    4. RETURN 相应的内容

    语法说明:

    语法元素描述
    MATCH,CREATE,RETURN他们是Neo4J CQL关键字。
    < noode1-name>它用于创建关系的“From Node”的名称。
    < node1-label-name>它用于创建关系的“From Node”的标签名称。
    < node2-name>它用于创建关系的“To Node”的名称。
    < node2-label-name>它用于创建关系的“To Node”的标签名称。
    < relationship-name>这是一个关系的名称。
    < relationship-label-name>它是一个关系的标签名称。
    1. 创建关系
    2. match(person:Person {name:"范闲"}) ,(person2:Person {name:"林婉儿"})
    3. create(person)-[r:Couple]->(person2);
    4. 查询关系
    5. match p = (person:Person {name:"范闲"})-[r:Couple]->(person2:Person) return p
    6. match (p1:Person {name:"范闲"})-[r:Couple]-(p2:Person) return p1,p2
    7. match (p1:Person {name:"范闲"})-[r:Couple]-(p2:Person) return r

    注:我们在浏览器中输入命令,默认只能单行而不能使用多行,一回车命令就开始执行了。我们可以设置一下,是它能够使用多行执行命令。见下图:

            勾选后我们如果想要切换到下一行,继续编写命令,只需要按住shirt+回车键,就能换行。如果想要运行命令,直接按回车键就能执行了。

    (2)使用现有节点创建有属性的关系

    1. MATCH (<node1-label-name>:<node1-name>),(<node2-label-name>:<node2-name>)
    2. CREATE
    3. (<node1-label-name>)-[<relationship-label-name>:<relationship-name>
    4. {<define-properties-list>}]->(<node2-label-name>)
    5. RETURN <relationship-label-name>
    6. 其中<define-properties-list> 是分配给新创建关系的属性(名称 - 值对)的列表。
    7. {
    8. <property1-name>:<property1-value>,
    9. <property2-name>:<property2-value>,
    10. ...
    11. <propertyn-name>:<propertyn-value>
    12. }
    1. match(person:Person {name:"范闲"}),(person2:Person {name:"林婉儿"})
    2. create(person)-[r:Couple{mary_date:"12/12/2014",price:55000}]->(person2)
    3. return r;

    (3)使用新节点创建没有属性的关系

    1. CREATE
    2. (<node1-label-name>:<node1-name>)
    3. -[<relationship-label-name>:<relationship-name>]->
    4. (<node1-label-name>:<node1-name>)
    1. create
    2. (person1:Person {cid:4,name:"长公主",age:49,gender:1,character:"A",money:5000})
    3. -[r:Friend]->
    4. (person2:Person {cid:7,name:"九品射手燕小乙",age:48,gender:0,character:"B",money:1000})

    (4)使用新节点创建有属性的关系

    1. CREATE
    2. (<node1-label-name>:<node1-name>{<define-properties-list>})
    3. -[<relationship-label-name>:<relationship-name>{<define-properties-list>}]
    4. ->(<node1-label-name>:<node1-name>{<define-properties-list>})
    1. create
    2. (person1:Person {cid:9,name:"靖王世子",age:23,gender:0,character:"A",money:3000})
    3. <-[r:Friend {date:"11-02-2000"}]->
    4. (person2:Person {cid:8,name:"二皇子",age:24,gender:0,character:"B",money:6000})

    注:这个 -> 代表生成的两个节点,连接线箭头的指向。

    关系和节点的属性可以使用的类型

    CQL数据类型作用
    boolean它用于表示布尔文字:true, false。
    byte它用来表示8位整数。
    short它用于表示16位整数。
    int它用于表示32位整数。
    long它用于表示64位整数。
    float浮点数用于表示32位浮点数。
    doubleDouble用于表示64位浮点数。
    charChar用于表示16位字符。
    String字符串用于表示字符串。

    5、CREATE创建多个标签

    1. CREATE (::.....:)
    2. 如:
    3. CREATE (person:Person:Beauty:Picture {cid:20,name:"小美女"})

    6、WHERE 子句

    1. 简单的WHERE子句
    2. WHERE <condition>
    3. 复杂的WHERE子句
    4. WHERE <condition> <boolean-operator> <condition>

    where 中的比较运算符 和 之前mysql的相同 如 = != <> > < 等

    布尔运算符描述
    AND
    OR
    NOT
    1. MATCH (person:Person)
    2. WHERE person.name = '范闲' OR person.name = '靖王世子'
    3. RETURN person

    7、DELETE 子句 和 REMOVE子句

    DELETE 子句

    • 删除节点。
    • 删除节点及相关节点和关系。
    1. match p = (:Person {name:"林婉儿"})-[r:Couple]-(:Person) delete r
    2. 删除空白节点(里面只有<id>,无其他任何内容)
    3. match(n) where id(n)=86 delete n
    4. 其中id就是我们创造任何一个节点时自动创建的且唯一的,有点像标识符。
    5. 删除时很容易被误写成下面的形式:
    6. match(n) where n.id=86 delete n ×(这是错的)
    7. 这是找不到这样的n的,也就无法删除,与普通属性不太一样哈

    REMOVE子句

    • 删除节点或关系的标签
    • 删除节点或关系的属性
    1. MATCH (person:Person {name:"小美女"})
    2. REMOVE person.cid

    8、SET子句

    • 向现有节点或关系添加新属性
    • 更新属性值
    1. MATCH (person:Person {cid:1})
    2. SET person.money = 3456,person.age=25

    9、ORDER BY 子句

    • “ORDER BY”子句,对MATCH查询返回的结果进行排序。
    • 我们可以按升序或降序对行进行排序。
    • 默认情况下,它按升序对行进行排序。 如果我们要按降序对它们进行排序,我们需要使用DESC子句。
    1. MATCH (person:Person)
    2. RETURN person.name,person.money
    3. ORDER BY person.money DESC

    10、SKIP 和 LIMIT

    • Neo4j CQL已提供“SKIP”子句来过滤或限制查询返回的行数。 它修整了CQL查询结果集顶部的结果。
    • Neo4j CQL已提供“LIMIT”子句来过滤或限制查询返回的行数。 它修剪CQL查询结果集底部的结果。
    1. MATCH (person:Person)
    2. RETURN ID(person),person.name,person.money
    3. ORDER BY person.money DESC skip 4 limit 2

    11、DISTINCT 排重

            这个函数的用法就像SQL中的distinct关键字,返回的是所有不同值。

    MATCH (p:Person) RETURN Distinct(p.character)
  • 相关阅读:
    ​CUDA学习笔记(六)Warp解析
    记录跑yolov5时,遇到的一个问题
    Java计算机毕业设计停车场信息管理系统源码+系统+数据库+lw文档
    PMP大家都是怎么备考的?使用什么工具可以分享一下吗?
    我用 GitHub 9.8k 的 Go 语言 2D 游戏引擎写了个游戏
    微机原理与接口技术
    [CM311-1A]-查看安卓的分区存储情况
    nodejs+Vue高校学籍管理系统java python php
    Maven——分模块开发与设计(重点)
    php消息推送
  • 原文地址:https://blog.csdn.net/weixin_52851967/article/details/126900547