• Cypher的基本概念:
      • Cypher是neo4j图数据的查询语言, 类似于mysql数据库的sql语句, 但是它允许对图形进行富有表现力和有效的查询和更新.

    • Cypher的基本命令和语法:
      • create命令
      • match命令
      • merge命令
      • relationship关系命令
      • where命令
      • delete命令
      • sort命令
      • 字符串函数
      • 聚合函数
      • index索引命令

    • create命令: 创建图数据中的节点.

    • 演示:
      1. # 创建命令格式:
      2. # 此处create是关键字, 创建节点名称node_name, 节点标签Node_Label, 放在小括号里面()
      3. # 后面把所有属于节点标签的属性放在大括号'{}'里面, 依次写出属性名称:属性值, 不同属性用逗号','分隔
      4. # 例如下面命令创建一个节点e, 节点标签是Employee, 拥有id, name, salary, deptnp四个属性:
      5. CREATE (e:Employee{id:222, name:'Bob', salary:6000, deptnp:12})

    • 效果

    3.3 Cypher介绍与使用 - 图1


    • match命令: 匹配(查询)已有数据.

    • 演示:
      1. # match命令专门用来匹配查询, 节点名称:节点标签, 依然放在小括号内, 然后使用return语句返回查询结果, 和SQL很相似.
      2. MATCH (e:Employee) RETURN e.id, e.name, e.salary, e.deptno

    • 效果:

    3.3 Cypher介绍与使用 - 图2


    • merge命令: 若节点存在, 则等效与match命令; 节点不存在, 则等效于create命令.

    • 演示:
      1. MERGE (e:Employee {id:146, name:'Lucer', salary:3500, deptno:16})

    • 效果:

    3.3 Cypher介绍与使用 - 图3


    • 然后再次用merge查询, 发现数据库中的数据并没有增加, 因为已经存在相同的数据了, merge匹配成功.

    • 演示:
      1. MERGE (e:Employee {id:146, name:'Lucer', salary:3500, deptno:16})

    • 效果:

    3.3 Cypher介绍与使用 - 图4


    • 使用create创建关系: 必须创建有方向性的关系, 否则报错.

    • 演示:
      1. # 创建一个节点p1到p2的有方向关系, 这个关系r的标签为Buy, 代表p1购买了p2, 方向为p1指向p2
      2. CREATE (p1:Profile1)-[r:Buy]->(p2:Profile2)

    • 效果:

    3.3 Cypher介绍与使用 - 图5


    • 使用merge创建关系: 可以创建有/无方向性的关系.

    • 演示:
      1. # 创建一个节点p1到p2的无方向关系, 这个关系r的标签为miss, 代表p1-miss-p2, 方向为相互的
      2. MERGE (p1:Profile1)-[r:miss]-(p2:Profile2)

    • 效果:

    3.3 Cypher介绍与使用 - 图6


    • where命令: 类似于SQL中的添加查询条件.

    • 演示:
      1. # 查询节点Employee中, id值等于123的那个节点
      2. MATCH (e:Employee) WHERE e.id=123 RETURN e

    • 效果:

    3.3 Cypher介绍与使用 - 图7


    • delete命令: 删除节点/关系及其关联的属性.

    • 演示:
      1. # 注意: 删除节点的同时, 也要删除关联的关系边
      2. MATCH (c1:CreditCard)-[r]-(c2:Customer) DELETE c1, r, c2

    • 效果:

    3.3 Cypher介绍与使用 - 图8


    • sort命令: Cypher命令中的排序使用的是order by.

    • 演示:
      1. # 匹配查询标签Employee, 将所有匹配结果按照id值升序排列后返回结果
      2. MATCH (e:Employee) RETURN e.id, e.name, e.salary, e.deptno ORDER BY e.id
      3. # 如果要按照降序排序, 只需要将ORDER BY e.salary改写为ORDER BY e.salary DESC
      4. MATCH (e:Employee) RETURN e.id, e.name, e.salary, e.deptno ORDER BY e.salary DESC

    • 效果:

    3.3 Cypher介绍与使用 - 图9


    • 字符串函数:
      • toUpper()函数
      • toLower()函数
      • substring()函数
      • replace()函数

    • toUpper()函数: 将一个输入字符串转换为大写字母.

    • 演示:
      1. MATCH (e:Employee) RETURN e.id, toUpper(e.name), e.salary, e.deptno

    • 效果:

    3.3 Cypher介绍与使用 - 图10


    • toLower()函数: 讲一个输入字符串转换为小写字母.

    • 演示:
      1. MATCH (e:Employee) RETURN e.id, toLower(e.name), e.salary, e.deptno

    • 效果:

    3.3 Cypher介绍与使用 - 图11


    • substring()函数: 返回一个子字符串.

    • 演示:
      1. # 输入字符串为input_str, 返回从索引start_index开始, 到end_index-1结束的子字符串
      2. substring(input_str, start_index, end_index)
      3. # 示例代码, 返回员工名字的前两个字母
      4. MATCH (e:Employee) RETURN e.id, substring(e.name,0,2), e.salary, e.deptno

    • 效果:

    3.3 Cypher介绍与使用 - 图12


    • replace()函数: 替换掉子字符串.

    • 演示:
      1. # 输入字符串为input_str, 将输入字符串中符合origin_str的部分, 替换成new_str
      2. replace(input_str, origin_str, new_str)
      3. # 示例代码, 将员工名字替换为添加后缀_HelloWorld
      4. MATCH (e:Employee) RETURN e.id, replace(e.name,e.name,e.name + "_HelloWorld"), e.salary, e.deptno

    • 效果:

    3.3 Cypher介绍与使用 - 图13


    • 聚合函数
      • count()函数
      • max()函数
      • min()函数
      • sum()函数
      • avg()函数

    • count()函数: 返回由match命令匹配成功的条数.

    • 演示:
      1. # 返回匹配标签Employee成功的记录个数
      2. MATCH (e:Employee) RETURN count( * )

    • 效果:

    3.3 Cypher介绍与使用 - 图14


    • max()函数: 返回由match命令匹配成功的记录中的最大值.

    • 演示:
      1. # 返回匹配标签Employee成功的记录中, 最高的工资数字
      2. MATCH (e:Employee) RETURN max(e.salary)

    • 效果:

    3.3 Cypher介绍与使用 - 图15


    • min()函数: 返回由match命令匹配成功的记录中的最小值.

    • 演示:
      1. # 返回匹配标签Employee成功的记录中, 最低的工资数字
      2. MATCH (e:Employee) RETURN min(e.salary)

    • 效果:

    3.3 Cypher介绍与使用 - 图16


    • sum()函数: 返回由match命令匹配成功的记录中某字段的全部加和值.

    • 演示:
      1. # 返回匹配标签Employee成功的记录中, 所有员工工资的和
      2. MATCH (e:Employee) RETURN sum(e.salary)

    • 效果:

    3.3 Cypher介绍与使用 - 图17


    • avg()函数: 返回由match命令匹配成功的记录中某字段的平均值.

    • 演示:
      1. # 返回匹配标签Employee成功的记录中, 所有员工工资的平均值
      2. MATCH (e:Employee) RETURN avg(e.salary)

    • 效果:

    3.3 Cypher介绍与使用 - 图18


    • 索引index
      • Neo4j支持在节点或关系属性上的索引, 以提高查询的性能.
      • 可以为具有相同标签名称的所有节点的属性创建索引.

    • 创建索引: 使用create index on来创建索引.

    • 演示:
      1. # 创建节点Employee上面属性id的索引
      2. CREATE INDEX ON:Employee(id)

    • 效果:

    3.3 Cypher介绍与使用 - 图19


    • 删除索引: 使用drop index on来删除索引.

    • 演示:
      1. # 删除节点Employee上面属性id的索引
      2. DROP INDEX ON:Employee(id)

    • 效果:

    3.3 Cypher介绍与使用 - 图20


    • 小节总结:
      • 学习了Cypher的基本概念:
        • Cypher是neo4j图数据的查询语言, 类似于mysql数据库的sql语句, 但是它允许对图形进行富有表现力和有效的查询和更新.

    • Cypher的基本命令和语法:
      • create命令
      • match命令
      • merge命令
      • relationship关系命令
      • where命令
      • delete命令
      • sort命令
      • 字符串函数
      • 聚合函数
      • index索引命令

    • create命令: 创建图数据中的节点.
      • CREATE (e:Employee{id:222, name:’Bob’, salary:6000, deptnp:12})

    • match命令: 匹配(查询)已有数据.
      • MATCH (e:Employee) RETURN e.id, e.name, e.salary, e.deptno

    • merge命令: 若节点存在, 则等效与match命令; 节点不存在, 则等效于create命令.
      • MERGE (e:Employee {id:145, name:’Lucy’, salary:7500, deptno:12})

    • 使用create创建关系: 必须创建有方向性的关系, 否则报错.
      • CREATE (p1:Profile1)-[r:Buy]->(p2:Profile2)

    • 使用merge创建关系: 可以创建有/无方向性的关系.
      • MERGE (p1:Profile1)-[r:miss]-(p2:Profile2)

    • where命令: 类似于SQL中的添加查询条件.
      • MATCH (e:Employee) WHERE e.id=123 RETURN e

    • delete命令: 删除节点/关系及其关联的属性.
      • MATCH (c1:CreditCard)-[r]-(c2:Customer) DELETE c1, r, c2

    • sort命令: Cypher命令中的排序使用的是order by.
      • MATCH (e:Employee) RETURN e.id, e.name, e.salary, e.deptno ORDER BY e.id

    • 字符串函数:
      • toUpper()函数
      • toLower()函数
      • substring()函数
      • replace()函数

    • toUpper()函数: 将一个输入字符串转换为大写字母.
      • MATCH (e:Employee) RETURN e.id, toUpper(e.name), e.salary, e.deptno

    • toLower()函数: 讲一个输入字符串转换为小写字母.
      • MATCH (e:Employee) RETURN e.id, toLower(e.name), e.salary, e.deptno

    • substring()函数: 返回一个子字符串.
      • MATCH (e:Employee) RETURN e.id, substring(e.name,0,2), e.salary, e.deptno

    • replace()函数: 替换掉子字符串.
      • MATCH (e:Employee) RETURN e.id, replace(e.name,e.name,e.name + “_HelloWorld”), e.salary, e.deptno

    • 聚合函数
      • count()函数
      • max()函数
      • min()函数
      • sum()函数
      • avg()函数

    • count()函数: 返回由match命令匹配成功的条数.
      • MATCH (e:Employee) RETURN count( * )

    • max()函数: 返回由match命令匹配成功的记录中的最大值.
      • MATCH (e:Employee) RETURN max(e.salary)

    • min()函数: 返回由match命令匹配成功的记录中的最小值.
      • MATCH (e:Employee) RETURN min(e.salary)

    • sum()函数: 返回由match命令匹配成功的记录中某字段的全部加和值.
      • MATCH (e:Employee) RETURN sum(e.salary)

    • avg()函数: 返回由match命令匹配成功的记录中某字段的平均值.
      • MATCH (e:Employee) RETURN avg(e.salary)

    • 索引index
      • Neo4j支持在节点或关系属性上的索引, 以提高查询的性能.
      • 可以为具有相同标签名称的所有节点的属性创建索引.

    • 创建索引: 使用create index on来创建索引.
      • CREATE INDEX ON:Employee(id)

    • 删除索引: 使用drop index on来删除索引.
      • DROP INDEX ON:Employee(id)