• Neo4j-Cypher语言语法


    Neo4j-Cypher语言语法

    梦飞扬 264 阅读

    本文是记录Neo4j图数据库中实用的Cypher语言语法。

    Cypher是什么

    “Cypher”是一个描述性的类Sql的图操作语言。相当于关系数据库的Sql,可见其重要性。其语法针对图的特点而设计,非常方便和灵活。

    • Cypher是一个申明式查询语言,适合于开发者和在数据库上做点对点模式(ad-hoc)查询。
    • Cypher通过一系列不同的方法和建立于确定的实践为表达查询而激发的。许多关键字如
    • like和order by是受SQL的启发。正则表达式匹配实现模仿Scala 语言。
      学好Cypher是学好Neo4j的关键,也是核心所在!

    Cypher语法

    Create

    CREATE (erzi:Person {id:‘erzi’}), //erzi是别名
    (baba:Person {id:'baba'}),
    (yeye:Person {id:'yeye',name:'zhangsan'}),
    (nainai:Person {id:'nainai'}),
    (mama:Person {id:'mama'}),
    (bozi:Person {id:'bozi'}),
    // 创建关系
    (erzi)-[:fathor]->(baba),
    (baba)-[:fathor]->(yeye),
    (baba)-[:mother]->(nainai),
    (erzi)-[:mother]->(mama),
    (erzi)-[:girlFrend]->(bozi)

    Match

    match 相当于sql中的select

    MATCH (n:Person) RETURN n limit 25

    等价于:

    Select * from Person limit 25

    Merge

    merge 相当于Match or Create 有则match,无则Create

    MERGE (n:Person { name: 'Ann' }) RETURN n

    下面这两条语句的对比?

    match (n:Person {id:'mama'}),(m:Person {id:'nainai'}) merge (n)-[:poxi]->(m) return n,m

    match (n:Person {id:'mama'}) with n match (m:Person {id:'nainai'}) merge (n)-[:poxi]->(m) return n,m

    Delete 和 Remove

    DELETE和REMOVE主要区别 :
    DELETE操作用于删除节点和relation。
    REMOVE操作用于删除标签label和属性。
    Remove label 等同于drop table
    两个命令都应该与MATCH命令一起使用。

    Match (n:Person {id:'baba'}) remove n.age return n
    MATCH (s:Teacher)-[r:teach]->(d:Student) delete r,s,d //删除与该关系相关的老师和学生及label
    MATCH (n:Test) remove n:Test //删除label

    如何仅仅删除一个relation?

    Match (a:Person),(b:Person) where a.id='erzi' and b.id='bozi' merge (a)-[r:FUQI]->(b) DELETE r

    order by

    order by 同sql

    Limit 和 Skip

    limit :显示多少行
    skip :从最前面开始,跳过多少行

    Union 和 Union all

    Union :把多段Match的return结果 上线组合成一个结果集,会自动去掉重复行;
    Union all :作用同union,但不去重;

    MATCH (n:Person) where n.age>20 RETURN n.id,n.age
    union all
    MATCH (n:Person) where n.id='erzi' RETURN n.id,n.age

    In

    和sql的区别就是使用[]中括号,而不是()括弧号

    MATCH (n:Person) where n.age>20 RETURN n.id,n.age union all MATCH (n:Person) where n.id in ['erzi','bozi','baba'] RETURN n.id,n.age

    Cypher 索引

    create index on:Person(id)
    drop index on:Person(id)

    注意:

    • 创建索引时不需要给索引起名称,只需要设置索引的字段即可
    • 通过该字段的查询都走索引 where in =

    唯一约束 Constraint

    给某个属性设置唯一约束

    create constraint on (n:Person) assert n.id is unique
    drop constraint on (n:Person) assert n.id is unique

    执行计划 explain

    类似sql

    1512897788760

    常用函数

    Neo4j无 group by

    • UPPER 它用于将所有字母更改为大写字母。
    • LOWER 它用于将所有字母改为小写字母。
    • SUBSTRING 它用于获取给定String的子字符串。
    • REPLACE 它用于替换一个字符串的子字符串。
      Match (n:Person) return SUBSTRING(n.id,2,0),n.id

    聚集函数

    • COUNT 它返回由MATCH命令返回的行数。
    • MAX 它从MATCH命令返回的一组行返回最大值。
    • MIN 它返回由MATCH命令返回的一组行的最小值。
    • SUM 它返回由MATCH命令返回的所有行的求和值。
    • AVG 它返回由MATCH命令返回的所有行的平均值。
      Match (n:Person) return count(*)
      Match (n:Person) return avg(n.age) 只包含age不为空的node

    查询最短路径

    查询最短路径的必要性:6层关系理论:任何两个事物之间的关系都不会超过6层。
    关系链路越短,代表这两个节点的关系越密切!

    allShortestPaths [*..n] 用于表示获取n层关系,显示所有的链路关系(Single shortest path)
    shortestPath 显示最短的链路(Single shortest path)

    match p=allshortestPaths((n:Person {id:'mama'})-[*..3]-(b:Person {id:'nainai'})) return pmatch p=shortestPath((n:Person {id:'mama'})-[*..3]-(b:Person {id:'nainai'})) return p -

    本文是记录Neo4j图数据库中实用的Cypher语言语法。

  • 相关阅读:
    类的高内聚低耦合
    面向对象是三个特征:封装、继承、多态
    抽象类和接口
    remoting和webservice
    装箱和拆箱
    数据库
    遍历TextBox控件
    索引类型
    .NET和C#有什么区别
    三层架构
  • 原文地址:https://www.cnblogs.com/jpfss/p/11340590.html
Copyright © 2020-2023  润新知