Neo4j 综合练习作业

作业说明

这个作业涵盖了 Neo4j 的多个重要知识点,包括节点和关系的创建、查询、更新、删除以及高级查询功能。请使用 Cypher 语句完成以下所有题目。

数据准备

首先执行以下语句创建示例数据:
ACTED_IN: 表示出演关系
DIRECTED: 表示导演关系
PRODUCED: 制片关系
FRIENDS_WITH: 朋友关系

// 创建人物节点
CREATE 
(keanu:Person {name: 'Keanu Reeves', born: 1964, nationality: 'Canadian'}),
(laurence:Person {name: 'Laurence Fishburne', born: 1961, nationality: 'American'}),
(carrie:Person {name: 'Carrie-Anne Moss', born: 1967, nationality: 'Canadian'}),
(lana:Person {name: 'Lana Wachowski', born: 1965, nationality: 'American'}),
(lilly:Person {name: 'Lilly Wachowski', born: 1967, nationality: 'American'}),
(joel:Person {name: 'Joel Silver', born: 1952, nationality: 'American'}),
(hugo:Person {name: 'Hugo Weaving', born: 1960, nationality: 'Australian'}),
(emil:Person {name: 'Emil Eifrem', born: 1978, nationality: 'Swedish'}),// 创建电影节点
(matrix:Movie {title: 'The Matrix', released: 1999, tagline: 'Welcome to the Real World'}),
(matrix2:Movie {title: 'The Matrix Reloaded', released: 2003, tagline: 'Free your mind'}),
(matrix3:Movie {title: 'The Matrix Revolutions', released: 2003, tagline: 'Everything that has a beginning has an end'}),
(devils:Movie {title: 'The Devils Advocate', released: 1997, tagline: 'Evil has its winning ways'}),
(few:Movie {title: 'A Few Good Men', released: 1992, tagline: 'In the heart of the nation\'s capital, in a courthouse of the U.S. government, one man will stop at nothing to keep his honor, and one will stop at nothing to find the truth.'}),// 创建关系
(keanu)-[:ACTED_IN {roles: ['Neo']}]->(matrix),
(keanu)-[:ACTED_IN {roles: ['Neo']}]->(matrix2),
(keanu)-[:ACTED_IN {roles: ['Neo']}]->(matrix3),
(keanu)-[:ACTED_IN {roles: ['Kevin Lomax']}]->(devils),
(laurence)-[:ACTED_IN {roles: ['Morpheus']}]->(matrix),
(laurence)-[:ACTED_IN {roles: ['Morpheus']}]->(matrix2),
(laurence)-[:ACTED_IN {roles: ['Morpheus']}]->(matrix3),
(carrie)-[:ACTED_IN {roles: ['Trinity']}]->(matrix),
(carrie)-[:ACTED_IN {roles: ['Trinity']}]->(matrix2),
(carrie)-[:ACTED_IN {roles: ['Trinity']}]->(matrix3),
(hugo)-[:ACTED_IN {roles: ['Agent Smith']}]->(matrix),
(hugo)-[:ACTED_IN {roles: ['Agent Smith']}]->(matrix2),
(hugo)-[:ACTED_IN {roles: ['Agent Smith']}]->(matrix3),
(emil)-[:ACTED_IN {roles: ['Emil']}]->(matrix),
(lana)-[:DIRECTED]->(matrix),
(lana)-[:DIRECTED]->(matrix2),
(lana)-[:DIRECTED]->(matrix3),
(lilly)-[:DIRECTED]->(matrix),
(lilly)-[:DIRECTED]->(matrix2),
(lilly)-[:DIRECTED]->(matrix3),
(joel)-[:PRODUCED]->(matrix),
(joel)-[:PRODUCED]->(matrix2),
(joel)-[:PRODUCED]->(matrix3),// 创建一些朋友关系
(keanu)-[:FRIENDS_WITH]->(emil),
(keanu)-[:FRIENDS_WITH]->(carrie),
(carrie)-[:FRIENDS_WITH]->(laurence),
(emil)-[:FRIENDS_WITH]->(joel);

