neo4j-(1)-Cypher

前提背景

    了解知识图谱,图数据库的概念,并知道neo4j是图数据库的一种 支持事务等CRUD操作;

Neo4j
    1.一个开源
    2.无Schema
    3.Cypher进行类似Sql操作
    4.基于Java开发,运行于JVM之上

CQL

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

常用的Neo4j CQL命令/条款如下(遵循SQL语法类似)

S.No.CQL命令/条用法
1CREATE
创建
创建节点,关系和属性
2MATCH
匹配
检索有关节点,关系和属性数据
3RETURN
返回
返回查询结果
4WHERE
哪里
提供条件过滤检索数据
5DELETE
删除
删除节点和关系
6REMOVE
移除
删除节点和关系的属性
7

ORDER BY

以…排序

排序检索数据
8SET
添加或更新标签

Neo4j CQL 函数:

      以下是常用的Neo4j CQL函数:

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

 CQL数据类型:和JAVA基本一致


create  match return 节点关系创建查询

 

一、节点

1.创建

CREATE (customer:Customer{id:"1001",name:"Abc",dob:"01/10/1982"})
CREATE (credicard:CreditCard{id:"5001",number:"1234567890",cvv:"888",expiredate:"20/17"})

 

解释:

  1.  create 创建节点
  2.  customer credicard 节点名(此处没有实际含义 可以return 查看)
  3. Customer CreditCard  标签名(多个节点可以有相同的标签 归为一组)
  4. { } 标签属性,类JSON格式

2.查询

1.match (n) where n.id='1001' return n
2.match (a:Customer) return a
3.match (a:Customer) return a.name,a.id
4.match (a{name:'Abc'}) return a
5.match (n) return n

解释:

  1. match 和 return必须配合使用;搜索属性key为id 且等于'1001'的所有节点
  2. ( )可以是任何名称的变量名;搜索所有Customer标签分组的节点
  3. 同上,返回节点的指定属性
  4. 同上,搜索所有属性中包含name:'Abc'的节点
  5. 返回所有节点标签的属性

 

二、关系

 

1.创建

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

 解释:

  1. 以上语法为创建关系标准格式   其中node-label-name  relationship-label-name .......只要不重复即可 变量名 ,relationship-name为关系名  最好见名知意;
  2. 节点匹配后可以加where条件筛选 否则 匹配所有nodel-name的节点;
  3. relationship-label-name  后可以增加{} 添加带属性的关系
  4.  

eg:再创建一个Customer 节点和一个 CreditCard节点

match (a:Customer),(b:CreditCard) where a.id='1002' create (a)-[n:DO_SHOPPING_WITH {channel:'支付宝'}]->(b) return n

match (a:Customer),(b:CreditCard) where a.id='1001' and b.id='5001' create (a)-[n:DO_SHOPPING_WITH]->(b) return n

 关系创建完成如下图

 

2.查询

match (n)--(m:CreditCard) return n

   1.查询跟CreditCard有关系的节点  (无向);

 

match (:Customer{name="xxx"})-->(c) return c

 

 2. 查询Customer的有向关系节点 如上图返回的是CreditCard节点(有向)(注意其实变量名不用时可以省略哦)

 

match (:Employee{deptno:20})-[a]->(:Dept{deptno:20}) return a,type(a)

 

  3.获取指定节点间(有向)关系属性 和关系名称;如上图;

 

match (:Customer{id:"1002"})-[r:DO_SHOPPING_WITH{channel:'支付宝'}]->(a) return r,type(r)

   4.获取指定节点(有向)的指定关系的属性  和 类型(名称) 如上图;更直观的如下:就是下面这两个relationship


 

三、更新graph

 

1.创建一个完整的Path

create p =(wanger:Worker:People{name:'wanger'})-[:WORKS_AT]->(neo)<-[:WORKS_AT]-(mazi:Worker:People{name:'mazi'}) return p

 由于Path是由节点和关系构成的,当路径中的关系或节点不存在时,Neo4j会自动创建;如上例的wanger  和 mazi 节点(他们有两个标签组 分别是Worker和People);

 neo节点是什么属性标签都没有的节点 接下来我们要盘他;

2.为节点增加属性(全局id函数  id(n)  可以定位到唯一一个节点 id是全局自动分配的 不是属性 全局唯一 后面说函数)

match (n) where id(n)=84 set n.name='yiche' return n

3. 为节点增加标签

match (n) where id(n)=84 set n:Company return n

 4.为关系增加属性

match (n)<-[r]-(m) where id(n)=84 and m.name='mazi' set r.team='AI-智能产品小组'

 

 


四、跟实体相关的函数 (实体:关系和节点)

所有常用函数 参考:https://blog.csdn.net/qq_33594101/article/details/79467184

 

跟实体相关的函数,主要是获取节点或关系的ID,关系类型,标签和属性等函数。

1.id(节点名/关系名)  ID函数 可以返回节点或者关系的ID

match (:People{name:'wanger'})-[r]->(yiche) return id(r);

2. type(关系名)  type函数 可以返回关系的类型 如WORKS_AT..

match (:People{name:'wanger'})-[r]->(yiche) return type(r);

3.labels(节点) lables函数 查询节点标签

match (:People{name:'wanger'})-[r]->(yiche) return labels(yiche);

4.keys(节点/关系) keys函数 查看节点或关系的属性键

match (a:People{name:'wanger'}) return keys(a)

5.properties(关系名/及诶单名)  properties 函数  查询节点或关系 属性键值

match (a:People{name:'wanger'}) return properties(a)

 五、模式(Scheme)

其实就是对以上所有Cypher用法的总结  一个规范  如 ()标识及节点; [] 标识关系   (n:People{。。。})    (a)-[r]->(b)   (a)-->(b)    类似表达式;如果搞清楚了以上所有用法  这些格式应该都能看懂;说个特殊的:

1.变长路径的模式

从一个节点,通过直接关系,连接到另外一个节点,这个过程叫遍历,经过的节点和关系的组合叫做路径(Path),路径是由节点和关系的有序组合。

  • (a)-->(b):是步长为1的路径,节点a和b之间有关系直接关联;
  • (a)-->()-->(b):是步长为2的路径,从节点a,经过两个关系和一个节点,到达节点b;

Cypher语言支持变长路径的模式,变长路径的表示方式是:[*N..M],N和M表示路径长度的最小值和最大值。

  • (a)-[*2]->(b):表示路径长度为2,起始节点是a,终止节点是b;
  • (a)-[*3..5]->(b):表示路径长度的最小值是3,最大值是5,起始节点是a,终止节点是b;
  • (a)-[*..5]->(b):表示路径长度的最大值是5,起始节点是a,终止节点是b;
  • (a)-[*3..]->(b):表示路径长度的最小值是3,起始节点是a,终止节点是b;
  • (a)-[*]->(b):表示不限制路径长度,起始节点是a,终止节点是b;

2.路径可以指定一个变量  如上 创建一个完整path的案例 p=(a) -[]->(b)

 参考:https://www.cnblogs.com/ljhdo/p/5516793.html

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值