请使用支持现代 CSS 与 JavaScript 的浏览器播放课件
DBPA · 2.2

关系操作

基本操作和导出操作

VER. 2608 Built with impress.js

学习目标

面对业务要求,判断数据库是要返回结果表、修改记录,还是改变表结构

  1. 01判断一个请求属于查询、更新、定义还是控制,并说明它的结果
  2. 02画出一张表经过筛选、保留列和连接后怎样变成下一张表
  3. 03根据业务问题选择五种基本操作或连接、除、交等导出操作
  4. 04(可选)用同一个查询比较关系代数、关系演算和 SQL 的表达思路
  5. 05(可选)判断一种语言能否写出关系代数可写的全部查询
2/16
LEARNING OBJECTIVES

返回结果,还是改变关系

“查询成绩”产生结果关系,“修改成绩”改变关系中的数据

查询 Query

从已有关系中得到所需的结果

例如:查询某位学生某门课程的成绩

更新 Update

改变关系中的元组或属性值

例如:添加、删除、修改

Takeaway

查询回答“现在有什么”,更新改变“数据库中保存什么”

3/16
QUERY AND UPDATE

输入和输出都是关系

筛出关系中所有满足条件的行,是否需要一次读入整张表?

以 Cno 等于 81002 的筛选为示意,关系输入经过一次成组处理产生关系结果
处理方式逻辑操作单位学习重点
成组处理一组元组组成的关系一次处理所有满足条件的行
逐条处理一条记录一次处理一条记录

查询在特定语言中怎样表达?

Takeaway

操作对象、结果和中间结果都是关系,所以复杂查询可以继续组合

4/16
SET AT A TIME

基本操作

基本操作用来筛出特定的行或列、合并或配对

操作代数位置主要问题示例
选择基本操作哪些元组满足条件找出选修 Cno=81002 的记录
投影基本操作保留哪些属性只保留学号和姓名
基本操作合并哪些同型关系合并两个班的学生数据
基本操作排除哪些同型关系找免修某门课的学生
笛卡儿积基本操作所有配对组合是什么形成可能配对后再筛选
Takeaway

选择、投影、并、差和笛卡儿积,是五种基本操作

5/16
BASIC OPERATIONS

导出操作

组合关系、满足全部条件或找出共同部分

操作代数位置主要问题学生选课中的例子
连接导出操作按相关属性组合哪些关系按某个属性连接两个关系
导出操作哪些对象与全部对象有关找修满全部课程的学生
导出操作哪些元组同时属于两组找共同名单
Takeaway

连接、除和交可以由基本操作导出,也属于关系操作

6/16
DERIVED OPERATIONS

案例:教务查询

查询选了编号为 81002 课程的学生姓名

01

选择

SC → \(R_1\)(Cno=81002 的选课记录)

02

投影

\(R_1\) → \(R_2\)(学生学号)

03

连接

Sno 将 \(R_2\) 与 Student 连接 → \(R_3\)(补回学生信息)

04

投影

\(R_3\) → \(R_4\)(学生姓名)

Takeaway

中间结果仍是关系,可以继续运算

7/16
CASE JUDGMENT

示例:判断请求属于哪一种操作

请求是否数据?请求要得到什么结果?

业务请求大类具体操作关系中的结果/变化
找选课记录查询选择产生结果,不改变原关系
找出学生姓名查询选择、连接、投影连接 Student 找到姓名
新增选课记录更新插入增加一个元组
修改成绩更新修改改变一个分量
删除成绩更新删除移除满足条件的元组
定义关系结构定义DDL改变关系结构
8/16
OPERATION JUDGMENT

用运算步骤表达“选修 81002 的学生”

筛选选课记录、保留学号、连接学生、保留姓名

运算对象

关系是关系代数的输入对象

运算过程

用选择、投影、连接等操作处理输入关系

运算结果

结果仍然是关系,可以继续下一步运算

SC → 选修 81002 的记录 → 学号关系 → 与 Student 组合 → 姓名关系

Takeaway

每一步关系运算的结果都能继续作为下一步输入

9/16
RELATIONAL ALGEBRA

用谓词表达同一个查询条件

学生进入结果,当且仅当存在课程号匹配、学号相同的选课记录

元组关系演算

用变量分别指代 StudentSC 中的一整行,再要求课程号匹配且两行学号相同

域关系演算

用变量分别表示学号、姓名、课程号等列值,再要求这些值满足同样条件

Takeaway

关系代数偏向“怎样运算”,关系演算偏向“满足什么条件”

10/16
RELATIONAL CALCULUS

SQL:关系数据库的综合数据语言

SQL 是综合数据语言,不只提供查询

DQL

Data Query Language:从已有关系中查询结果

DDL

Data Definition Language:定义或修改关系结构和数据库对象

DML

Data Manipulation Language:插入、删除和修改关系数据

DCL

Data Control Language:管理访问权限和数据控制

Takeaway

这些功能由具体 SQL 语句实现

11/16
SQL LANGUAGE

关系完备

是否能实现关系代数全部查询?

语言表达方式语言层次
关系代数对关系进行运算抽象查询语言
元组关系演算用元组变量和谓词抽象查询语言
域关系演算用域变量和谓词抽象查询语言
SQL查询、定义、操纵与控制实际综合语言;达到关系完备
Takeaway

关系代数、两类关系演算和 SQL 都能表达某个查询;但 SQL 还可以做更多

12/16
RELATIONAL COMPLETENESS

SQL 描述目标,RDBMS 实际执行

关系型数据库管理系统扫描表、查索引、为表建立连接

用户说明目标

给出需要的关系结果和筛选条件,不逐步写出访问文件的动作

系统比较路径

RDBMS 可以在顺序扫描、索引扫描和不同连接顺序中选择一种

结果保持一致

不同执行计划应得到相同查询结果,但所需时间和资源不同

Takeaway

“非过程化”依然需要执行过程,只是具体过程交给了 RDBMS

13/16
NONPROCEDURAL QUERY

练习:从业务要求到数据库

从学号查询相应学生选了哪些课程

请求改变什么

判断它产生结果、改变数据、改变结构还是改变权限

每一步得到哪张表

写出输入表、每张中间结果表和最终结果表,并标出各表保留哪些行和列

需要哪些操作

先选能回答问题的最小操作组合,判断哪些是基本操作、哪些是导出操作

谁决定执行路径

区分用户描述的查询目标与 RDBMS 选择的扫描、索引和连接顺序

Takeaway

用关系代数式思路口述查询过程,画出每一步生成的关系

14/16
SECTION REVIEW

本节思维导图

15/16
KNOWLEDGE MAP

本节问题

  1. 01查出库存不足商品和扣减库存分别属于哪类请求?判断依据是什么?
  2. 02关系操作采用成组处理,逻辑操作单位与物理执行方式有什么不同?
  3. 03五种基本操作是哪五种?连接、除和交为什么属于导出操作?
  4. 04对“找出选修 81002 的学生姓名”,关系代数强调的是什么?
  5. 05SQL 的 DQL、DDL、DML、DCL 分别承担什么功能?
16/16
SECTION QUESTIONS