作业题目

基础查询

  1. 查询所有Person节点,只返回name属性
  2. 查询所有Movie节点,返回title和released属性
  3. 查询出演过"The Matrix"电影的所有演员的姓名
  4. 查询Keanu Reeves出演过的所有电影的标题

条件查询

  1. 查询1990年到2000年之间发布的电影
  2. 查询国籍不是"American"的演员
  3. 查询出演过至少2部电影的演员
  4. 查询既出演过电影又担任过导演的人

关系查询

  1. 查询Keanu Reeves的朋友(直接朋友,不包括朋友的朋友)
  2. 查询与Keanu Reeves有2跳关系的所有人(朋友的朋友)
  3. 查询与"The Matrix"电影相关的所有人(包括演员、导演、制片人)
  4. 查询共同出演过电影的演员对

聚合与排序

  1. 统计每部电影的演员数量,并按数量降序排列
  2. 查询每个演员出演的电影数量,并按数量降序排列
  3. 查询最年轻的5位演员

更新操作

  1. 为Keanu Reeves添加一个新的属性"gender",值为"male"
  2. 将"The Matrix"电影的tagline更新为"The one that started it all"
  3. 删除Emil Eifrem和Joel Silver之间的朋友关系
  4. 为电影"A Few Good Men"添加一个导演节点Rob Reiner(生于1947年,国籍American),并建立导演关系

路径查询

  1. 查找Keanu Reeves到Hugo Weaving的最短路径(任何关系都可以)

高级查询

  1. 使用OPTIONAL MATCH查询所有电影及其导演(如果有的话)
  2. 使用UNION查询所有加拿大籍的演员和美国籍的导演
  3. 使用CASE表达式为演员分类:出生在1960年前的为"Senior",1960-1970年的为"Middle-aged",1970年后的为"Young"
  4. 使用WITH和LIMIT查询出演电影最多的前3位演员

索引与约束

  1. 为Person节点的name属性创建唯一约束
  2. 为Movie节点的title属性创建索引

删除操作

  1. 删除电影"A Few Good Men"及其所有关系
  2. 删除所有没有出演任何电影的人员

作业答案

