热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

数据库系统原理与应用教程(013)——关系代数练习题

数据库系统原理与应用教程(013)——关系代数练习题有以下三个关系:学生(学号,姓名,性别&
数据库系统原理与应用教程(013)—— 关系代数练习题

有以下三个关系:

学生(学号,姓名,性别,年龄,所在系)

课程(课程号,课程名,先行课)

选课(学号,课程号,成绩)

请使用关系代数表示以下查询要求:

1、求选修了课程号为【C2】课程的学生的学号。

π学号(σ课程号='C2'(选课))

当一个查询同时涉及到选择和投影操作,应先选择后投影。

2、求选修了课程号为【C2】课程的学生的学号和姓名。

在这里插入图片描述

或:

在这里插入图片描述

第一种方式先对学生表和选课进行连接运算,得出 C2 课程对应的姓名和其他学生信息。第二种方式先选择后连接,效率更高。

3、求没有选修课程号为【C2】课程的学生学号。

π学号(学生)- π学号(σ课程号='C2'(选课))

先通过投影得到全部学生的学号,然后去掉选修【C2】课程的学生的学号,就得到了没有选修课程号【C2】课程的学生学号。

本题不能写作:

π学号(σ课程号 ≠'C2'(选课))

原因:如果一个学生选修了多门课程,则学号会多次出现,如果选修了 C1 和 C2,则会出现在查询结果中。

如果有下面的学生表:

学号姓名性别年龄班级
S0001张三20物流201
S0002李四21物流201
S0003王五20物流201
S0004赵六18物流202
S0005刘七19物流202

查询年龄不是 20 的学生的学号和姓名,则如下的两种方法都可以使用:

π学号,姓名(学生)- π学号,姓名(σ年龄 = 20(学生))

或:

π学号,姓名(σ年龄 ≠ 20(学生))

4、求既选修了 C2 课程,又选修了 C3 课程的学生的学号。

π学号(σ课程号='C2'(选课))∩ π学号(σ课程号='C3'(选课))

先求出所有选修 C2 课程的学生的学号,再求出所有选修 C3 课程的学生的学号,最后使用交运算得到既选修了 C2 课程,又选修了 C3 课程的学生的学号。

本题不能写作:

π学号(σ课程号='C2'∧ 课程号='C3'(选课))

原因是:同一个属性不可能有两个值。任何一个课程号不可能既是 C2,又是 C3。

如果有下面的学生表:

学号姓名性别年龄班级
S0001张三20物流201
S0002李四21物流201
S0003王五20物流201
S0004赵六18物流202
S0005刘七19物流202

查询年龄是 20 岁的男生的学号和姓名,则如下的两种方法都可以使用:

π学号,姓名(σ性别='男'(学生))∩ π学号,姓名(σ年龄 = 20(学生))

或:

π学号,姓名(σ性别='男'∧ 年龄 = 20(学生))

可以这样理解:逻辑运算与(∧ )两边的条件表达式不能是同一个属性。

5、求选修了课程号为 C2 或 C3 的学生的学号。

π学号(σ课程号='C2'(选课))∪ π学号(σ课程号='C3'(选课))

也可以写作:

π学号(σ课程号='C2'∨ 课程号='C3'(选课))

6、求选修了全部课程的学生的学号。

π学号,课程号(选课)÷ 课程

除运算为包含运算,该题的含义是求某个学生所对应的课程号包含全部课程的课程号。

7、求至少选修了学号为【98002】的学生所学过的所有课程的学生的学号。

π学号,课程号(选课)÷ π课程号(σ学号='98002'(选课))

先对选课表执行选择运算,查询出学号为【98002】的学生所选修的课程,再通过投影运算,得到【98002】学生选修的课程的课程号。最后执行除运算,得到最终的结果。


推荐阅读
  • 本题要求根据给定的正整数数组,通过合理排列各元素顺序,生成并输出所有可能组合中的最小值。例如,对于数组{3, 32, 321},正确的输出应为321323。 ... [详细]
  • 本文介绍了DOM中用于获取节点信息的关键属性,包括父节点、子节点列表、首个及末个子节点、相邻兄弟节点以及节点类型等,同时提供了每个属性的具体使用说明。 ... [详细]
  • PHP 实现实时汇率查询接口
    本文介绍如何使用PHP构建一个实时汇率查询接口,解决网站因数据源限制而无法获取最新汇率的问题。文章将详细讲解从选择合适的数据源到实现接口的具体步骤。 ... [详细]
  • APOC 函数详解:路径查询方法
    本文将深入探讨 APOC 库中的路径查询功能,特别是如何利用 `apoc.path.expand` 函数实现灵活的路径查询,包括动态设置最大路径长度等高级特性。 ... [详细]
  • 成为一名高效的Java架构师不仅需要掌握高级Java编程技巧,还需深入理解JVM的工作原理及其优化方法。此外,对池技术(包括对象池、连接池和线程池)的应用、多线程处理、集合对象的内部机制、以及常用的数据结构和算法的精通也是必不可少的。同时,熟悉Linux操作系统、TCP/IP协议栈、HTTP协议等基础知识,对于构建高效稳定的系统同样重要。 ... [详细]
  • 本文介绍了如何使用PHP进行SQL Server 2010数据库的分页查询,包括设置每页显示的记录数和当前页码,并通过SQL语句实现数据的分页展示。 ... [详细]
  • 本文旨在为初学者提供一个详细的指南,从零开始学习如何使用 ASP.NET MVC5 和 Entity Framework 6 (EF6) 搭建项目。通过逐步指导,帮助读者理解 MVC 架构的核心概念,并掌握基本的操作方法。 ... [详细]
  • 科研创新不仅需要深厚的专业知识,还需要独特的视角和敏锐的问题发现能力。本文将探讨如何通过基础学习、问题导向、文献查阅、网络资源利用及自然观察等方法,有效找到科研创新的切入点。 ... [详细]
  • 本文提供最新的CUUG OCP 071考试题库,包含70道题目,旨在帮助考生更好地准备Oracle Certified Professional (OCP) 考试。 ... [详细]
  • 解析 HTTP 头 'Vary: Accept-Encoding' 的作用与重要性
    本文详细探讨了 'Vary: Accept-Encoding' HTTP 头的作用,即指导缓存系统(如代理服务器和 CDN)根据不同的编码需求存储和提供适当的资源版本,确保不同类型的客户端能够接收到适合自己的内容。 ... [详细]
  • 本文探讨了Lua中元表和元方法的使用,通过具体的代码示例展示了如何利用这些特性来实现类似C语言中的运算符重载功能。 ... [详细]
  • 拖拉切割直线 ... [详细]
  • 四月个人任务:Linux基础操作与网络管理
    本文介绍了两项主要任务:编写一个脚本来检测192.168.1.0/24子网中当前在线的IP地址,以及如何在Linux系统中挂载Windows网络共享目录。通过具体步骤和代码示例,帮助读者理解和掌握相关技能。 ... [详细]
  • 本文面向非计算机专业背景的编程爱好者,介绍如何仅使用基础的C语言知识——二维数组和结构体,无需掌握复杂的数据结构如链表,即可编写一款经典的贪食蛇游戏。通过本教程,您将了解游戏开发的基本原理和实现方法。 ... [详细]
  • Python中调用Java代码的方法与实践
    本文探讨了如何在Python环境中集成并调用Java代码,通过具体的步骤和示例展示了这一过程的技术细节。适合对跨语言编程感兴趣的开发者阅读。 ... [详细]
author-avatar
desn
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有