图数据库查询与操作指南-以Nebula图数据库为例

图数据库操作与查询示例

1. 图空间的创建与克隆

在图数据库中,图空间是存储图数据的容器。以下是创建和克隆图空间的示例:

# 创建图空间
CREATE SPACE test_Nebula(partition_num=15, replica_factor=1, vid_type=fixed_string(30));

# 克隆图空间
CREATE SPACE IF NOT EXISTS monitor_rules_orderby AS monitor_rules;

2. 选择图空间

在进行数据操作前,需要选择一个图空间:

USE test_Nebula;

3. 创建Tag和Edge Type

在图数据库中,Tag代表顶点的属性集合,Edge Type代表边的类型和属性:

CREATE TAG player(name string, age int);
CREATE TAG team(name string);
CREATE EDGE follow(degree int);
CREATE EDGE serve(start_year int, end_year int);

4. 修改点和边

可以对已存在的边添加新的属性:

ALTER EDGE follow ADD (seq int);

5. 插入数据

插入顶点和边的数据:

INSERT VERTEX player(name, age) VALUES "player100":("Tim Duncan", 42);
INSERT VERTEX player(name, age) VALUES "player101":("Tony Parker", 36);
INSERT VERTEX player(name, age) VALUES "player102":("LaMarcus Aldridge", 33);
INSERT VERTEX team(name) VALUES "team203":("Trail Blazers"), "team204":("Spurs");

INSERT EDGE follow(degree) VALUES "player101" -> "player100":(95);
INSERT EDGE follow(degree) VALUES "player101" -> "player102":(90);
INSERT EDGE follow(degree) VALUES "player102" -> "player100":(75);
INSERT EDGE serve(start_year, end_year) VALUES "player101" -> "team204":(1999,2018), "player102" -> "team203":(2006,2015);

6. 查询

go语句

使用go语句可以进行图遍历:

# 从VID为player101的球员开始,沿着follow找到链接的球员
GO FROM "player101" OVER follow YIELD id($$);

# 从VID为player101的球员开始,沿着边follow查找年龄大于或者等于35岁的球员,并返回他们的姓名和年龄
GO FROM "player101" OVER follow WHERE properties($$).age >= 35 YIELD properties($$).name AS Teammate, properties($$).age AS Age;

fetch语句

使用fetch语句可以获取顶点的属性:

FETCH PROP ON player "player100" YIELD properties(vertex);

MATCH语句

MATCH语句用于执行复杂的图查询:

# 查询所有边
MATCH ()-[e]->() RETURN e;

示例查询

以下是一些基于图数据库的查询示例:

示例1:查询所有球队及其关联的球员

MATCH (t:team)<-[:serve]-(p:player)
RETURN t.name AS team_name, collect(p.name) AS players;

示例2:查找所有球员及其所属的球队

MATCH (p:player)-[:serve]->(t:team)
RETURN p.name AS player_name, collect(t.name) AS teams;

示例3:查询特定球员服务过的所有球队

MATCH (p:player {name: '特定球员姓名'})-[:serve*]->(t:team)
RETURN t.name AS team_name;

示例4:查询与特定球员相互关注的其他球员

MATCH (p1:player)-[:follow*2]->(p2:player)
WHERE p1.name = '特定球员姓名'
RETURN p2.name AS followed_player;

示例5:查询所有球员的年龄分布

MATCH (p:player)
RETURN p.age AS age, count(*) AS player_count
ORDER BY age;

示例6:查询服务年限超过10年的球员及其球队

MATCH (p:player)-[:serve]->(t:team)
WHERE (p.end_year - p.start_year) > 10
RETURN p.name AS player_name, t.name AS team_name;

更新与删除数据

除了查询,我们还可以更新和删除图数据库中的数据:

UPDATE VERTEX "player100" SET player.name = "Tim";
UPDATE EDGE ON follow "player101" -> "player100" SET degree = 96;
DELETE VERTEX "player111", "team203";
DELETE EDGE follow "player101" -> "team204";

通过上述操作,我们可以看到图数据库在处理关系数据方面的强大能力。无论是社交网络分析、推荐系统还是其他需要复杂关系查询的场景,图数据库都能提供高效的解决方案。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DZSpace

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值