// 1. 查询所有Person节点,只返回name属性
MATCH (p:Person) RETURN p.name;// 2. 查询所有Movie节点,返回title和released属性
MATCH (m:Movie) RETURN m.title, m.released;// 3. 查询出演过"The Matrix"电影的所有演员的姓名
MATCH (p:Person)-[:ACTED_IN]->(m:Movie {title: 'The Matrix'}) RETURN p.name;// 4. 查询Keanu Reeves出演过的所有电影的标题
MATCH (p:Person {name: 'Keanu Reeves'})-[:ACTED_IN]->(m:Movie) RETURN m.title;// 5. 查询1990年到2000年之间发布的电影
MATCH (m:Movie) WHERE m.released >= 1990 AND m.released <= 2000 RETURN m;// 6. 查询国籍不是"American"的演员
MATCH (p:Person) WHERE p.nationality <> 'American' RETURN p.name;// 7. 查询出演过至少2部电影的演员
MATCH (p:Person)-[:ACTED_IN]->(m:Movie) 
WITH p, count(m) AS movieCount 
WHERE movieCount >= 2 
RETURN p.name, movieCount;// 8. 查询既出演过电影又担任过导演的人
MATCH (p:Person)-[:ACTED_IN]->(:Movie), (p)-[:DIRECTED]->(:Movie) 
RETURN DISTINCT p.name;// 9. 查询Keanu Reeves的朋友
MATCH (p:Person {name: 'Keanu Reeves'})-[:FRIENDS_WITH]->(friend) 
RETURN friend.name;// 10. 查询与Keanu Reeves有2跳关系的所有人
MATCH (p:Person {name: 'Keanu Reeves'})-[:FRIENDS_WITH*2]->(friendOfFriend) 
RETURN DISTINCT friendOfFriend.name;// 11. 查询与"The Matrix"电影相关的所有人
MATCH (p:Person)-[r]->(m:Movie {title: 'The Matrix'}) 
RETURN p.name, type(r) AS role;// 12. 查询共同出演过电影的演员对
MATCH (p1:Person)-[:ACTED_IN]->(m:Movie)<-[:ACTED_IN]-(p2:Person) 
WHERE p1 <> p2 
RETURN p1.name, p2.name, m.title;// 13. 统计每部电影的演员数量
MATCH (m:Movie)<-[:ACTED_IN]-(p:Person) 
RETURN m.title, count(p) AS actorCount 
ORDER BY actorCount DESC;// 14. 查询每个演员出演的电影数量
MATCH (p:Person)-[:ACTED_IN]->(m:Movie) 
RETURN p.name, count(m) AS movieCount 
ORDER BY movieCount DESC;// 15. 查询最年轻的5位演员
MATCH (p:Person) 
RETURN p.name, p.born 
ORDER BY p.born DESC 
LIMIT 5;// 16. 为Keanu Reeves添加gender属性
MATCH (p:Person {name: 'Keanu Reeves'}) 
SET p.gender = 'male' 
RETURN p;// 17. 更新"The Matrix"的tagline
MATCH (m:Movie {title: 'The Matrix'}) 
SET m.tagline = 'The one that started it all' 
RETURN m;// 18. 删除Emil Eifrem和Joel Silver之间的朋友关系
MATCH (e:Person {name: 'Emil Eifrem'})-[r:FRIENDS_WITH]->(j:Person {name: 'Joel Silver'}) 
DELETE r;// 19. 为"A Few Good Men"添加导演
CREATE (rob:Person {name: 'Rob Reiner', born: 1947, nationality: 'American'});
MATCH (m:Movie {title: 'A Few Good Men'}), (p:Person {name: 'Rob Reiner'}) 
CREATE (p)-[:DIRECTED]->(m);// 20. 查找Keanu Reeves到Hugo Weaving的最短路径
MATCH path = shortestPath((k:Person {name: 'Keanu Reeves'})-[*]-(h:Person {name: 'Hugo Weaving'})) 
RETURN path;// 21. 使用OPTIONAL MATCH查询所有电影及其导演
MATCH (m:Movie) 
OPTIONAL MATCH (d:Person)-[:DIRECTED]->(m) 
RETURN m.title, d.name AS director;// 22. 使用UNION查询所有加拿大籍的演员和美国籍的导演
MATCH (p:Person {nationality: 'Canadian'})-[:ACTED_IN]->(:Movie) 
RETURN p.name AS name, 'Actor' AS role
UNION
MATCH (p:Person {nationality: 'American'})-[:DIRECTED]->(:Movie) 
RETURN p.name AS name, 'Director' AS role;// 23. 使用CASE表达式为演员分类
MATCH (p:Person) 
RETURN p.name, 
CASE WHEN p.born < 1960 THEN 'Senior'WHEN p.born >= 1960 AND p.born < 1970 THEN 'Middle-aged'ELSE 'Young'
END AS ageGroup;// 24. 使用WITH和LIMIT查询出演电影最多的前3位演员
MATCH (p:Person)-[:ACTED_IN]->(m:Movie) 
WITH p, count(m) AS movieCount 
ORDER BY movieCount DESC 
LIMIT 3 
RETURN p.name, movieCount;// 25. 为Person节点的name属性创建唯一约束
CREATE CONSTRAINT unique_person_name FOR (p:Person) REQUIRE p.name IS UNIQUE;// 26. 为Movie节点的title属性创建索引
CREATE INDEX movie_title_index FOR (m:Movie) ON (m.title);// 27. 删除电影"A Few Good Men"及其所有关系
MATCH (m:Movie {title: 'A Few Good Men'}) 
DETACH DELETE m;// 28. 删除所有没有出演任何电影的人员
MATCH (p:Person) 
WHERE NOT (p)-[:ACTED_IN]->() 
DELETE p;

