从零开始-知识图谱(2)-cypher语句学习

1、基础概念

图数据库是用来存储图结构的,对于一个图来说,最重要的元素当然是点和边。这两者分别对应着图数据库中最重要的两个实体,节点和关系。除此之外,想要学习图数据库,还必须了解图数据库中的一些基本概念:

实体(entity)
        每个实体有且仅有一个唯一标识(id)
        每个实体可以有零个或多个属性(property)
        实体包括节点,对应图结构中的点,每个节点可以有零个或多个标签(label)
        实体包括关系,对应图结构中的边,每个关系有且仅有一个关系类型(relationship type)
属性(property)
        一个键值对,每个实体可以有零个或多个属性
        属性值既可以是标量类型,也可以是组合类型
标记(token)
        非空字符串,用于表示属性键、标签、关系类型
属性键:在一个节点或关系中,属性键是唯一的
标签:用于对节点分组,每个节点可以有零个或多个标签,有相同标签的节点属于同一组
关系类型:每个关系有且仅有一个关系类型,不同关系可以有相同的关系类型
路径(path):由开始节点到结束节点之间的实体构成的有序集合

2、基本语法

cypher语句的基本语法。和关系数据库一样,也会有关键字,常用关键字如下:

关键字具体作用
MATCH查询
WHERE匹配
RETURN返回
CREATE创建节点和关系
DELETE删除节点和关系
SET修改节点标签,修改节点和关系的属性
REMOVE删除节点标签,删除节点和关系的属性
2.1 变量

变量用于对搜索模式进行命名,以便于在后续查询中进行引用。在一个查询中,变量并不是必须的,如果无需进行引用,那么就不需要有变量。如下面的n就是变量。

MATCH (n)
RETURN n;
2.2 创建节点

现在创建一个Person节点,节点类型是Person,有一个name属性,属性值 Jack

// 创建一个带标签带属性的节点
CREATE (n:Person{name:'Jack'})
RETURN n;

把上面的cypher数据,输入交互界面,然后点击执行,如下:

2.3 查询节点
// 查询所有节点
MATCH (n)
RETURN n;

其他语句,可以一一尝试,如下:

// 查询所有节点的唯一标识
MATCH (n)
RETURN id(n);

// 查询带标签的节点
MATCH (n:Person)
RETURN n;

// 查询带属性的节点
MATCH (n{name:'Jack'})
RETURN n;

// 查询带标签带属性的节点
MATCH (n:Person{name:'Jack'})
RETURN n;
2.4 关系

在 Cypher 中,关系用中括号表示,其中 Variable 是变量,便于后续对关系进行引用

RelationshipType 是关系类型,Key:Value 是关系属性,属性之间用逗号隔开

关系表示两个节点之间的有向连接,其中 StartNode 是开始节点,EndNode 是结束节点。

创建节点,再创建关系

//先创建对应节点
CREATE (n:Person{name:'Alice'})
RETURN n;
CREATE (n:Person{name:'Bob'})
RETURN n;

// 创建不带属性的关系
MATCH (m:Person),(n:Person)
WHERE m.name='Alice' AND n.name='Bob'
CREATE (m)-[r:Friend]->(n)
RETURN r;

执行结果如下:

查询关系,分为三种,-- 表示无向关系,--> 和 <-- 表示有向关系

// 查询不带类型不带属性的无向关系
MATCH (m:Person{name:'Alice'})-[r]-(n:Person{name:'Bob'})
RETURN r;

// 查询带有类型不带属性的无向关系
MATCH (m:Person{name:'Alice'})-[r:Friend]-(n:Person{name:'Bob'})
RETURN properties(r);

// 查询不带类型带有属性的无向关系
MATCH (m:Person{name:'Alice'})-[r{year:100}]-(n:Person{name:'Bob'})
RETURN type(r);

// 查询带有类型带有属性的无向关系
MATCH (m:Person{name:'Alice'})-[r:Friend{year:100}]-(n:Person{name:'Bob'})
RETURN m, r, n;

我们执行第一句,可以看到返回的关系r的各种属性

2.5 删除节点
// 删除所有节点,注意这条语句只能删除没有关系连接的节点
MATCH (n)
DELETE n;

// 删除所有关系
MATCH ()-[r]-()
DELETE r;


//删除特定节点,name为Jack的就节点

MATCH (m:Person{name:'Jack'}) detach delete m;

执行最后一条,可以看到删除节点成功:

2.6 修改节点
// 修改节点属性,有则修改,无则增加
MATCH (n)
WHERE id(n) = 2
SET n.name = "Jack2"
RETURN n;

// 删除节点属性
MATCH (n)
WHERE id(n) = 2
REMOVE n.name
RETURN n;


// 修改节点标签,有则修改,无则增加
MATCH (n)
WHERE id(n) = 2
SET n:Person
RETURN n;

// 删除节点标签
MATCH (n)
WHERE id(n) = 2
REMOVE n:Person
RETURN n;

// 修改关系属性,有则修改,无则增加
MATCH (m)-[r]->(n)
WHERE id(m) = 1 AND id(n) = 2
SET r.year = 10
RETURN r;

// 删除关系属性
MATCH (m)-[r]->(n)
WHERE id(m) = 1 AND id(n) =2
REMOVE r.year
RETURN r;


//根据属性增加其他属性
MATCH (n)
WHERE n.name='Alice'
SET n.age= 28
RETURN n;

执行最后一条,我们可以看到,节点增加了age属性。

2.7 其他高级查询语句

根据路径,或者模糊路径长度,去查询对应节点和属性。

// 匹配任意长度的路径
MATCH (m)-[r*]->(n)
RETURN m, r, n;

// 匹配路径长度等于 3 的路径
MATCH (m)-[r*3]->(n)
RETURN m, r, n;

// 匹配路径长度小于等于 5 的路径
MATCH (m)-[r*..5]->(n)
RETURN m, r, n;

// 匹配路径长度大于等于 2 且小于等于 5 的路径
MATCH (m)-[r*2..5]->(n)
RETURN m, r, n;

// 用路径变量进行引用
MATCH p=(m)-[r*]->(n)
RETURN p;

如有帮助,请帮忙点赞+关注+收藏,非常感谢

如有任何问题,请私聊。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值