[数据库] GDPU 数据库原理 期末复习

814 0
Honkers 2025-12-12 14:45:53 来自手机 | 显示全部楼层 |阅读模式


👨‍🏫 必看:期末考点

注意:没有填空题和简答题

  • 单选题 40
  • 多选题 20
  • 综合题 40

  • 关系代数
  • SQL代码
  • 候选码
  • 函数依赖
  • 闭包
  • 概念模型
  • 逻辑模型

🍂 学习通

🍁 章节小测一 绪论

🍓 选择题

🍁 章节小测二 关系数据库

🍓 简答题

1. 写关系代数



第7题,上图中漏了条件,请参考下图。

2. 写关系代数


🍓 选择题

🍁 章节小测三 关系数据库标准语言

🍓 选择题

🍓 判断题

🍁 章节小测四 数据库安全性

🍓 选择题

🍁 章节小测五 数据库完整性

🍓 选择题

🍁 章节小测六 关系数据库理论

1. 求函数依赖和候选码 ⭐

2. 求函数依赖和候选码 ⭐

🍓 选择题

第 8 题单选题乱码可忽略!!

🍁 章节小测七 数据库设计

1. ER图和构造3NF关系数据模型 ⭐

构造3NF的正确答案:依托答辩没眼看。。。

🍓 选择题

🍁 章节小测八 数据库编程

🍓 选择题

🍁 章节小测九 关系查询处理和查询优化

🍓 选择题

🍁 章节小测十 数据库恢复

🍓 选择题

🍁 章节小测十一 并发控制

🍓 选择题

🍁 期末小测

✅ 单选题


✅ 多选题

✅ 简答题

1. 患者中医体质数据库写SQL查询

2. 医疗管理系统写SQL查询

3. 图书管理系统写SQL查询1

4. 图书管理系统写SQL查询2

5. 汽车运输信息管理系统画ER图和写关系模式 ⭐

某汽车运输公司建立一个信息管理系统对人员、车辆和车队进行管理,其数据库中有以下内容。

一是“车队”,包括:车队号、车队名、车队联系方式、办公地点、简介等;

二是“车辆”,包括:牌照号、厂家、出厂日期、品牌、型号、颜色、里程数等;

三是“司机”,包括:司机编号、姓名、电话、职位、驾照级别等。

其中:

  • 每个车队可聘用若干司机,但每个司机只能应聘于一个车队,车队聘用司机有聘期;
  • 每个车队可拥有若干车辆,但每辆车只能属于一个车队;
  • 每个司机可使用多辆汽车,每辆汽车可被多个司机使用,司机使用车辆需登记使用日期和公里数。

(1) 根据题意画出ER图(概念模型),并在图上注明实体、属性、联系及联系的类型。

(2) 将E-R图转换为等价的关系模式(逻辑模型),并指出每个关系的主码和外码。

  • 车队 (车队号,车队名,车队联系方式,办公地点,简介)

    • 主码:车队号
    • 外码:无
  • 车辆 (牌照号,厂家,出厂日期,品牌,型号,颜色,里程数,车队号)

    • 主码:牌照号
    • 外码:车队号
  • 司机 (司机编号,姓名,电话,职位,驾照级别,车队号)

    • 主码:司机号
    • 外码:车队号
  • 使用 (司机编号,车牌号,使用日期,公里数)

    • 主码:司机编号,车牌号,使用日期
    • 外码:司机编号,车牌号
6. SPJ数据库写关系代数

7. 求闭包和判断候选码 ⭐

8. 学校教务管理系统写查询SQL

9. 查询平均成绩 ⭐

一、 概述

✅ 单项选择题

  1. 在数据库管理技术的发展过程中,经历了人工管理阶段、文件系统阶段和数据库系统阶段。在这几个阶段中,数据独立性最高的是 A.

    • A.数据库系统
    • B.文件系统
    • C.人工管理阶段
    • D.数据项管理
  2. 数据库系统与文件系统的主要区别是 B.

    • A.数据库系统复杂而文件系统简单
    • B.文件系统不能解决数据冗余和数据独立性问题而数据库系统可以解决
    • C.文件系统只能管理程序文件而数据库系统能够管理各种类型的文件
    • D.文件系统的数据量少,而数据库系统可以管理庞大的数据量
  3. 存储在计算机外部存储介质上的结构化的数据集合,其英文名称是 C.

    • A.Data Dictionary(简写DD)
    • B.Data Base System(简写DBS)
    • C.data base (简写DB)
    • D.data base mangement(简写DBMS)
  4. 数据库的概念模型独立于 A.

    • A.具体的机器和DBMS
    • B.E-R图
    • C.信息世界
    • D.现实世界
  5. 数据库是在计算机系统中按照一定的数据模型组织、存储和应用的 ① B.支持数据库各种操作的软件系统叫 ② B.由计算机硬件、DBMS、数据库、应用程序及用户等组成的一个整体叫做 ③ B.


    • A.文件的集合
      B.数据的集合
      C.命令的集合
      D.程序的集合

    • A.命令系统
      B.数据库管理系统
      C.数据库系统
      D.操作系统

    • A.文件系统
      B.数据库系统
      C.软件系统
      D.数据库管理系统
  6. 数据库的基本特点是 B.

    • A.数据可以共享;数据独立性;数据冗余大,易移植;统一管理和控制
    • B.数据可以共享;数据独立性;数据冗余小,易扩充;统一管理和控制
    • C.数据可以共享;数据互换性;数据冗余小,易扩充;统一管理和控制
    • D.数据非结构化;数据独立性;数据冗余小,易扩充;统一管理和控制
  7. 在数据库中,下列说法 A 是不正确的。

    • A.数据库避免了一切数据的重复
    • B.若系统是完全可以控制的,则系统可确保更新时的一致性
    • C.数据库中的数据可以共享
    • D.数据库减少了数据冗余
  8. B 是存储在计算机内结构化的数据的集合。

    • A.数据库系统
    • B.数据库
    • C.数据库管理系统
    • D.数据结构
  9. 在数据库中存储的是 C。

    • A.数据
    • B.数据模型
    • C.数据及数据间的联系
    • D.信息
  10. 数据库中,数据的物理独立性是指 C。

    • A.数据库与数据库管理系统的相互独立
    • B.用户程序与DBMS的相互独立
    • C.用户的应用程序与存储在磁盘上的数据库中的数据是相互独立
    • D.应用程序与数据库中数据的逻辑结构相互独立
  11. 数据库的特点之一是数据的共享,严格地讲,这里的数据共享指 D。

    • A.同一个应用中的多个程序共享一个数据集合
    • B.多个用户、同一种语言共享数据
    • C.多个用户共享一个数据文件
    • D.多种应用、多种语言、多个用户相互覆盖地使用数据集合
  12. 下述关于数据库系统的正确叙述是 A。

    • A.数据库系统减少了数据冗余
    • B.数据库系统避免了一切数据冗余
    • C.数据库系统中数据的一致性是指数据类型一致
    • D.数据库系统比文件系统能管理更多的数据
  13. 下述关于数据库系统的正确叙述是 B。

    • A.数据库中只存在数据项之间的联系
    • B.数据库的数据项之间和记录之间都存在联系
    • C.数据库的数据项之间无联系,记录之间存在联系
    • D.数据库的数据项之间和记录之间都不存在联系
  14. 数据库技术采用分级方法将数据库的结构划分成多个层次,是为了提高数据库的 ①B 和 ②B。


    • A.数据规范性
      B.逻辑独立性
      C.管理规范性
      D.数据的共享

    • A.数据独立性
      B.物理独立性
      C.逻辑独立性
      D.管理规范性
  15. 在数据库中,产生数据不一致的根本原因是 D。

    • A.数据存储量太大
    • B.没有严格保护数据
    • C.未对数据进行完整性控制
    • D.数据冗余
  16. 数据库管理系统中用于定义和描述数据库逻辑结构的语言称为 A。

    • A.数据描述语言
    • B.数据库子语言
    • C.数据操纵语言
    • D.数据结构语言
  17. 在数据库的三级模式结构中,描述数据库中全体数据的全局逻辑结构和特性的是 D。

    • A.外模式
    • B.内模式
    • C.存储模式
    • D.模式
  18. 数据库的三级模式之间存在的映像关系正确的是 B。

    • A.外模式/内模式
    • B.外模式/模式
    • C.外模式/外模式
    • D.模式/模式
  19. 数据模型是 D。

    • A.文件的集合
    • B.记录的集合
    • C.数据的集合
    • D.记录及其联系的集合
  20. 模式和内模式 A。

    • A.只能有一个
    • B.最多只能有一个
    • C.至少两个
    • D.可以有多个
  21. 在数据库系统中,通常用三级模式来描述数据库,其中, ①A 外模式 是用户与数据库的接口,是应用程序可见到的数据描述, ②B 概念模式 是对数据整体的 ③D 逻辑结构 的描述,而 ④C 内模式 描述了数据的 ⑤F 物理结构。

    • A.外模式
    • B.概念模式
    • C.内模式
    • D.逻辑结构
    • E.层次结构
    • F.物理结构
  22. 不预先定义固定的数据结构,而是以“表”结构来表达数据之间的相互关系,这是 A 数据库。

    • A.关系型
    • B.集中型
    • C.网状型
    • D.层次型
  23. 层次模型不能直接表示 C。

    • A.1:1联系
    • B.1:n联系
    • C.m:n联系
    • D.1:1和1:n联系
  24. 数据库管理系统能实现对数据库中数据的查询、插入、修改和删除,这类功能称为 C。

    • A.数据定义功能
    • B.数据管理功能
    • C.数据操纵功能
    • D.数据控制功能
  25. 现实世界中的事物个体在信息世界中称为 A。

    • A 实体
    • B 实体集
    • C 字段
    • D 记录
  26. 现实世界中,事物的特性在信息世界中称为 C。

    • A 实体
    • B 实体键
    • C 属性
    • D 关系键
  27. 下列实体类型的联系中,属于一对一联系的是 B。

    • A 班级与学生的所属联系
    • B 公司与公司经理的联系
    • C 学生与课程之间的联系
    • D 供应商与工程项目的供货联系
  28. 下列实体类型的联系中,属于一对多联系的是 D。

    • A 学校与校长的联系
    • B 飞机的座位与乘客之间的联系
    • C 学生与课程之间的联系
    • D 车间与工人之间的联系
  29. 下列实体类型的联系中,属于多对多联系的是 A。

    • A 学生与课程之间的联系
    • B 学校与教师之间的联系
    • C 商品条形码与商品之间的联系
    • D 班级与班长之间的联系
  30. 实体联系模型属于 D。

    • A 层次模型
    • B 网状模型
    • C 关系模型
    • D 概念数据模型
  31. 采用二维表格结构表达实体型及实体间联系的数据模型是 C。

    • A层次模型
    • B 网状模型
    • C 关系模型
    • D 实体联系模型
  32. 数据库中全部数据的整体逻辑结构的描述是 A。

    • A模式
    • B内模式
    • C外模式
    • D存储模式
  33. 单个用户使用的数据视图的描述,称为 A。

    • A外模式
    • B 存储模式
    • C内模式
    • D 概念模式
  34. 数据库三级模式体系结构的划分,有利于保持数据库的 B。

    • A 数据安全性
    • B 数据独立性
    • C 数据并发性
    • D 数据完整性
  35. 逻辑数据独立性是指 A。

    • A 概念模式改变,外模式和应用程序不变
    • B 概念模式改变,内模式不变
    • C 内模式改变,概念模式不变
    • D 内模式改变,外模式和应用程序不变
  36. 物理数据独立性是指 C。

    • A 概念模式改变,外模式和应用程序不变
    • B 内模式改变,外模式和应用程序不变
    • C内模式改变,概念模式不变
    • D概念模式改变,内模式不变
  37. 数据库系统由 A 组成。

    • A硬件. 数据库. 软件系统和各类相关人员
    • B 数据库及相应的硬件. 软件系统
    • C数据库及相应的软件系统
    • D数据库及其必备的硬件系统
  38. 在数据库中存储的是 C。

    • A 数据
    • B数据模型
    • C数据以及数据之间的联系
    • D 信息
  39. 数据库的数据的共享是指 D。

    • A同一个应用中的多个程序共享一个数据集合
    • B 多个用户. 同一种语言共享数据
    • C多个用户共享一个数据文件
    • D多种应用. 多种语言. 多个用户相互覆盖地使用数据集合
  40. 下述关于数据库系统的正确叙述是 A。

    • A 数据库系统减少了数据冗余
    • B 数据库系统避免了数据冗余
    • C 数据库系统中数据的一致性是指数据类型一致
    • D 数据库系统比文件系统能管理更多的数据
  41. DBMS对数据库中数据查询、插入、修改和删除操作的功能称为 C。

    • A 数据定义
    • B 数据管理
    • C 数据操作
    • D 数据控制
  42. DBMS是 B。

    • A OS的一部分
    • B OS支持下的系统软件
    • C一种编译程序
    • D一种操作系统
  43. 下面的叙述中, D 不符合数据库系统的特点。

    • A 数据结构化
    • B数据独立性强
    • C数据共享性高
    • D 数据面向应用程序
  44. 要保证数据库物理数据独立性,需要修改的是 B。

    • A.模式
    • B.模式与内模式的映射
    • C.模式与外模式的映射
    • D.内模式
  45. 下列四项中,不属于数据库特点的是 C。

    • A.数据共享
    • B.数据完整性
    • C.数据冗余很高
    • D.数据独立性高
  46. 反映现实世界中实体及实体间联系的信息模型是 D。

    • A.关系模型
    • B.层次模型
    • C.网状模型
    • D.E-R
  47. 子模式DDL用来描述 B。

    • A. 数据库的总体逻辑结构
    • B. 数据库的局部逻辑结构
    • C. 数据库的物理存储结构
    • D. 数据库的概念结构
  48. 在DBS中,DBMS和OS之间的关系是 B。

    • A. 相互调用
    • B. DBMS调用OS
    • C. OS调用DBMS
    • D. 并发运行
  49. 在下面给出的内容中,不属于DBA职责的是 C。

    • A.定义概念模式
    • B.修改模式结构
    • C.编写应用程序
    • D.编写完整性规则