这个作业涵盖了 Neo4j 和 Cypher 的大部分核心功能,包括 CRUD 操作、各种查询模式、路径查找、聚合函数、索引和约束等。完成这个作业后,你应该对 Neo4j 的使用有了全面的了解。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/90445.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/90445.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/90445.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于PA算法的FTL引导

一、抽象绑定关系 1. 什么是 AF Block,什么是 NF Block,为什么要将多个 NF Block 绑定为一个 AF Block AF Block(Allocation Flash Block) 和 NF Block(NAND Flash Block) 是在 NAND Flash 存储架构中用于管理数据的基本单位。 AF Block 定义:AF Block 是一组多个 NF…

快速入门Java中的IO操作

以下是 Java 中常用的 IO 知识点总结&#xff1a; 1. 流的分类 按数据流向&#xff1a;输入流&#xff08;读取数据&#xff09;和输出流&#xff08;写入数据&#xff09;。按数据类型&#xff1a;字节流&#xff08;处理二进制数据&#xff0c;以字节为单位&#xff09;和字符…

小程序软装: 组件库开发

本节概述 经过前面小节的学习&#xff0c;我们已经搭建起了小程序的编译构建环境&#xff0c;能够将我们开发的小程序项目编译成为对应的逻辑代码文件 logic.js&#xff0c;页面渲染文件 view.js&#xff0c;样式文件 style.css 和配置文件 config.json 在编译小程序的过程中…

250708-Debian系统安装Edge浏览器并配置最小中文输入法

在 Debian 系统上安装 Microsoft Edge 浏览器可以通过以下几种方式进行。Microsoft 官方提供了 .deb 安装包&#xff0c;适用于 Debian、Ubuntu 及其衍生系统。 A. 如何安装&#xff1f; ✅ 方法一&#xff1a;使用 .deb 安装包&#xff08;推荐&#xff09; 步骤 1&#xff…

docker所占硬盘内存指令

使用下面命令可以查看docker所占的硬盘大小&#xff0c;如&#xff1a;docker system dfdocker system df -v

A1126LLHLX-T Allegro霍尔效应锁存器,5kHz+推挽输出,汽车级转速检测专家!

A1126LLHLX-T&#xff08;Allegro&#xff09;产品解析一、产品定位A1126LLHLX-T是Allegro MicroSystems推出的全极性霍尔效应锁存器&#xff0c;采用超薄SOT-23W封装&#xff08;1mm厚度&#xff09;&#xff0c;专为高可靠性位置检测与转速测量设计&#xff0c;具有低功耗、高…

【C#】File从后往前读取文件指定行数

/// <summary>/// 从后往前读取文件最后行数据/// </summary>/// <param name"filePath"></param>/// <param name"count"></param>/// <returns></returns>public static List<string> ReadFileRe…

暑假算法日记第五天

目标​&#xff1a;刷完灵神专题训练算法题单 阶段目标&#x1f4cc;&#xff1a;【算法题单】滑动窗口与双指针 LeetCode题目:683. K 个关闭的灯泡2067. 等计数子串的数量2524. 子数组的最大频率分数2269. 找到一个数字的 K 美丽值1984. 学生分数的最小差值1461. 检查一个字符…

【05】MFC入门到精通——MFC 为对话框中的控件添加变量 和 数据交换和检验

文章目录四、 为对话框中的控件添加变量五、对话框类的5.1 为编辑框添加变量面步骤中 为对话框添加了几个控件&#xff0c;包括三个静态文本框&#xff0c;三个编辑框&#xff0c;一个按钮控件。 四、 为对话框中的控件添加变量 编辑框中的数据可能会经常变化&#xff0c;有必…

4-Kafka-partition(分区)概念

Kafka Topic 分区详解 &#x1f4cc; 一、分区核心概念 1. 什么是分区&#xff1f; 物理分片&#xff1a;Topic 被划分为多个分区&#xff08;Partition&#xff09;&#xff0c;每个分区是一个有序、不可变的消息序列存储单位&#xff1a;每个分区对应一个物理日志文件&…