✅ 填空题

  1. DBMS是指 数据库管理系统,它是位于 用户 和 操作系统 之间的一层管理软件。

  2. 数据库管理系统的主要功能有 数据库定义功能、数据库操纵功能、数据库的运行管理以及数据库的建立和维护等四个方面。

  3. 数据库语言包括 数据描述语言、数据操纵语言 两大部分,前者负责描述和定义数据库的各种特性,后者说明对数据进行的各种操作。

  4. 数据独立性又可分为 逻辑数据独立性 和 物理数据独立性。

  5. 数据模型是由 数据结构、数据操作 和 完整性约束 三部分组成。

  6. 数据结构 是对数据库系统的静态特性的描述,数据操作 是对数据库系统的动态特性的描述。

  7. 层次数据模型中,只有一个结点无父结点,它被称为 树根结点。

  8. 数据库体系结构按照 外模式、模式 和 内模式 三级结构进行组织。

  9. 独立于计算机系统,只用于描述某个特定组织所关心的信息结构模型,称为 概念模型;直接面向数据库的逻辑结构的模型称为 数据模型。

  10. 实体之间的联系可抽象为三类,它们是 1:1、1:n 和 m:n。

  11. 数据冗余可能导致的问题有:浪费存储空间及修改麻烦 和 潜在的数据不一致。

  12. 经过处理和加工提炼而用于决策或其他应用活动的数据称为 信息。

  13. 数据库管理技术经历了人工处理阶段、文件系统阶段 和 数据库系统阶段 三个发展阶段。

  14. 在文件系统阶段,数据管理的四个主要缺陷是 数据重复存储、冗余度大、一致性差 和数据之间联系较弱。

  15. 数据库系统提供的数据控制功能主要包括 实体完整性控制、参照完整性控制 和用户完整性控制。

  16. 根据不同的数据模型,数据库管理系统可以分为层次型、网状型、关系型 和面向对象型。

  17. 两个不同实体集的实体联系有 1:1、1:n 和 m:n 三种联系。

  18. 在E-R模型中,用 矩形框 表示实体型;用 菱形框 表示联系类型;用 椭圆形框 表示实体型和联系型的联系。

  19. 用树型结构表示实体类型及实体间联系的数据模型称为 层次数据模型;用有向图结构表示实体类型及实体间联系的数据模型称为 网状数据模型;用二维表格表示实体类型及实体间联系的数据模型称为 关系数据模型。

  20. 关系模型是由一个或多个 关系模式 组成的集合。

  21. 数据库管理系统在数据库的三级模式之间提供了 外模式/模式映像 和 模式/内模式映像 两层映像功能,保证了数据库系统具有较高的数据独立性。

  22. 在数据库的三级模式结构中,单个用户使用的数据视图的描述,称为 外模式;全局数据视图的描述,称为 模式;内视图的描述,称为 内模式。

  23. 数据独立性分成 逻辑 独立性和 物理 独立性两级。

  24. 物理独立性 是指数据库的物理结构改变时,尽量不影响整体逻辑结构、用户的逻辑结构以及应用程序。

  25. 逻辑独立性 是指数据库的整体逻辑结构改变时,尽量不影响用户的逻辑结构以及应用程序。

  26. 数据库系统中,存放三级结构定义的数据库,称为 数据字典。

  27. DBMS中的 并发性控制 可防止多个用户同时对同一个数据库操作时可能对数据库造成的破坏。

  28. DBMS提供的 完整性控制 可以确保数据库中数据的正确性、有效性和一致性。

  29. 数据库系统(DBS)是由 硬件、软件、数据库 和 用户 四部分组成。

  30. DBMS提供的 安全性控制 可确保未经授权的用户存取数据库中数据。

  31. DBS中核心的软件是 数据库管理系统;最重要得用户是 数据库管理员。

  32. DBS中负责数据库物理结构和逻辑结构的定义和修改的人员,称为 数据库管理员;使用宿主语言和DML编写应用程序的人员,称为 应用程序员;DBS中使用应用程序对数据库进行操作的人员,称为 终端用户。

  33. 数据库管理系统(DBMS)通常提供 数据定义、数据操纵、数据控制和数据库维护。

  34. 数据库中对数据的操作可以 记录 为单位,也可以 集合 为单位。

  35. 针对不同的抽象层次和应用目的,分别采用不同的数据库模型,它们是 概念数据模型、结构数据模型 和物理数据模型。

  36. 数据模型的三要素是 数据结构、数据操作 和完整性约束。

  37. 数据库用户共分为四类,分别是终端用户、应用程序员、系统分析员 和数据库管理员。

二、关系数据库

✅ 选择题

  1. 下面的选项不是关系数据库基本特征的是(A)。

    • A. 不同的列应有不同的数据类型
    • B. 不同的列应有不同的列名
    • C. 与行的次序无关
    • D. 与列的次序无关
  2. 一个关系只有一个(D)。

    • A. 候选码
    • B. 外码
    • C. 超码
    • D. 主码
  3. 关系模型中,一个码是(C)。

    • A. 可以由多个任意属性组成
    • B. 至多由一个属性组成
    • C. 由一个或多个属性组成,其值能够唯一标识关系中一个元组
    • D. 以上都不是
  4. 现有如下关系:患者(患者编号,患者姓名,性别,出生日期,所在单位)医疗(患者编号,医生编号,医生姓名,诊断日期,诊断结果)其中,医疗关系中的外码是(A)。

    • A. 患者编号
    • B. 患者姓名
    • C. 患者编号和患者姓名
    • D. 医生编号和患者编号
  5. 关系代数运算是以(C)为基础的运算。

    • A. 关系运算
    • B. 谓词演算
    • C. 集合运算
    • D. 代数运算
  6. 关系数据库管理系统应能实现的专门关系运算包括(B)。

    • A. 排序、索引、统计
    • B. 选择、投影、连接
    • C. 关联、更新、排序
    • D. 显示、打印、制表
  7. 五种基本关系代数运算是(A)。

    • A. ∪ - × σ Π
    • B. ∪ - σ Π
    • C. ∪ ∩ × σ Π
    • D. ∪ ∩ σ Π
  8. 关系数据库中的投影操作是指从关系中(B)。

    • A. 抽出特定记录
    • B. 抽出特定字段
    • C. 建立相应的影像
    • D. 建立相应的图形
  9. 从一个数据库文件中取出满足某个条件的所有记录形成一个新的数据库文件的操作是(C)操作。

    • A. 投影
    • B. 连接
    • C. 选择
    • D. 复制
  10. 关系代数中的连接操作是由(B)操作组合而成。

    • A. 选择和投影
    • B. 选择和笛卡尔积
    • C. 投影、选择、笛卡尔积
    • D. 投影和笛卡尔积
  11. 一般情况下,当对关系R和S进行自然连接时,要求R和S含有一个或者多个共有的(C)。

    • A. 记录
    • B. 行
    • C. 属性
    • D. 元组
  12. 假设有关系R和S,关系代数表达式R-(R-S)表示的是(A)。

    • A. R∩S
    • B. R∪S
    • C. R-S
    • D. R×S