论文略读:UniPELT: A Unified Framework for Parameter-Efficient Language Model Tuning

ACL 2021 LoRAPrefix TuningAdapter门控蓝色参数是可训练的参数

【论文阅读】CogView: Mastering Text-to-Image Generation via Transformers

CogView&#xff1a;通过Transformers实现文本到图像的生成简介目标&#xff1a;通用领域中的文本到图像生成一直是一个开放的问题&#xff0c;它既需要强大的生成模型&#xff0c;也需要跨模态的理解。为了解决这个问题&#xff0c;我们提出了CogView&#xff0c;一个具有VQ -…

Typecho与WordPress技术架构深度对比:从LAMP到轻量级设计

文章目录 Typecho vs WordPress:深入比较两大博客系统的优劣与选型指南引言1. 系统概述与技术架构1.1 WordPress架构分析1.2 Typecho架构特点2. 核心功能对比2.1 内容管理能力2.2 主题与模板系统3. 性能与扩展性对比3.1 系统性能基准测试3.2 扩展生态系统4. 安全性与维护成本4…

CSS揭秘:8.连续的图像边框

前置知识&#xff1a;CSS 渐变&#xff0c;5. 条纹背景&#xff0c;border-image&#xff0c;基本的 CSS 动画前言 本文旨在实现图片边框效果&#xff0c;即在特定场景下让图片显示在边框而非背景区域。 一、传统实现方案 正常我们面对这样一个需求时&#xff0c;下意识会想到的…

Linux驱动学习day20(pinctrl子系统驱动大全)

一、Pinctrl作用Pinctrl(Pin Controller)&#xff1a;控制引脚引脚的枚举与命名、引脚复用、引脚配置。Pinctrl驱动一般由芯片原厂的BSP工程师来写&#xff0c;一般驱动工程师只需要在设备树中指明使用哪个引脚&#xff0c;复用为哪个功能、配置为哪些状态。二、Pin Controller…

Debiased All-in-one Image Restoration with Task Uncertainty Regularization

Abstract 一体化图像恢复是一项基础的底层视觉任务&#xff0c;在现实世界中有重要应用。主要挑战在于在单个模型中处理多种退化情况。虽然当前方法主要利用任务先验信息来指导恢复模型&#xff0c;但它们通常采用统一的多任务学习&#xff0c;忽略了不同退化任务在模型优化中的…

逆向 qq 音乐 sign,data, 解密 response 返回的 arraybuffer

解密 arraybuffer python requests 请求得到 arraybuffer&#xff0c;转为 hex 传递给 js res_data sign ctx.call("decrypt", response.content.hex())function decrypt(hex) {const bytes new Uint8Array(hex.length / 2);for (let i 0; i < hex.length; i …

PPT处理控件Aspose.Slides教程:在 C# 中将 ODP 转换为 PPTX

您是否正在寻找可靠的 PowerPoint SDK 来以编程方式开发ODP到PPTX转换器&#xff1f;本篇博文演示了如何使用 C# 将 ODP 转换为 PPTX。ODP是一种基于 XML 的演示文稿文件&#xff0c;可能包含图像、视频、文本等。但是&#xff0c;将打开的文档演示文稿转换为 PowerPoint 格式可…

[746] 使用最小花费爬楼梯

可以从下标0或者1作为起始位置————dp[0] dp[1] 0。一次性可以选择移动1次或者2次&#xff0c;故当下标>2的时候&#xff0c;到达2有可能是从下标0开始或者下标1开始&#xff0c;cost[0] or cost[1]&#xff1b;到达n&#xff0c;有可能是花费cost[n-1]到达&#xff0c…

树莓派vsftpd文件传输服务器的配置方法

在树莓派上安装和配置 vsftpd&#xff08;Very Secure FTP Daemon&#xff09;服务器的步骤如下&#xff1a; 1. 安装 vsftpd 打开终端&#xff0c;执行以下命令安装 vsftpd&#xff1a; sudo apt update sudo apt install vsftpd安装完成后&#xff0c;vsftpd 会自动启动。可以…