✅ 填空题

  1. 试述关系模型的三个组成部分 关系数据结构、关系操作集合、关系完整性约束。

  2. 关系数据模型中,二维表的列称为 属性,二维表的行称为 记录或元组。

  3. 用户选作元组标识的一个候选码为 主码,其属性不能取 空值。

  4. 关系代数运算中,传统的集合运算有 笛卡尔积,并,交,差。

  5. 关系代数运算中,基本的运算是 笛卡尔积,并,差,选择,投影。

  6. 关系代数运算中,专门的关系运算有 选择,投影,连接。

  7. 关系数据库中基于数学上的两类运算是 关系代数 和 关系演算。

  8. 关系代数中,从两个关系中找出相同元组的运算称为 交 运算。

  9. R ⋈ \Join ⋈ S 表示 自然连接。

  10. 设有学生关系:S(XH,XM,XB,NL,DP)。在这个关系中,XH表示学号,XM 表示姓名,XB表示性别,NL表示年龄,DP 表示系部。查询学生姓名和所在系的投影操作的关系运算式是 Π 2 , 5 ( s ) Π_{2,5}(s) Π2,5​(s) 或 Π X M , D P ( S ) Π_{XM,DP}(S) ΠXM,DP​(S)。

  11. 在“学生-选课-课程”数据库中的3个关系如下:
    学生:S(S#,SNAME,SEX,AGE)
    选课:SC(S#,C#,GRADE)
    课程:C(C#,CNAME,TEACHER)
    查找选修“数据库技术”这门课程学生的学生名和成绩,若用关系代数表达式来表示为 Π S N A M E , G R A D E ( S ⋈ ( S C ⋈ ( σ C N A M E = ′ 数据库技 术 ′ ( C ) ) ) ) Π_{SNAME,GRADE}(S \Join (SC \Join (σ_{CNAME='数据库技术'}(C)))) ΠSNAME,GRADE​(S⋈(SC⋈(σCNAME=′数据库技术′​(C))))

  12. 已知系(系编号,系名称,系主任,电话,地点)和学生(学号,姓名,性别,入学日期,专业,系编号)两个关系,系关系的主码是 系编号,系关系的外码 暂无,学生关系的主码是 学号,学生关系的外码是 系编号。

✅ 简答题

1. 定义并理解下列术语,说明它们之间的联系与区别

  • :域是一组具有相同数据类型的值的集合

    • 例子:假设我们有一个“学生”表,其中有一个“性别”属性。性别的域可以是 {男, 女},即所有可能的性别值。
  • 笛卡尔积:给定一组域D1,D2,…,Dn(这些域中可以有相同的),它们的笛卡尔积定义为所有可能的元组集合,即:D1×D2×…×Dn = { (d1, d2, …, dn) | di ∈ Di, i = 1, 2, …, n }。其中,每个元素 (d1, d2, …, dn) 称为一个n元组(或简称元组),每个值 di 称为一个分量。

    • 例子:假设我们有两个域:

      • 域D1 = {男, 女}(性别)
      • 域D2 = {数学, 英语, 物理}(课程)

      它们的笛卡尔积为:

      1. {(男, 数学), (男, 英语), (男, 物理), (女, 数学), (女, 英语), (女, 物理)}
      复制代码

      这表示所有可能的“性别-课程”组合。

  • 关系:在域D1,D2,…,Dn上的笛卡尔积D1×D2×…×Dn的一个子集称为一个关系,表示为 R(D1, D2, …, Dn)。

    • 例子:在上面的笛卡尔积中,一个实际出现的“选课”关系可能是:
      1. {(男, 数学), (女, 英语), (男, 物理)}
      复制代码
      这表示实际发生的选课情况
  • 元组:关系中的每个元素称为一个元组。

    • 例子:在上面的“选课”关系中,每个选课记录(如 (男, 数学))就是一个元组。
  • 属性:关系也可以看作是一个二维表,表的每一行对应一个元组,每一列对应一个域。由于不同的列可能来自相同的域,为了区分,必须为每一列起一个名字,称为属性。

    • 例子:在“选课”关系中,属性可以是“性别”和“课程”。

  • 主码:如果关系中的某一属性组的值能唯一地标识一个元组,则称该属性组为候选码(Candidate key)。如果一个关系有多个候选码,则选定其中一个作为主码(Primary key)。

    • 例子:在“学生”表中,“学号”可以作为一个主码,因为它唯一标识每个学生。
  • 外部码:设F是基本关系R的一个或一组属性,但不是R的主码,如果F与基本关系S的主码Ks相对应,则称F是基本关系R的外部码(Foreign key),简称外码。基本关系R称为参照关系,基本关系S称为被参照关系。

    • 例子:在“选课”关系中,“学号”可以是一个外部码,它引用“学生”表中的主码“学号”。

  • 关系模式:关系的描述称为关系模式(Relation Schema),它可以形式化地表示为:R(U, D, dom, F),其中R为关系名,U为属性名集合,D为属性域,dom为属性到域的映射,F为属性间的数据依赖关系。

    • 例子:在“学生”表中,关系模式可以表示为:学生(学号, 姓名, 性别, 年龄)。
  • 关系:关系是关系模式在某一时刻的状态或内容。关系模式是静态的、稳定的,而关系是动态的、随时间变化的,因为关系操作会不断更新数据库中的数据。

    • 例子:在某一时刻,“学生”表中的数据可能如下:
      1. {(1, 张三, 男, 20), (2, 李四, 女, 21), (3, 王五, 男, 19)}
      复制代码
  • 关系数据库:关系数据库也有型和值之分。关系数据库的型也称为关系数据库模式,是对关系数据库的描述,包括若干域的定义以及在这些域上定义的关系模式。关系数据库的值是这些关系模式在某一时刻对应的关系的集合,通常称为关系数据库。

    • 型就是数据表的结构定义,值就是表里的数据。

2. 试述关系模型的完整性规则。在参照完整性中,为什么外部码属性的值也可以为空?什么情况下才可以为空?

  • 关系模型的完整性规则是对关系的约束条件,主要包括三类:实体完整性、参照完整性和用户定义的完整性。其中,实体完整性和参照完整性是关系模型必须满足的,被称为关系的两个不变性。

    • 实体完整性规则:若属性A是基本关系R的主属性,则属性A不能取空值。
    • 参照完整性规则:若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码Ks相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须为:或者取空值(F的每个属性值均为空值),或者等于S中某个元组的主码值。
    • 用户定义的完整性:这是针对某一具体关系数据库的约束条件,反映了特定应用所涉及的数据必须满足的语义要求。
  • 在参照完整性中,外部码属性的值可以为空,这意味着该属性的值尚未确定。但前提条件是该外部码属性不是其所在关系的主属性。例如,在“学生”表中,“专业号”是一个外部码,不是主属性,可以为空,表示该学生的专业尚未确定。而在“选修”表中,“课程号”虽然也是一个外部码属性,但它又是主属性,所以不能为空,因为关系模型必须满足实体完整性。

3. 等值连接与自然连接的区别是什么?

  • 连接运算中有两种重要的连接方式:等值连接和自然连接。
    • 等值连接:从关系R与S的笛卡尔积中选取属性值相等的那些元组。
    • 自然连接:是一种特殊的等值连接,它对两个关系中具有相同名称的属性进行匹配,并且结果中要去掉重复的属性。

4. 代数的基本运算有哪些?如何用这些基本运算来表示其他的关系基本运算?

  • 在八种关系代数运算中,并、差、笛卡尔积、投影和选择是五种基本运算。其他三种运算,即交、连接和除,均可以用这五种基本运算来表达。

🥧 实验作业

🍨 求关系代数 ⭐

  1. 设有一个SPJ数据库,包含S、P、J、SPJ 4个关系模式:
  • 供应商表:S(SNO,SNAME,STATUS.CITY)
    由供应商代码SNO、供应商姓名SNAME、供应商状态STATUS、供应商所在城市CITY组成;

  • 零件表:P(PNO,PNAME,COLOR,WEIGHT)
    由零件代码PNO、零件名PNAME、零件颜色COLOR零件重量WEIGHT组成;

  • 工程项目表:J(JNO,JNAME,CITY)
    由工程项目代码JNO、工程项目名JNAME、工程项目坐在城市CITY组成;

  • SPJ(SNO,PNO,JNO,QTY)
    由供应商代码SNO、零件号代码PNO、工程号代码JNO、供应数量QTY组成,表示某供应商供应某种零件给某工程项目的数量为QTY。

表的具体表内容如下图所示。

请用关系代数完成下列查询:

  1. 求供应工程J1零件P1的供应商号码SNO;
    Π S N O ( σ J N O = ′ J 1 ′ ∧ P N O = ′ P 1 ′ ( S P J ) ) \Pi_{SNO}(\sigma_{JNO='J1'\wedge PNO='P1'}(SPJ)) ΠSNO​(σJNO=′J1′∧PNO=′P1′​(SPJ))

  2. 求供应工程J1零件为红色的供应商号码SNO;

    • 在SPJ表中选择出工程号为 J1 的供应商号和零件号PNO集合: Π S N O , P N O ( σ J N O = ′ J 1 ′ ( S P J ) ) \Pi_{SNO,PNO}(\sigma_{JNO='J1'}(SPJ)) ΠSNO,PNO​(σJNO=′J1′​(SPJ))

    • 在零件表§中选择出红色的零件号PNO集合: Π P N O ( σ C O L O R = ′ 红 ′ ( P ) ) \Pi_{PNO}(\sigma _{COLOR='红'}(P)) ΠPNO​(σCOLOR=′红′​(P))

    • 两集合都有零件号(PNO),进行自然连接即可:
      Π S N O ( Π S N O , P N O ( σ J N O = ′ J 1 ′ ( S P J ) ) ⋈ Π P N O ( σ C O L O R = ′ 红 ′ ( P ) ) ) \Pi_{SNO} (\Pi_{SNO,PNO}(\sigma_{JNO='J1'}(SPJ)) \Join \Pi_{PNO}(\sigma _{COLOR='红'}(P)) ) ΠSNO​(ΠSNO,PNO​(σJNO=′J1′​(SPJ))⋈ΠPNO​(σCOLOR=′红′​(P)))

  3. 没有使用天津供应商生产的红色零件的工程号JNO;

    • 在供应商表S中选择出天津的供应商号SNO集合: Π S N O ( σ C I T Y = ′ 天 津 ′ ( S ) ) \Pi_{SNO}(\sigma_{CITY='天津'}(S)) ΠSNO​(σCITY=′天津′​(S))

    • 在零件表P中选择出红色的零件号PNO集合: Π P N O ( σ C O L O R = ′ 红 ′ ( P ) ) \Pi_{PNO}(\sigma _{COLOR='红'}(P)) ΠPNO​(σCOLOR=′红′​(P))

    • 在SPJ表中投影出供应商号SNO、零件号PNO、工程号JNO: Π S N O , P N O , J N O ( S P J ) \Pi_{SNO, PNO, JNO}(SPJ) ΠSNO,PNO,JNO​(SPJ)

    • 使用天津供应商生产的红色零件的工程号JNO集合:
      Π J N O ( Π S N O ( σ C I T Y = ′ 天 津 ′ ( S ) ) ⋈ Π S N O , P N O , J N O ( S P J ) ⋈ Π P N O ( σ C O L O R = ′ 红 ′ ( P ) ) ) \Pi_{JNO}( \Pi_{SNO}(\sigma_{CITY='天津'}(S)) \Join \Pi_{SNO, PNO, JNO}(SPJ) \Join \Pi_{PNO}(\sigma _{COLOR='红'}(P))) ΠJNO​(ΠSNO​(σCITY=′天津′​(S))⋈ΠSNO,PNO,JNO​(SPJ)⋈ΠPNO​(σCOLOR=′红′​(P)))

    • 全部的JNO集合: Π J N O ( J ) \Pi_{JNO}(J) ΠJNO​(J)

    • 全部JNO集合 - 使用了天津红的工程号集合 可得题目所求:

Π J N O ( J ) − Π J N O ( Π S N O ( σ C I T Y = ′ 天 津 ′ ( S ) ) ⋈ Π S N O , P N O , J N O ( S P J ) ⋈ Π P N O ( σ C O L O R = ′ 红 ′ ( P ) ) ) \Pi_{JNO}(J) - \Pi_{JNO}( \Pi_{SNO}(\sigma_{CITY='天津'}(S)) \Join \Pi_{SNO, PNO, JNO}(SPJ) \Join \Pi_{PNO}(\sigma _{COLOR='红'}(P))) ΠJNO​(J)−ΠJNO​(ΠSNO​(σCITY=′天津′​(S))⋈ΠSNO,PNO,JNO​(SPJ)⋈ΠPNO​(σCOLOR=′红′​(P)))

  1. 至少使用了供应商S1所供应的全部零件的工程号JNO;
    👩‍🏫 关系代数除法 参考视频教程

    • 在SPJ表中选择出供应商S1供应的全部零件号PNO: Π P N O ( σ S N O = ′ S 1 ′ ( S P J ) ) \Pi_{PNO}(\sigma_{SNO='S1'}(SPJ)) ΠPNO​(σSNO=′S1′​(SPJ))

    • 在SPJ表中投影出所有的工程号JNO,零件号PNO: Π J N O , P N O ( S P J ) \Pi_{JNO,PNO}(SPJ) ΠJNO,PNO​(SPJ)

    • (工程号JNO,零件号PNO)÷ 全部零件号PNO = 至少使用全部零件的JNO
      Π J N O , P N O ( S P J ) ÷ Π P N O ( σ S N O = ′ S 1 ′ ( S P J ) ) \Pi_{JNO,PNO}(SPJ) \div \Pi_{PNO}(\sigma_{SNO='S1'}(SPJ)) ΠJNO,PNO​(SPJ)÷ΠPNO​(σSNO=′S1′​(SPJ))

  2. 求使用了红色零件带没有使用蓝色零件的工程号;

    • 使用了红色零件的工程号: Π J N O ( σ C O L O R = ′ 红 ′ ( P ) ⋈ S P J ) \Pi_{JNO}(\sigma_{COLOR='红'}(P) \Join SPJ) ΠJNO​(σCOLOR=′红′​(P)⋈SPJ)
    • 使用了蓝色零件的工程号: Π J N O ( σ C O L O R = ′ 蓝 ′ ( P ) ⋈ S P J ) \Pi_{JNO}(\sigma_{COLOR='蓝'}(P) \Join SPJ) ΠJNO​(σCOLOR=′蓝′​(P)⋈SPJ)
    • 用了红但没用蓝的工程号:
      Π J N O ( σ C O L O R = ′ 红 ′ ( P ) ⋈ S P J ) − Π J N O ( σ C O L O R = ′ 蓝 ′ ( P ) ⋈ S P J ) \Pi_{JNO}(\sigma_{COLOR='红'}(P) \Join SPJ) -\Pi_{JNO}(\sigma_{COLOR='蓝'}(P) \Join SPJ) ΠJNO​(σCOLOR=′红′​(P)⋈SPJ)−ΠJNO​(σCOLOR=′蓝′​(P)⋈SPJ)
  3. 求供应了蓝色零件工程项目在北京的供应商的姓名和所在城市。

    • 蓝色零件号: Π P N O ( σ C O L O R = ′ 蓝 ′ ( P ) ) \Pi_{PNO}(\sigma_{COLOR='蓝'}(P)) ΠPNO​(σCOLOR=′蓝′​(P))
    • 北京的工程号: Π J N O ( σ C I T Y = ′ 北 京 ′ ( J ) ) \Pi_{JNO}(\sigma_{CITY='北京'}(J)) ΠJNO​(σCITY=′北京′​(J))
    • 零件号、工程号供应商号集合: S P J SPJ SPJ
    • 供应商的姓名和所在城市: Π S N A M E , C I T Y ( S ) \Pi_{SNAME, CITY}(S) ΠSNAME,CITY​(S)
    • 加上蓝色零件、工程在北京的条件后的供应商姓名和城市:
      Π S N A M E , C I T Y ( S ⋈ Π P N O ( σ C O L O R = ′ 蓝 ′ ( P ) ) ⋈ Π J N O ( σ C I T Y = ′ 北 京 ′ ( J ) ) ⋈ S P J ) \Pi_{SNAME, CITY}(S \Join \Pi_{PNO}(\sigma_{COLOR='蓝'}(P)) \Join \Pi_{JNO}(\sigma_{CITY='北京'}(J)) \Join SPJ) ΠSNAME,CITY​(S⋈ΠPNO​(σCOLOR=′蓝′​(P))⋈ΠJNO​(σCITY=′北京′​(J))⋈SPJ)
  4. 检索至少使用了两种零件的工程号。

    • SPJ表笛卡尔积(4列变成8列,假设有): S P J × S P J SPJ \times SPJ SPJ×SPJ = (SNO,PNO,JNO,QTY, SNO,PNO,JNO,QTY)
    • 工程号相同但是零件号不同(表示同一工程含有不同的零件,即至少使用了两种零件):
      Π J N O ( σ 3 = 7 ∧ 2 ≠ 6 ( S P J × S P J ) ) \Pi_{JNO}(\sigma _{3=7 \land 2 \neq 6} (SPJ \times SPJ)) ΠJNO​(σ3=7∧2=6​(SPJ×SPJ))

单表笛卡尔积示例
Color表:

ColorIDColorName
1红色
2蓝色

C o l o r × C o l o r Color \times Color Color×Color 笛卡尔积结果(因为会出现同名,所以写关系代数时最好用列的序号表示某一列,比如 2 表示 ColorName1):

ColorID1ColorName1ColorID2ColorName2
1红色1红色
1红色2蓝色
2蓝色1红色
2蓝色2蓝色
  1. 检索J1号工程不使用的零件号。
  • 工程J1使用的零件号: Π P N O ( σ J N O = ′ J 1 ′ ( S P J ) ) \Pi_{PNO}(\sigma_{JNO='J1'}(SPJ)) ΠPNO​(σJNO=′J1′​(SPJ))
  • 所有的零件号: Π P N O ( P ) \Pi_{PNO}(P) ΠPNO​(P)
  • 所有 - 使用的 = J1号工程不使用的零件号:
    Π P N O ( P ) − Π P N O ( σ J N O = ′ J 1 ′ ( S P J ) ) \Pi_{PNO}(P) - \Pi_{PNO}(\sigma_{JNO='J1'}(SPJ)) ΠPNO​(P)−ΠPNO​(σJNO=′J1′​(SPJ))

三、SQL

✅ 选择题

  1. SQL语言是(B)的语言,容易学习。

    • A. 过程化
    • B. 非过程化
    • C. 格式化
    • D. 导航式
  2. 在视图上不能完成的操作是(C)。

    • A. 更新视图
    • B. 查询
    • C. 在视图上定义新的表
    • D. 在视图上定义新的视图
  3. SQL语言集数据查询、数据操纵、数据定义和数据控制功能于一体,其中,CREATE、DROP、ALTER语句是实现哪种功能(C)。

    • A. 数据查询
    • B. 数据操纵
    • C. 数据定义
    • D. 数据控制
  4. SQL语言中,删除一个视图的命令是(B)。

    • A. DELETE
    • B. DROP
    • C. CLEAR
    • D. REMOVE
  5. 在SQL语言中的视图VIEW是数据库的(A)。

    • A. 外模式
    • B. 模式
    • C. 内模式
    • D. 存储模式
  6. 下列的SQL语句中,(D)不是数据定义语句。

    • A. CREATE TABLE
    • B. DROP VIEW
    • C. CREATE VIEW
    • D. GRANT
  7. 若要撤销数据库中已经存在的表S,可用(C)。

    • A. DELETE TABLE S
    • B. DELETE S
    • C. DROP TABLE S
    • D. DROP S
  8. 若要在基本表S中增加一列CN(课程名),可用(C)。

    • A. ADD TABLE S(CN CHAR(8))
    • B. ADD TABLE S ALTER(CN CHAR(8))
    • C. ALTER TABLE S ADD(CN CHAR(8))
    • D. ALTER TABLE S (ADD CN CHAR(8))
  9. 学生关系模式 S( S#,Sname,Sex,Age),S的属性分别表示学生的学号、姓名、性别、年龄。要在表S中删除一个属性“年龄”,可选用的SQL语句是(B)。

    • A. DELETE Age from S
    • B. ALTER TABLE S DROP Age
    • C. UPDATE S Age
    • D. ALTER TABLE S ‘Age’
  10. 有关系S(S#,SNAME,SAGE),C(C#,CNAME),SC(S#,C#,GRADE)。其中S#是学生号,SNAME是学生姓名,SAGE是学生年龄, C#是课程号,CNAME是课程名称。要查询选修“ACCESS”课的年龄不小于20的全体学生姓名的SQL语句是 SELECT SNAME FROM S,C,SC WHERE子句。这里的WHERE子句的内容是(A)。

    • A. S.S# = SC.S# and C.C# = SC.C# and SAGE >= 20 and CNAME = 'ACCESS'
    • B. S.S# = SC.S# and C.C# = SC.C# and SAGE in>=20 and CNAME in ‘ACCESS’
    • C. SAGE in>=20 and CNAME in ‘ACCESS’
    • D. SAGE>=20 and CNAME=’ ACCESS’
  11. 设关系数据库中一个表S的结构为S(SN,CN,grade),其中SN为学生名,CN为课程名,二者均为字符型;grade为成绩,数值型,取值范围0-100。若要把“张二的化学成绩80分”插入S中,则可用(D)。

    • A. ADD INTO S VALUES(‘张二’,‘化学’,‘80’)
    • B. INSERT INTO S VALUES(‘张二’,‘化学’,‘80’)
    • C. ADD INTO S VALUES(‘张二’,‘化学’,80)
    • D. INSERT INTO S VALUES('张二','化学',80)
  12. 设关系数据库中一个表S的结构为:S(SN,CN,grade),其中SN为学生名,CN为课程名,二者均为字符型;grade为成绩,数值型,取值范围0-100。若要更正王二的化学成绩为85分,则可用(A)。

    • A. UPDATE S SET grade=85 WHERE SN='王二' AND CN='化学'
    • B. UPDATE S SET grade=’85’ WHERE SN=’王二’ AND CN=’化学’
    • C. UPDATE grade=85 WHERE SN=’王二’ AND CN=’化学’
    • D. UPDATE grade=’85’ WHERE SN=’王二’ AND CN=’化学’
  13. 在SQL语言中,子查询是(D)。

    • A. 返回单表中数据子集的查询语言
    • B. 选取多表中字段子集的查询语句
    • C. 选取单表中字段子集的查询语句
    • D. 嵌入到另一个查询语句之中的查询语句

✅ 填空题

  1. 试述SQL语言的特点。

    • 综合统一:SQL语言集数据定义语言DDL、数据操纵语言DML、数据控制语言DCL的功能于一体。
    • 高度非过程化:用SQL语言进行数据操作,只要提出“做什么”,而无须指明“怎么做”,因此无需了解存取路径,存取路径的选择以及SQL语句的操作过程由系统自动完成。
    • 面向集合的操作方式:SQL语言采用集合操作方式,不仅操作对象、查找结果可以是元组的集合,而且一次插入、删除、更新操作的对象也可以是元组的集合。
    • 以同一种语法结构提供两种使用方式:SQL语言既是自含式语言,又是嵌入式语言。作为自含式语言,它能够独立地用于联机交互的使用方式,也能够嵌入到高级语言程序中,供程序员设计程序时使用。
    • 语言简捷,易学易用。
  2. SQL的中文全称是 结构化查询语言。

  3. 试述SQL的定义功能。

    • SQL的数据定义功能包括定义表、定义视图和定义索引。
    • 表:
      • CREATE TABLE 语句建立基本表
      • ALTER TABLE 语句修改基本表定义
      • DROP TABLE 语句删除基本表
    • 索引
      • CREATE INDEX 语句建立索引
      • DROP INDEX 语句删除索引
    • 视图
      • CREATE VIEW 命令建立视图
      • DROP VIEW 语句删除视图。
  4. SQL语言除了具有数据查询和数据操纵功能之外,还具有 数据定义 和 数据控制 的功能,它是一个综合性的功能强大的语言。

  5. 在关系数据库标准语言SQL中,实现数据检索的语句命令是 SELECT。

  6. 用SQL语句建立第2章习题5中的四个表。

    1. -- 建S表
    2. CREATE TABLE S (
    3. SNO CHAR(3),
    4. SNAME CHAR(10),
    5. STATUS CHAR(2),
    6. CITY CHAR(10)
    7. );
    8. -- 建P表
    9. CREATE TABLE P (
    10. PNO CHAR(3),
    11. PNAME CHAR(10),
    12. COLOR CHAR(4),
    13. WEIGHT INT
    14. );
    15. -- 建J表
    16. CREATE TABLE J (
    17. JNO CHAR(3),
    18. JNAME CHAR(10),
    19. CITY CHAR(10)
    20. );
    21. -- 建SPJ表
    22. CREATE TABLE SPJ (
    23. SNO CHAR(3),
    24. PNO CHAR(3),
    25. JNO CHAR(3),
    26. QTY INT
    27. );
    复制代码
  7. 在SQL语言的结构中,基本表 有对应的物理存储,而 视图 没有对应的物理存储。

  8. 针对上题中建立的四个表试用SQL语言完成第2章习题5中的查询。

    • (1)求供应工程J1零件的供应商号码SNO;
      1. SELECT SNO FROM SPJ WHERE JNO='J1';
      复制代码
    • (2)求供应工程J1零件P1的供应商号码SNO;
      1. SELECT SNO FROM SPJ WHERE JNO='J1' AND PNO='P1';
      复制代码
    • (3)求供应工程J1零件为红色的供应商号码SNO;
      1. SELECT SNO /*这是嵌套查询*/
      2. FROM SPJ
      3. WHERE JNO='J1' AND PNO IN /*找出红色的零件的零件号码PNO */
      4. (
      5. SELECT PNO
      6. FROM P /*从P表中找*/
      7. WHERE COLOR='红'
      8. );
      复制代码
      或者使用连接查询:
      1. SELECT SNO
      2. FROM SPJ, P /*这是两表连接查询*/
      3. WHERE JNO='J1' /*这是复合条件连接查询*/
      4. AND SPJ.PNO=P.PNO AND COLOR='红';
      复制代码
    • (4)求没有使用天津供应商生产的红色零件的工程号JNO;
      1. SELECT JNO
      2. FROM J
      3. WHERE NOT EXISTS (
      4. SELECT SPJ.JNO
      5. FROM SPJ
      6. WHERE SPJ.JNO=J.JNO AND SNO IN
      7. (
      8. SELECT SNO
      9. FROM S
      10. WHERE CITY='天津' AND COLOR='红';
      11. )
      12. );
      复制代码
      或者
      1. SELECT JNO
      2. FROM J
      3. WHERE NOT EXISTS (
      4. SELECT *
      5. FROM SPJ, S, P
      6. WHERE SPJ.JNO=J.JNO AND SPJ.SNO=S.SNO AND SPJ.PNO=P.PNO AND S.CITY='天津' AND P.COLOR='红'
      7. );
      复制代码
    • (5)求至少使用了供应商S1所供应的全部零件的工程号JNO (类似于P113例44)。
  1. SELECT JNO
  2. FROM SPJ
  3. WHERE SNO = 'S1'
  4. -- 按工程编号JNO分组,便于按工程分析S1供应情况
  5. GROUP BY JNO
  6. -- 各工程使用了 S1供应的不同零件数(PNO)== 供应商S1总共供应过的不同零件数
  7. HAVING COUNT(DISTINCT PNO) = (
  8. SELECT COUNT(DISTINCT PNO)
  9. FROM SPJ
  10. WHERE SNO = 'S1'
  11. );
复制代码

🤡超复杂嵌套子查询版

  1. SELECT DISTINCT JNO
  2. FROM SPJ SPJZ
  3. WHERE NOT EXISTS /*这是一个相关子查询 */
  4. (
  5. SELECT * /*父查询和子查询均引用了SPJ表*/
  6. FROM SPJ SPJX /*用别名将父查询与子查询中的SPJ表区分开*/
  7. WHERE SNO='S1' AND NOT EXISTS
  8. (
  9. SELECT *
  10. FROM SPJ SPJY
  11. WHERE SPJY.PNO=SPJX.PNO AND SPJY.JNO=SPJZ.JNO AND SPJY.SNO='S1'
  12. )
  13. );
复制代码
  1. 针对习题3中的四个表试用SQL语言完成以下各项操作。

    • (1) 找出所有供应商的姓名和所在城市。
      1. SELECT SNAME, CITY FROM S;
      复制代码
    • (2) 找出所有零件的名称、颜色、重量。
      1. SELECT PNAME, COLOR, WEIGHT FROM P;
      复制代码
    • (3) 找出使用供应商S1所供应零件的工程号码。
      1. SELECT JNO FROM SPJ WHERE SNO='S1';
      复制代码
    • (4) 找出工程项目J2使用的各种零件的名称及其数量。
      1. SELECT P.PNAME, SPJ.QTY FROM P, SPJ WHERE P.PNO=SPJ.PNO AND SPJ.JNO='J2';
      复制代码
    • (5) 找出上海厂商供应的所有零件号码。
      1. SELECT DISTINCT PNO FROM SPJ
      2. WHERE SNO IN (SELECT SNO FROM S WHERE CITY='上海');
      复制代码
    • (6) 找出使用上海产的零件的工程名称。
      1. SELECT JNAME
      2. FROM J, SPJ, S
      3. WHERE J.JNO=SPJ.JNO AND SPJ.SNO=S.SNO AND S.CITY='上海';
      复制代码
      或者
      1. SELECT JNAME
      2. FROM J
      3. WHERE JNO IN (SELECT JNO
      4. FROM SPJ, S
      5. WHERE SPJ.SNO=S.SNO AND S.CITY='上海');
      复制代码
    • (7) 找出没有使用天津产的零件的工程号码。
      1. SELECT JNO
      2. FROM J
      3. WHERE NOT EXISTS
      4. (SELECT *
      5. FROM SPJ
      6. WHERE SPJ.JNO=J.JNO AND SNO IN
      7. (SELECT SNO FROM S WHERE CITY='天津'));
      复制代码
      或者
      1. SELECT JNO
      2. FROM J
      3. WHERE NOT EXISTS
      4. (SELECT *
      5. FROM SPJ, S
      6. WHERE SPJ.JNO=J.JNO AND SPJ.SNO=S.SNO AND S.CITY='天津');
      复制代码
    • (8) 把全部红色零件的颜色改成蓝色。
      1. UPDATE P SET COLOR='蓝' WHERE COLOR='红';
      复制代码
    • (9) 由S5供给J4的零件P6改为由S3供应,请作必要的修改。
      1. UPDATE SPJ SET SNO='S3' WHERE SNO='S5' AND JNO='J4' AND PNO='P6';
      复制代码
    • (10) 从供应商关系中删除S2的记录,并从供应情况关系中删除相应的记录。
      1. DELETE FROM SPJ WHERE SNO='S2'; DELETE FROM S WHERE SNO='S2';
      2. /*注意删除顺序,应该先从SPJ表中删除供应商S2所供应零件的记录,然后从S表中删除S2。*/
      复制代码
  2. 关系R(A,B,C)和S(A,D,E,F),R和S有相同属性A,若将关系代数表达式: Π R . A , R . B , S . D , S . F ( R ⋈ S ) Π_{R.A,R.B,S.D,S.F}(R\Join S) ΠR.A,R.B,S.D,S.F​(R⋈S)用SQL语言的查询语句表示,则为:

    1. SELECT R.A,R.B,S.D,S.F
    2. FROM R,S
    3. WHERE R.A=S.A;
    复制代码
  3. 什么是基本表?什么是视图?两者的区别和联系是什么?

    • 基本表是本身独立存在的表,在SQL中一个关系就对应一个表。
    • 视图是从一个或几个基本表导出的表。视图本身不独立存储在数据库中,是一个虚表。即数据库中只存放视图的定义而不存放视图对应的数据,这些数据仍存放在导出视图的基本表中。
    • 区别和联系:视图在概念上与基本表等同,用户可以如同基本表那样使用视图,可以在视图上再定义视图。
  4. 视图是从 基本表 中导出的表,数据库中实际存放的是视图的 定义。

  5. 试述视图的优点。

    • 视图能够简化用户的操作。
    • 视图使用户能以多种角度看待同一数据。
    • 视图对重构数据库提供了一定程度的逻辑独立性。
    • 视图能够对机密数据提供安全保护。
  6. 关系数据操作语言(DML)的特点是:操作对象与结果均为关系、操作的 非过程性强、语言一体化并且是建立在数学理论基础之上。

  7. 设有如下关系表R、S、T: R(BH,XM,XB,DWH) S(DWH,DWM) T(BH,XM,XB,DWH)

    • (1) 实现 R ∪ T R∪T R∪T 的SQL语句是 SELECT * FROM R UNION SELECT * FROM T。
    • (2) 实现 σ D W H = ′ 10 0 ′ ( R ) σ_{DWH='100'}(R) σDWH=′100′​(R) 的SQL语句是 SELECT * FROM R WHERE DWH='100'。
    • (3) 实现 Π X M , X B ( R ) Π_{XM,XB}(R) ΠXM,XB​(R) 的SQL语句是 SELECT XM, XB FROM R。
    • (4) 实现 Π X M , D W H ( σ X B = ′ 女 ′ ( R ) ) Π_{XM,DWH}(σ_{XB='女'}(R)) ΠXM,DWH​(σXB=′女′​(R)) 的SQL语句是 SELECT XM, DWH FROM R WHERE XB='女'。
    • (5) 实现 R ⋈ S R \Join S R⋈S的SQL语句是 SELECT R.BH, R.XM, R.XB, R.DWH, S.DWM FROM R, S WHERE R.DWH=S.DWH。
    • (6) 实现 Π X M , X B , D W H ( σ X B = ′ 男 ′ ( R ⋈ S ) ) Π_{XM,XB,DWH}(σ_{XB='男'}(R \Join S)) ΠXM,XB,DWH​(σXB=′男′​(R⋈S)) 的SQL语句是
      SELECT R.XM, R.XB, S.DWH FROM R, S WHERE R.DWH=S.DWH AND R.XB='男'。
  8. 所有的视图是否都可以更新?为什么?

    • 不是。
    • 视图是不实际存储数据的虚表,因此对视图的更新,最终要转换为对基本表的更新。因为有些视图的更新不能唯一地有意义地转换成对相应基本表的更新,所以,并不是所有的视图都是可更新的
    • 如下视图S_G(学生的学号及他的平均成绩
    • 要修改平均成绩,必须修改各科成绩,而我们无法知道哪些课程成绩的变化导致了平均成绩的变化。
  1. CREAT VIEW S_G(Sno,Gavg) AS
  2. SELECT Sno,AVG(Grade) /* 设SC表中“成绩”列 Grade为数字型 */
  3. FROM SC GROUP BY Sno;
复制代码
  1. 设有如下关系表 R:R(NO,NAME,SEX,AGE,CLASS),主码是NO
  • 插入一个记录(25,“李明”,“男”,21,“95031”):INSERT INTO R VALUES(25, "李明", "男", 21, "95031")。
  • 插入“95031”班学号为30,姓名为“郑和”的学生记录:INSERT INTO R(NO, NAME, CLASS) VALUES(30, "郑和", "95031")。
  • 将学号为10的学生姓名改为“王华”:UPDATE R SET NAME="王华" WHERE NO=10。
  • 将所有“95101”班号改为“95091”:UPDATE R SET CLASS="95091" WHERE CLASS="95101"。
  • 删除学号为20的学生记录:DELETE FROM R WHERE NO=20。
  • 删除姓“王”的学生记录:DELETE FROM R WHERE NAME LIKE “王%”。
  1. 哪类视图是可以更新的,哪类视图是不可更新的?各举一例说明。

    • 基本表的行列子集视图一般是可更新的
    • 若视图的属性来自集函数、表达式,则该视图肯定是不可以更新的。
  2. .请为三建工程项目建立一个供应情况的视图,包括供应商代码(SNO)、零件代码(PNO)、供应数量(QTY)。针对该视图完成下列查询:

    • 建视图:
      1. CREATE VIEW V_SPJ AS S
      2. ELECT SNO, PNO, QTY
      3. FROM SPJ WHERE JNO= (SELECT JNO FROM J WHERE JNAME='三建');
      复制代码
    • 对该视图查询:
      • 找出三建工程项目使用的各种零件代码及其数量:SELECT PNO, QTY FROM V_SPJ;
      • S1供应三建工程的零件号和对应的数量:SELECT PNO, QTY FROM V_SPJ WHERE SNO = 'S1';
  3. (扩展题)针对习题3建立的表,用SQL语言完成以下各项操作:

    • (1) 把对表 S 的 INSERT 权限授予用户张勇,并允许他再将此权限授予其他用户。
      GRANT INSERT ON TABLE S TO 张勇 WITH GRANT OPTION;
    • (2) 把查询 SPJ 表和修改 QTY 属性的权限授给用户李天明。
      GRANT SELECT, UPDATE(QTY) ON TABLE SPJ TO 李天明;
  4. (扩展题)在嵌入式SQL中是如何区分SQL语句和主语言语句的?

    • 在SQL语句前加上前缀 EXEC SQL
    • SQL语句的结束标志则随主语言的不同而不同。
    • 例如在PL/1和C中以分号(;)结束,在COBOL中以END-EXEC结束。
  5. (扩展题)在嵌入式SQL中是如何解决数据库工作单元与源程序工作单元之间通信的?

    • SQL通信区SQLCA,用来向主语言传递SQL语句的执行状态信息,使主语言能够根据此信息控制程序流程。
    • 主变量(Host Variable)
      • 用来实现主语言向SQL语句提供参数。
      • 将SQL语句查询数据库的结果交主语言进一步处理
    • 游标(Cursor),解决集合性操作语言与过程性操作语言的不匹配通过游标逐一获取记录,并赋给主变量,交由主语言进一步处理。
  6. (扩展题)在嵌入式SQL中是如何协调SQL语言的集合处理方式和主语言的单记录处理方式的?

    • 用游标来协调这两种不同的处理方式。游标区是系统为用户开设的一个数据缓冲区,存放SQL语句的执行结果,每个游标区都有一个名字。用户可以通过游标逐一获取记录,并赋给主变量,交由主语言进一步处理。

四、数据库安全性

✅ 选择题

  1. 以下(D)不属于实现数据库系统安全性的主要技术和方法。

    • A. 存取控制技术
    • B. 视图技术
    • C. 审计技术
    • D. 出入机房登记和加锁
  2. SQL中的视图提高了数据库系统的(D)。

    • A. 完整性
    • B. 并发控制
    • C. 隔离性
    • D. 安全性
  3. SQL语言的GRANT和REMOVE语句主要是用来维护数据库的(C)。

    • A. 完整性
    • B. 可靠性
    • C. 安全性
    • D. 一致性

✅ 简答题

1. 什么是数据库的安全性?

  • 数据库的安全性是指保护数据库以防止不合法的使用所造成的数据泄露、更改或破坏

2. 数据库安全性和计算机系统的安全性有什么关系?

  • 安全性问题不是数据库系统所独有的,所有计算机系统都有这个问题。
  • 只是在数据库系统中大量数据集中存放,而且为许多最终用户直接共享,从而使安全性问题更为突出。
  • 系统安全保护措施是否有效是数据库系统的主要指标之一。
  • 数据库的安全性和计算机系统的安全性,包括操作系统、网络系统的安全性是紧密联系、相互支持的。

3. 试述实现数据库安全性控制的常用方法和技术。

  • 用户标识和鉴别:该方法由系统提供一定的方式让用户标识自己的名字或身份。每次用户要求进入系统时,由系统进行核对,通过鉴定后才提供系统的使用权。
  • 存取控制:通过用户权限定义和合法权检查确保只有合法权限的用户访问数据库,所有未被授权的人员无法存取数据。例如C2级中的自主存取控制(DAC),B1级中的强制存取控制(MAC)。
  • 视图机制:为不同的用户定义视图,通过视图机制把要保密的数据对无权存取的用户隐藏起来,从而自动地对数据提供一定程度的安全保护。
  • 审计:建立审计日志,把用户对数据库的所有操作自动记录下来放入审计日志中,DBA可以利用审计跟踪的信息,重现导致数据库现有状况的一系列事件,找出非法存取数据的人、时间和内容等。
  • 数据加密:对存储和传输的数据进行加密处理,从而使得不知道解密算法的人无法获知数据的内容。

4. 什么是数据库中的自主存取控制方法和强制存取控制方法?

  • 自主存取控制方法:定义各个用户对不同数据对象的存取权限。当用户对数据库访问时首先检查用户的存取权限。防止不合法用户对数据库的存取。
  • 强制存取控制方法:每一个数据对象被(强制地)标以一定的密级,每一个用户也被(强制地)授予某一个级别的许可证。系统规定只有具有某一许可证级别的用户才能存取某一个密级的数据对象。

解析:自主存取控制中自主的含义是:用户可以将自己拥有的存取权限“自主”地授予别人。即用户具有一定的“自主”权。

5. SQL语言中提供了哪些数据控制(自主存取控制)的语句?请试举几例说明它们的使用方法。


SQL中的自主存取控制是通过GRANT语句和REVOKE语句来实现的。例如:

  • GRANT SELECT, INSERT ON Student TO 王平 WITH GRANT OPTION;
    这条语句将Student表的SELECT和INSERT权限授予了用户王平,后面的WITH GRANT OPTION子句表示用户王平同时也获得了“授权”的权限,即可以把得到的权限继续授予其他用户。
  • REVOKE INSERT ON Student FROM 王平 CASCADE;
    这条语句将Student表的INSERT权限从用户王平处收回,选项CASCADE表示,如果用户王平将Student的INSERT权限又转授给了其他用户,那么这些权限也将从其他用户处收回。

6. 手撕授权 SQL

今有两个关系模式:

  • 职工(职工号,姓名,年龄,职务,工资,部门号)
  • 部门(部门号,名称,经理名,地址,电话号)

请用SQL的GRANT和REVOKE语句(加上视图机制)完成以下授权定义或存取控制功能:

(a) 用户王明对两个表有SELECT权力;

  1. GRANT SELECT ON 职工,部门
  2. TO 王明;
复制代码

(b) 用户李勇对两个表有INSERT和DELETE权力;

  1. GRANT INSERT,DELETE ON 职工,部门
  2. TO 李勇;
复制代码

© 用户刘星对职工表有SELECT权力,对工资字段具有更新权力;

  1. GRANT SELECT,UPDATE(工资) ON 职工
  2. TO 刘星;
复制代码

(d) 用户张新具有修改这两个表的结构的权力;

  1. GRANT ALTER TABLE ON 职工,部门
  2. TO 张新;
复制代码

(e) 用户周平具有对两个表所有权力(读,插,改,删数据),并具有给其他用户授权的权力;

  1. GRANT ALL PRIVILIGES ON 职工,部门 TO 周平 WITH GRANT OPTION;
复制代码

(f) 用户杨兰具有从每个部门职工中SELECT最高工资,最低工资,平均工资的权力,他不能查看每个人的工资。

首先建立一个视图。然后对这个视图定义杨兰的存取权限。

  1. CREATE VIEW 部门工资 AS
  2. SELECT 部门.名称,MAX(工资),MIN(工资),AVG(工资)
  3. FROM 职工,部门
  4. WHERE 职工.部门号 = 部门.部门号
  5. GROUP BY 职工.部门号;
  6. GRANT SELECT ON 部门工资 TO 杨兰;
复制代码

7. 手撕撤销授权 SQL

把习题8中(a)~(g) 的每一种情况,撤销各用户所授予的权力。


(a)

  1. REVOKE SELECT ON 职工,部门
  2. FROM 王明;
复制代码

(b)

  1. REVOKE INSERT,DELETE ON 职工,部门
  2. FROM 李勇;
复制代码

©

  1. REVOKE SELECT,UPDATE ON 职工
  2. FROM 刘星;
复制代码

(d)

  1. REVOKE ALTER TABLE ON 职工,部门
  2. FROM 张新;
复制代码

(e)

  1. REVOKE ALL PRIVILIGES ON 职工,部门
  2. FROM 周平;
复制代码

(f)

  1. REVOKE SELECT ON 部门工资
  2. FROM 杨兰;
  3. DROP VIEW 部门工资;
复制代码

8. 为什么强制存取控制提供了更高级别的数据库安全性?

强制存取控制(MAC)是对数据本身进行密级标记,无论数据如何复制,标记与数据是一个不可分的整体,只有符合密级标记要求的用户才可以操纵数据,从而提供了更高级别的安全性。

9. 什么是数据库的审计功能,为什么要提供审计功能?

  • 审计功能是指DBMS的审计模块在用户对数据库执行操作的同时把所有操作自动记录到系统的审计日志中

  • 因为任何系统的安全保护措施都不是完美无缺的,蓄意盗窃破坏数据的人总可能存在。利用数据库的审计功能,DBA可以根据审计跟踪的信息,重现导致数据库现有状况的一系列事件,找出非法存取数据的人、时间和内容等

五、数据库完整性

✅ 选择题

  1. 完整性检查和控制的防范对象(A C),防止它们进入数据库。安全性控制的防范对象是(B D),防止他们对数据库数据的存取。

    • A. 不合语义的数据
    • B. 非法用户
    • C. 不正确的数据
    • D. 非法操作
  2. 下述SQL语言中的权限,哪一个允许用户定义新关系时,引用其他关系的主码作为外码(C)。

    • A. INSERT
    • B. DELETE
    • C. REFERENCES
    • D. SELECT

✅ 简答题

1. 什么是数据库的完整性?

  • 数据库的完整性是指数据的正确性和相容性。

2. 数据库的完整性概念与数据库的安全性概念有什么区别和联系?

  • 数据的完整性和安全性是两个不同的概念,但是有一定的联系。
  • 前者是为了防止数据库中存在不符合语义的数据,防止错误信息的输入和输出,即所谓垃圾进垃圾出(Garbage In Garbage Out)所造成的无效操作和错误结果
  • 后者是保护数据库防止恶意的破坏和非法的存取。
  • 总结:安全性措施的防范对象是非法用户和非法操作完整性措施的防范对象是不合语义的数据

3. DBMS的完整性控制机制应具有哪些功能?

  • 定义功能,即提供定义完整性约束条件的机制。
  • 检查功能,即检查用户发出的操作请求是否违背了完整性约束条件。
  • 违约反应:如果发现用户的操作请求使数据违背了完整性约束条件,则采取一定的动作来保证数据的完整性。

4. RDBMS在实现参照完整性时需要考虑哪些方面?

  • 外码是否可以接受空值

  • 删除被参照关系的元组时的考虑,这时系统可能采取的作法有三种:

    • (a)级联删除(CASCADES)
    • (b)受限删除(RESTRICTED)
    • (c)置空值删除(NULLIFIES)
  • 在参照关系中插入元组时的问题,这时系统可能采取的作法有:

    • (a)受限插入
    • (b)递归插入
  • 修改关系中主码的问题

    一般是不能用UPDATE语句修改关系主码的。如果需要修改主码值,只能先删除该元组,然后再把具有新主码值的元组插入到关系中。如果允许修改主码,首先要保证主码的唯一性和非空,否则拒绝修改。然后要区分是参照关系还是被参照关系。

5. 手撕完整性约束 SQL

假设有下面两个关系模式

  • 职工(职工号,姓名,年龄,职务,工资,部门号),其中职工号为主码;
  • 部门(部门号,名称,经理名,电话),其中部门号为主码;

用SQL语言定义这两个关系模式,要求在模式中完成以下完整性约束条件的定义:
定义每个模式的主码;定义参照完整性;定义职工年龄不得超过60岁。

  1. CREATE TABLE DEPT (
  2. Deptno NUMBER(2),
  3. Deptname VARCHAR(10),
  4. Manager VARCHAR(10),
  5. PhoneNumber CHAR(12),
  6. CONSTRAINT PK_SC PRIMARY KEY (Deptno)
  7. );
  8. CREATE TABLE EMP (
  9. Empno NUMBER(4),
  10. Ename VARCHAR(10),
  11. Age NUMBER(2) CONSTRAINT C1 CHECK (Age <= 60),
  12. Job VARCHAR(9),
  13. Sal NUMBER(7,2),
  14. Deptno NUMBER(2),
  15. CONSTRAINT FK_DEPTNO FOREIGN KEY (Deptno) REFERENCES DEPT(Deptno)
  16. );
复制代码

6. 关系系统中,当操作违反实体完整性、参照完整性和用户定义的完整性约束条件时,一般是如何分别进行处理的?

  • 对于违反实体完整性和用户定义的完整性的操作一般都采用拒绝执行的方式进行处理。
  • 而对于违反参照完整性的操作,并不都是简单地拒绝执行,有时要根据应用语义执行一些附加的操作,以保证数据库的正确性。具体的处理可以参见上面第5题

✅ 编程题 手撕触发器 SQL

已知学生选课数据库,
学生:学号、姓名、性别、年龄、系名、年级;
课程:课程号、课程名、学分 ;
选修:学号、课程号、成绩。

  1. 创建触发器T_1,功能是当向数据表学生添加记录时,显示学生的信息。

    1. create trigger T_1 on 学生
    2. after insert
    3. as select * from 学生
    4. insert into 学生 values('3001','李四','男','计本10')
    复制代码
  2. 创建触发器T_2,功能是当向数据表班级添加、修改和删除记录时,显示学生的信息。

    1. create trigger T_2 on 学生
    2. after insert,update,delete
    3. as select * from 学生
    复制代码
  3. 创建触发器T_3,功能是当修改班级班号,同步更新学生表的班号。

    1. create trigger T_3 on class
    2. for update
    3. as
    4. BEGIN
    5. UPDATE student
    6. SET class_id=(SELECT class_id FROM inserted)
    7. WHERE class_id IN (SELECT class_id FROM deleted)
    8. UPDATE courseteacher
    9. SET class_id=(SELECT class_id FROM inserted)
    10. WHERE class_id IN (SELECT class_id FROM deleted)
    11. END
    复制代码

测试触发器
注意:此题修改班级号受到外键约束,导致不能修改班级号。因此测试触发器时,需去掉外键。(创建了此触发器,如需其发挥同步更新的作用,也须去掉外键约束。)

  1. update class
  2. set class_id='0501'
  3. where depar_id='0507'
复制代码
  1. 创建触发器T_4,功能是当删除学生表的记录时,同步删除选课表中的选课信息。
  1. create trigger T_4
  2. on 学生
  3. after delete
  4. as
  5. begin
  6. -- 声明变量,存储学号
  7. declare @xh char(10);
  8. -- 从 deleted 伪表中获取删除的学号
  9. select @xh = 学号 from deleted;
  10. -- 删除选课表中对应学号的记录
  11. delete from 选课 where 学号 = @xh;
  12. end;
复制代码

六、关系数据理论

✅选择题

  1. 为了设计出性能较优的关系模式,必须进行规范化,规范化主要的理论依据是(A)。

    • A. 关系规范化理论
    • B. 关系代数理论
    • C. 数理逻辑
    • D. 关系运算理论
  2. 规范化理论是关系数据库进行逻辑设计的理论依据,根据这个理论,关系数据库中的关系必须满足:每一个属性都是(B)。

    • A. 长度不变的
    • B. 不可分解的
    • C. 互相关联的
    • D. 互不相关的
  3. 已知关系模式R(A,B,C,D,E)及其上的函数相关性集合F={A→D,B→C,E→A},该关系模式的候选关键字是(B)。

    • A. AB
    • B. BE
    • C. CD
    • D. DE
  4. 设学生关系S(SNO,SNAME,SSEX,SAGE,SDPART)的主键为SNO,学生选课关系SC(SNO,CNO,SCORE)的主键为SNO和CNO,则关系R(SNO,CNO,SSEX,SAGE,SDPART,SCORE)的主键为SNO和CNO,其满足(A)。

    • A. 1NF
    • B. 2NF
    • C. 3NF
    • D. BCNF
  5. 设有关系模式W(C,P,S,G,T,R),其中各属性的含义是:C表示课程,P表示教师,S表示学生,G表示成绩,T表示时间,R表示教室,根据语义有如下数据依赖集:D={ C→P,(S,C)→G,(T,R)→C,(T,P)→R,(T,S)→R },关系模式W的一个关键字是(D)。

    • A. (S,C)
    • B. (T,R)
    • C. (T,P)
    • D. (T,S)
  6. 关系模式中,满足2NF的模式(B)。

    • A. 可能是1NF
    • B. 必定是1NF
    • C. 必定是3NF
    • D. 必定是BCNF
  7. 关系模式R中的属性全是主属性,则R的最高范式必定是(C)。

    • A. 1NF
    • B. 2NF
    • C. 3NF
    • D. BCNF
  8. 消除了部分函数依赖的1NF的关系模式,必定是(B)。

    • A. 1NF
    • B. 2NF
    • C. 3NF
    • D. BCNF
  9. 如果A ->B,那么属性A和属性B的联系是(B)。

    • A. 一对多
    • B. 多对一
    • C. 多对多
    • D. 以上都不是
  10. 关系模式的候选关键字可以有1个或多个,而主关键字有(C)。

    • A. 多个
    • B. 0个
    • C. 1个
    • D. 1个或多个
  11. 候选关键字的属性可以有(D)。

    • A. 多个
    • B. 0个
    • C. 1个
    • D. 1个或多个
  12. 关系模式的任何属性(A)。

    • A. 不可再分
    • B. 可以再分
    • C. 命名在关系模式上可以不唯一
    • D. 以上都不是
  13. 设有关系模式W(C,P,S,G,T,R),其中各属性的含义是:C表示课程,P表示教师,S表示学生,G表示成绩,T表示时间,R表示教室,根据语义有如下数据依赖集:D={ C→P,(S,C)→G,(T,R)→C,(T,P)→R,(T,S)→R },若将关系模式W分解为三个关系模式W1(C,P),W2(S,C,G),W2(S,T,R,C),则W1的规范化程序最高达到(D)。

    • A. 1NF
    • B. 2NF
    • C. 3NF
    • D. BCNF

  1. 在关系数据库中,任何二元关系模式的最高范式必定是(D)。

    • A. 1NF
    • B. 2NF
    • C. 3NF
    • D. BCNF
  2. 在关系规范式中,分解关系的基本原则是(B)。

    • I.实现无损连接
    • II.分解后的关系相互独立
    • III.保持原有的依赖关系
    • A. Ⅰ和Ⅱ
    • B. Ⅰ和Ⅲ
    • C. Ⅰ
    • D. Ⅱ
  3. 任何一个满足2NF但不满足3NF的关系模式都存在(D)。

    • A. 主属性对键的部分依赖
    • B. 非主属性对键的部分依赖
    • C. 主属性对键的传递依赖
    • D. 非主属性对键的传递依赖
  4. 设数据库关系模式R=(A,B,C,D,E),有下列函数依赖:A→BC,D→E,C→D;下述对R的分解中,哪些分解是R的无损连接分解(B)。

    • I.(A,B,C)(C,D,E)
    • II.(A,B)(A,C,D,E)
    • III.(A,C)(B,C,D,E)
    • IV.(A,B)(C,D,E)
    • A. 只有Ⅳ
    • B. Ⅰ和Ⅱ
    • C. Ⅰ、Ⅱ和Ⅲ
    • D. 都不是
  5. 若关系模式R(U,F)属于3NF,则(C)。

    • A. 一定属于BCNF
    • B. 消除了插入的删除异常
    • C. 仍存在一定的插入和删除异常
    • D. 属于BCNF且消除了插入和删除异常
  6. 下列说法不正确的是(C)。

    • A. 任何一个包含两个属性的关系模式一定满足3NF
    • B. 任何一个包含两个属性的关系模式一定满足BCNF
    • C. 任何一个包含三个属性的关系模式一定满足3NF
    • D. 任何一个关系模式都一定有码
  7. 设关系模式R(A,B,C),F是R上成立的FD集,F={B→C},则分解P={AB,BC}相对于F(A)。

    • A. 是无损联接,也是保持FD的分解
    • B. 是无损联接,也不保持FD的分解
    • C. 不是无损联接,但保持FD的分解
    • D. 既不是无损联接,也不保持FD的分解
  8. 关系数据库规范化是为了解决关系数据库中(A)的问题而引入的。

    • A. 插入、删除和数据冗余
    • B. 提高查询速度
    • C. 减少数据操作的复杂性
    • D. 保证数据的安全性和完整性
  9. 关系的规范化中,各个范式之间的关系是(A)。

    • A. 3 N F ∈ 2 N F ∈ 1 N F 3NF \in 2NF \in 1NF 3NF∈2NF∈1NF (3NF 属于 2NF 属于 1NF)
    • B. 1 N F ∈ 2 N F ∈ 3 N F 1NF \in 2NF \in 3NF 1NF∈2NF∈3NF
    • C. 1 N F = 2 N F = 3 N F 1NF=2NF=3NF 1NF=2NF=3NF
    • D. 1 N F ∈ 2 N F ∈ B C N F ∈ 3 N F 1NF \in 2NF \in BCNF \in 3NF 1NF∈2NF∈BCNF∈3NF
  10. 学生表(id,name,sex,age,depart_id,depart_name),存在函数依赖是id→name,sex,age,depart_id;dept_id→dept_name,其满足(B)。

    • A. 1NF
    • B. 2NF
    • C. 3NF
    • D. BCNF

思路:dept_id→dept_name 和 id→dept_id 形成传递依赖,所以不符合第三范式 3NF。

  1. 设有关系模式R(S,D,M),其函数依赖集:F={S→D,D→M},则关系模式R的规范化程度最高达到(B)。

    • A. 1NF
    • B. 2NF
    • C. 3NF
    • D. BCNF
  2. 设有关系模式R(A,B,C,D),其数据依赖集:F={(A,B)→C,C→D},则关系模式R的规范化程度最高达到(B)。

    • A. 1NF
    • B. 2NF
    • C. 3NF
    • D. BCNF
  3. 下列关于函数依赖的叙述中,哪一条是不正确的(B)。

    • A. 由X→Y,Y→Z,则X→YZ
    • B. 由X→YZ,则X→Y, Y→Z
    • C. 由X→Y,WY→Z,则XW→Z
    • D. 由X→Y,Z∈Y,则X→Z
  4. X→Y,当下列哪一条成立时,称为平凡的函数依赖(B)。

    • A. X ∈ Y X \in Y X∈Y
    • B. Y ∈ X Y \in X Y∈X
    • C. X ∩ Y = ∅ X∩Y = \emptyset X∩Y=∅
    • D. X ∩ Y ≠ ∅ X∩Y≠\emptyset X∩Y=∅
  5. 关系数据库的规范化理论指出:关系数据库中的关系应该满足一定的要求,最起码的要求是达到1NF,即满足(D)。

    • A. 每个非主键属性都完全依赖于主键属性
    • B. 主键属性唯一标识关系中的元组
    • C. 关系中的元组不可重复
    • D. 每个属性都是不可分解的
  6. 根据关系数据库规范化理论,关系数据库中的关系要满足第一范式,部门(部门号,部门名,部门成员,部门总经理)关系中,因哪个属性而使它不满足第一范式(B)。

    • A. 部门总经理
    • B. 部门成员
    • C. 部门名
    • D. 部门号

✅ 简答题

1.依赖和码的定义

函数依赖、部分函数依赖、完全函数依赖、候选码、主码、 外码、全码。

  • 函数依赖:设R (U)是一个关系模式,U是R的属性集合,X和Y是U的子集。对于R (U)的任意一个可能的关系r,如果r中不存在两个元组,它们在X上的属性值相同, 而在Y上的属性值不同, 则称"X函数确定Y"或"Y函数依赖于X",记作X→Y。

    • 函数依赖是最基本的一种数据依赖,也是最重要的一种数据依赖。
    • 函数依赖是属性之间的一种联系,体现在属性值是否相等。由上面的定义可以知道,如果X→Y,则r中任意两个元组,若它们在X上的属性值相同,那么在Y上的属性值一定也相同。
    • 我们要从属性间实际存在的语义来确定他们之间的函数依赖,即函数依赖反映了(描述了)现实世界的一种语义。
    • 函数依赖不是指关系模式R的在某个时刻的关系(值)满足的约束条件,而是指R任何时刻的一切关系均要满足的约束条件。
  • 完全函数依赖:在R(U)中,如果X→Y,并且对于X的任何一个真子集X′,都没有X′→Y,则称Y对X完全函数依赖;

  • 部分函数依赖:若X→Y,但存在X的一个真子集 X′ 可以X′→Y,则称Y对X部分函数依赖;

  • 候选码、主码: 设K为R(U,F)中的属性或属性组合,若K → U则K为R的候选码。若候选码多于一个,则选定其中的一个为主码。

  • 外码:关系模式R中属性或属性组X并非R的码,但X是另一个关系模式的码,则称X是R的外部码也称外码。
    全码:整个属性组是码,称为全码(All-key)。

2.建立一个关于系、学生、班级、学会等诸信息的关系数据库。

描述学生的属性有:学号、姓名、出生年月、系名、班号、宿舍区。
描述班级的属性有:班号、专业名、系名、人数、入校年份。
描述系的属性有:系名、系号、系办公室地点、人数。
描述学会的属性有:学会名、成立年份、地点、人数。

有关语义如下:一个系有若干专业,每个专业每年只招一个班,每个班有若干学生。一个系的学生住在同一宿舍区。每个学生可参加若干学会,每个学会有若干学生。学生参加某学会有一个入会年份。

请给出关系模式,指出是否存在传递函数依赖,对于函数依赖左部是多属性的情况讨论函数依赖是完全函数依赖,还是部分函数依赖。 指出各关系的候选码、外部码,有没有全码存在?

关系模式:

  • 学生 S(S#,SN,SB,DN,C#,SA)
  • 班级 C(C#,CS,DN,CNUM,CDATE)
  • 系 D(D#,DN,DA,DNUM)
  • 学会 P(PN,DATE1,PA,PNUM)
  • 学生–学会 SP(S#,PN,DATE2)

其中

  • S#:学号,SN:姓名,SB:出生年月,SA:宿舍区
  • C#:班号,CS:专业名,CNUM:班级人数,CDATE:入校年份
  • D#:系号,DN:系名,DA:系办公室地点,DNUM:系人数
  • PN:学会名,DATE1:成立年月,PA:地点,PNUM:学会人数,DATE2:入会年份

S中存传递函数依赖:
S#→DN, DN→SA 和 S#→SA

关系候选码外部码全码
SS#C#,DN
CC#或(CS,CDATE)DN
DD#或DN
PPN
SP(S#,PN)S#,PN

3. 下面的结论哪些是正确的,哪些是错误的?对于错误的结论请给出理由或给出一个反例说明之。

(1)任何一个二目关系都是属于3NF的。√
(2)任何一个二目关系都是属于BCNF的。√
(3)若R.A→R.B,R.B→R.C,则R.A→R.C √
(4)若R.A→R.B,R.A→R.C,则R.A→R.(B, C) √
(5)若R.B→R.A,R.C→R.A,则R.(B, C)→R.A √
(6)若R.(B, C)→R.A,则R.B→R.A,R.C→R.A ×

七、数据库设计

✅ 单项选择题

  1. 在数据库设计中,用E-R图来描述信息结构但不涉及信息在计算机中的表示,它是数据库设计的 B 阶段。

    • A.需求分析
    • B.概念设计
    • C.逻辑设计
    • D.物理设计
  2. E-R图是数据库设计的工具之一,它适用于建立数据库的 A。

    • A.概念模型
    • B.逻辑模型
    • C.结构模型
    • D.物理模型
  3. 在关系数据库设计中,设计关系模式是 C 的任务。

    • A.需求分析阶段
    • B.概念设计阶段
    • C.逻辑设计阶段
    • D.物理设计阶段
  4. 数据库物理设计完成后,进入数据库实施阶段,下列各项中不属于实施阶段的工作是 B。

    • A.建立库结构
    • B.扩充功能
    • C.加载数据
    • D.系统调试
  5. 数据库概念设计的E-R方法中,用属性描述实体的特征,属性在E-R图中,用 D 表示。

    • A.矩形
    • B.四边形
    • C.菱形
    • D.椭圆形
  6. 在数据库的概念设计中,最常用的数据模型是 D。

    • A.形象模型
    • B.物理模型
    • C.逻辑模型
    • D.实体联系模型
  7. 在数据库设计中,在概念设计阶段可用E-R方法,其设计出的图称为 D。

    • A.实物示意图
    • B.实用概念图
    • C.实体表示图
    • D.实体联系图
  8. 从E-R模型关系向关系模型转换时,一个M∶N联系转换为关系模型时,该关系模式的关键字是 C。

    • A.M端实体的关键字
    • B.N端实体的关键字
    • C.M端实体关键字与N端实体关键字组合
    • D.重新选取其他属性
  9. 当局部E-R图合并成全局E-R图时可能出现冲突,不属于合并冲突的是 B。

    • A.属性冲突
    • B.语法冲突
    • C.结构冲突
    • D.命名冲突
  10. E-R图中的主要元素是 ① C 和 ② F 和属性。

    • A.记录型
    • B.结点
    • C.实体型
    • D.表
    • E.文件
    • F.联系
    • G.有向边
  11. 数据库逻辑设计的主要任务是 B。

    • A.建立E-R图和说明书
    • B.创建数据库说明
    • C.建立数据流图
    • D.把数据送入数据库
  12. E-R图中的联系可以与 C 实体有关。

    • A.0个
    • B.1个
    • C.1个或多个
    • D.多个
  13. 概念模型独立于 B。

    • A.E-R模型
    • B.硬件设备和DBMS
    • C.操作系统和DBMS
    • D.DBMS
  14. 如果两个实体之间的联系是m∶n,则 A 引入第三个交叉关系。

    • A.需要
    • B.不需要
    • C.可有可无
    • D.合并两个实体
  15. 数据流程图(DFD)是用于描述结构化方法中 C 阶段的工具。

    • A.可行性分析
    • B.详细设计
    • C.需求分析
    • D.程序编码
  16. E-R图是表示概念模型的有效工具之一,E-R图中的菱形框“表示”的是 A。

    • A.联系
    • B.实体
    • C.实体的属性
    • D.联系的属性
  17. 如下图所示的E-R图转换成关系模型,可以转换为 C 关系模式。

    • A.1个
    • B.2个
    • C.3个(人、书、借阅信息)
    • D.4个

✅ 填空题

  1. E-R数据模型一般在数据库设计的概念设计阶段使用。
  2. 数据模型是用来描述数据库的结构和语义的,数据模型有概念数据模型和结构数据模型两类,E-R模型是概念数据模型。
  3. 数据库设计的几个步骤是需求分析,概念设计,逻辑设计,物理设计,编码和调试。
  4. “为哪些表,在哪些字段上,建立什么样的索引”这一设计内容应该属于数据库物理设计阶段。
  5. 在数据库设计中,把数据需求转化成文档,它是各类数据描述的集合,包括数据项、数据结构、数据流、数据存储和数据加工过程等的描述,通常称为数据字典。
  6. 数据库应用系统的设计应该具有对于数据进行收集、存储、加工、抽取和传输等功能,即包括数据设计和处理设计,而数据设计是系统设计的基础和核心。
  7. 数据库实施阶段包括两项重要的工作,一项是数据的载入,另一项是应用程序的编码和调试。
  8. 在设计分E-R图时,由于各个子系统分别有不同的应用,而且往往是由不同的设计人员设计的,所以各个分E-R图之间难免有不一致的地方,这些冲突主要有①属性冲突、②命名冲突和③结构冲突三类。
  9. E-R图向关系模型转化要解决的问题是如何将实体和实体之间的联系转换成关系模式,如何确定这些关系模式的属性和码。
  10. 在数据库领域里,统称使用数据库的各类系统为数据库应用系统。
  11. 数据库逻辑设计中进行模型转换时,首先将概念模型转换为①与特定的DBMS无关的,但为一般的关系模型、网状模型或层次模型所表示的一般模型,然后将②一般模型转换为③特定DBMS支持的逻辑模型。

✅ 应用题

1. 补全 E-R图

某大学实行学分制,学生可根据自己的情况选修课程。每名学生可同时选修多门课程,每门课程可由多位教师讲授;每位教师可讲授多门课程。其不完整的E-R图如下所示。

(1) 指出学生与课程的联系类型。
多对多联系

(2) 指出课程与教师的联系类型图。
多对多联系

(3) 若每名学生有一位教师指导,每个教师指导多名学生,则学生与教师是何联系?
一对多联系

(4) 在原E-R图上补画教师与学生的联系,并完善E-R图。

2. ER图转关系模式 ⭐

将如下所示的E-R图转换为关系模式,菱形框中的属性自己确定。


关系模式如下

  • 单位(单位号(主键),地址,电话)
  • 职工(职工号(主键),姓名,性别,年龄,单位号(外键))

3. ER图和关系模式 ⭐

某医院病房计算机管理中需要如下信息:
科室:科室名,科地址,科电话
病房:病房号,床位号,科室名
医生:姓名,职称,所属科室名,年龄,工作证号
病人:病历号,姓名,性别,诊断,主管医生,病房号
其中,一个科室有多个病房、多个医生,一个病房只能属于一个科室,一个医生只属于一个科室,但可负责多个病人的诊治,一个病人的主管医生只有一个。
完成如下设计:

(1)设计该计算机管理系统的E-R图;

(2)将该E-R图转换为关系模型结构;

  • 科室(科室名,科地址,科电话)
  • 病房(病房号,床位号,科室名)
  • 医生(工作证号,姓名,职称,科室名,年龄)
  • 病人(病历号,姓名,性别,诊断,主管医生,病房号)

(3)指出转换结果中每个关系模式的候选码。

  • 科室的候选码是:科室名;
  • 病房的候选码是:科室名+病房号;
  • 医生的候选码是:工作证号;
  • 病人的候选码是:病历号。

八、数据库编程

已知学生选课数据库写各种查询

学生(student): 学号、姓名、性别、年龄、系名、年级;
课程(class): 课程号、课程名、学分 ;
选修(s_c):学号、课程号、成绩。

1. 设计函数fn_avggrade来求s_c表中学生的平均成绩。

  1. -- 使用teaching数据库
  2. use teaching
  3. go
  4. -- 创建名为fn_avggrade的函数,返回值类型为int(整数型)
  5. CREATE FUNCTION fn_avggrade()
  6. RETURNS int
  7. AS
  8. BEGIN
  9. -- 函数的功能是返回s_c表中成绩(grade)列的平均值
  10. return(select avg(grade) from s_c)
  11. END
  12. go
  13. -- 调用函数fn_avggrade并查询其返回结果
  14. select dbo.fn_avggrade()
  15. go
复制代码

2. 设计函数fn_grade来以表的形式显示成绩高于平均成绩的学生的姓名和成绩,平均成绩用fn_avggrade来调用。

  1. -- 使用teaching数据库
  2. use teaching
  3. go
  4. -- 创建名为fn_grade的函数,返回值类型为表(table)
  5. CREATE FUNCTION fn_grade()
  6. RETURNS table
  7. AS
  8. -- 返回一个查询结果集,该结果集是从student表和s_c表进行内连接查询得到的
  9. -- 筛选条件是成绩(grade)大于调用fn_avggrade函数获取的平均成绩的学生姓名(sname)和成绩(grade)信息
  10. return(select sname, grade from student join s_c on student.sno = s_c.sno
  11. where grade > dbo.fn_avggrade())
  12. go
  13. -- 查询并显示函数fn_grade返回的结果表中的所有数据
  14. select * from dbo.fn_grade()
  15. go
复制代码

3. 设计函数fn_stu指定课程,将该课程选修的学生的姓名,课程名称以一个表变量显示。

  1. -- 创建名为fn_stu的函数,接受一个课程名称参数(@cname),类型为char(30)
  2. CREATE FUNCTION fn_stu (@cname char(30))
  3. -- 定义函数返回的表变量@stu_info,包含姓名(char(10)类型)和课程(char(30)类型)两列
  4. RETURNS @stu_info TABLE (姓名 char(10), 课程 char(30))
  5. BEGIN
  6. -- 向表变量@stu_info中插入数据,通过多表连接(student、s_c、course表)查询
  7. -- 筛选出指定课程名称(@cname)对应的学生姓名和课程名称,并去除重复记录后插入
  8. insert @stu_info
  9. select distinct s.sname, c.cname
  10. from student as s
  11. join s_c as sc on s.sno = sc.sno
  12. join course as c on c.cno = sc.cno
  13. where c.cname = @cname
  14. -- 返回填充好数据的表变量@stu_info
  15. RETURN
  16. END
  17. Go
  18. -- 调用函数fn_stu,传入课程名称'大学英语',并查询返回的结果表中的所有数据
  19. select * from fn_stu ('大学英语')
  20. go
复制代码

4. 从student1表中,查询学号为‘9704’学生的成绩状况,若全部90分以上显示“该学生成绩全部优秀!”若全部60分以上显示“该学生成绩全部合格!”否则显示“该学生有的成绩不合格!”并且要显示最低分。(使用if,自行换为student操作)

  1. -- 声明一个变量@verygood,用于存储成绩,类型为整数(int)
  2. Declare @verygood int
  3. -- 查询student1表中学号为'9704'的学生的最低成绩(min(mark)),并赋值给@verygood变量
  4. Select @verygood = (select min(mark) From student1 Where sno = '9704')
  5. -- 如果最低成绩大于等于90分,输出相应提示信息,表示成绩全部优秀
  6. If @verygood >= 90
  7. Print '该学生成绩全部优秀!'
  8. -- 否则,继续判断,如果最低成绩大于等于60分,输出相应提示信息,表示成绩全部合格
  9. else
  10. If @verygood >= 60
  11. Print '该学生成绩全部合格!'
  12. -- 如果最低成绩小于60分,输出相应提示信息,表示存在不及格科目
  13. else
  14. print '存在不及格科目!'
  15. -- 查询并显示最低分(@verygood变量的值),列别名为'最低分'
  16. Select @verygood as 最低分
  17. -- 输出提示信息及最低分的字符形式,将整数型的@verygood转换为字符型(char(4))进行拼接输出
  18. Print '最低分:' + cast(@verygood as char(4))
复制代码

5. 实现1—100之间的奇数和。(使用书本上以外的方法)

  1. -- 声明两个变量,@a用于循环计数,初始值设为1,@sum用于累加奇数和,初始值设为0
  2. declare @a int, @sum int
  3. set @a = 1
  4. set @sum = 0
  5. -- 当@a小于等于100时,执行循环体内容
  6. while @a <= 100
  7. begin
  8. -- 将当前@a的值累加到@sum中,实现求和
  9. set @sum = @sum + @a
  10. -- @a每次增加2,实现只取奇数进行累加
  11. set @a = @a + 2
  12. end
  13. -- 输出提示信息及计算得到的1 - 100之间奇数和的字符形式(转换为char(4)类型进行拼接输出)
  14. print '1-100奇数之和为:' + cast(@sum as char(4))
复制代码

6. 在student1表中,学号为‘9705’学生的平均成绩如果小于75,则将该学生的每门成绩以5%的比例提高,当平均成绩大于等于75或者所有课程都及格时,终止操作。(使用while,自行换为student操作)

  1. -- 当student1表中学号为'9705'的学生平均成绩(avg(mark))小于75时,执行循环体内容
  2. While (select avg(mark) from student1 where sno = '9705') < 75
  3. begin
  4. -- 将该学生(学号为'9705')的每门成绩(mark)提高5%(即乘以1.05)
  5. update student1
  6. set mark = mark * 1.05
  7. where sno = '9705'
  8. -- 如果该学生调整后的最低成绩(min(mark))大于等于60分,终止循环操作
  9. if (select min(mark) from student1 where sno = '9705') >= 60
  10. break
  11. end
复制代码

7.创建存储过程P_1,功能是查询性别为男的学生的学号,姓名,性别。

  1. -- 创建名为P_1的存储过程,接受一个参数@xb(性别),类型为char(2)
  2. create proc p_1
  3. (
  4. @xb char(2)
  5. )
  6. as
  7. -- 在存储过程内部,从学生表(假设表名为'学生')中查询性别为传入参数@xb的学生的学号、姓名和性别信息并返回
  8. select 学号, 姓名, 性别 from 学生 where 性别 = @xb
  9. -- 执行存储过程P_1,传入参数'男',以获取性别为男的学生相关信息
  10. execute p_1 '男'
复制代码

8.创建存储过程P_2,功能是查询指定学生的学号,姓名,性别和班级,姓名由参数传递。

  1. -- 创建名为P_2的存储过程,接受一个参数@xm(姓名),类型为char(8)
  2. create proc p_2
  3. (
  4. @xm char(8)
  5. )
  6. as
  7. -- 在存储过程内部,从学生表(假设表名为'学生')中查询姓名为传入参数@xm的学生的学号、姓名、性别信息并返回
  8. select 学号, 姓名, 性别 from 学生 where 姓名 = @xm
  9. -- 执行存储过程P_2,传入参数'张三',以获取指定姓名学生的相关信息
  10. execute p_2 '张三'
复制代码

9.创建存储过程P_3,功能是查询某门课程的学生成绩,显示学号,姓名,课程名,成绩,并将成绩转换为等级分制。课程名由参数传递。

  1. -- 创建名为P_3的存储过程,接受两个参数,@kcm(课程名)类型为char(20),@cj(用于输出成绩,这里的注释可根据实际作用完善)类型为int
  2. create proc p_3
  3. (
  4. @kcm char(20),
  5. @cj int output
  6. )
  7. as
  8. -- 通过多表连接(学生、选课、课程表)查询指定课程名(@kcm)对应的学生学号、姓名、课程名以及成绩信息
  9. -- 使用case语句将成绩转换为等级分制(如不及格、及格等不同等级),并将成绩列别名为'成绩'返回
  10. select 学生.学号, 姓名, 课程名,
  11. case
  12. when 成绩 < 60 then '不及格'
  13. when 成绩 >= 60 and 成绩 < 70 then '及格'
  14. when 成绩 >= 70 and 成绩 < 80 then '比较好'
  15. when 成绩 >= 80 and 成绩 < 90 then '良好'
  16. when 成绩 >= 90 then '优秀'
  17. end as 成绩
  18. from 学生, 选课, 课程
  19. where 选课.课程号 = 课程.课程号
  20. and 学生.学号 = 选课.学号
  21. and 课程名 = @kcm
  22. -- 声明一个变量@i,用于接收存储过程输出的成绩相关信息(具体根据实际情况而定)
  23. declare @i int
  24. -- 执行存储过程P_3,传入课程名称'计算机基础',并将结果输出到@i变量中
  25. execute p_3 计算机基础, @i output
  26. -- 输出@i变量的值(存储过程输出的相关成绩信息)
  27. print @i
复制代码

10.创建存储过程P_4,功能是查询某门课程的总分和平均分,将返回参数。课程名由参数传递。

  1. -- 创建名为P_5的存储过程,接受三个参数,@kcm(课程名)类型为char(20),@zf(用于输出总分,这里的注释可根据实际作用完善)类型为int,@pjf(用于输出平均分,注释同理)类型为int
  2. create proc p_5
  3. (
  4. @kcm char(20),
  5. @zf int output,
  6. @pjf int output
  7. )
  8. as
  9. -- 通过选课表和课程表的连接查询,筛选出指定课程名(@kcm)对应的成绩总和(sum(成绩))以及平均成绩(avg(成绩))
  10. select sum(成绩), avg(成绩)
  11. from 选课, 课程
  12. where 课程名 = @kcm and 选课.课程号 = 课程.课程号
  13. -- 声明两个变量@z和@p,分别用于接收存储过程输出的总分和平均分信息
  14. declare @z int, @p int
  15. -- 执行存储过程P_5,传入课程名称'政治',并将总分输出到@z变量,平均分输出到@p变量中
  16. execute p_5 政治, @z output, @p output
  17. -- 输出总分信息(@z变量的值)
  18. print @z
  19. -- 输出平均分信息(@p变量的值)
  20. print @p
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2026 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行