Skip to content

关系代数 ​

考点分值总览 ​

考点重要程度分值常见题型
传统集合运算★★★1~2选择题
专门的关系运算★★★★★2~10选择、简答、计算、应用题

1. 传统集合运算 ​

前置前提 ​

并、差、交运算要求关系R、S同目:属性个数相同,对应属性取自同一个域;笛卡尔积无此限制。 t代表元组变量,t∈R表示t是R的一条元组。

示例基础关系 R

ABC
a1b1c1
a1b2c2
a2b2c1

S

ABC
a1b2c2
a1b3c2
a2b2c1

(1)并运算 R∪S ​

公式:R∪S={t∣t∈R∨t∈S} 含义:合并两个关系所有元组,去重,结果仍为同目关系。 R∪S结果:

ABC
a1b1c1
a1b2c2
a2b2c1
a1b3c2

(2)差运算 R−S ​

公式:R−S={t∣t∈R∧t∉S} 含义:保留只属于R、不在S中出现的元组。 R−S结果:

ABC
a1b1c1

(3)交运算 R∩S ​

公式:R∩S={t∣t∈R∧t∈S} 等价写法:R∩S=R−(R−S) 含义:取出同时存在于R和S的公共元组。 R∩S结果:

ABC
a1b2c2
a2b2c1

(4)笛卡尔积 R×S ​

公式:R×S={trts^∣tr∈R∧ts∈S} 规则:

  1. R为n目、S为m目,结果为n+m列;
  2. R有k1条元组,S有k2条元组,结果总元组数 = k1×k2;
  3. 每一条R的元组,依次拼接S的每一条元组。

2. 专门的关系运算(核心必考) ​

(1)选择 σF(R)(行筛选) ​

又称限制,按行筛选满足条件的元组。 公式:σF(R)={t∣t∈R∧F(t)=′真′}

  • F:逻辑条件表达式,格式X1θY1;
  • θ为比较符:>,≥,<,≤,=,≠。

(2)投影 πA(R)(列截取,自动去重) ​

公式:πA(R)={t[A]∣t∈R} 含义:选取指定属性列,丢弃其余列;若投影后出现重复元组自动删除。 示例: Student表含Sname、Sdept等字段

  1. 查询姓名与院系:πSname,Sdept(Student)
  2. 只查询院系:πSdept(Student),重复CS只保留一行。

(3)连接 ⋈ ​

本质:先做笛卡尔积,再按条件筛选匹配元组。 通用公式:R⋈AθB⁡S={trts^∣tr∈R,ts∈S∧tr[A]θts[B]}

① 等值连接 ​

θ取等号=,仅筛选属性值相等的元组,保留重复同名列。 R⋈A=B⁡S={trts^∣tr∈R∧ts∈S∧tr[A]=ts[B]}

② 自然连接(特殊等值连接) ​

  1. 要求两张表同名属性做等值匹配;
  2. 结果自动删除重复的同名列;
  3. 同时完成行筛选+列去重两步操作。

③ 外连接 ​

  1. 左外连接:自然连接结果 + 左表中未匹配成功的元组,右表字段补null;
  2. 右外连接:自然连接结果 + 右表中未匹配成功的元组,左表字段补null;
  3. 全外连接 = 左外连接 ∪ 右外连接,保留左右两边所有不匹配元组,空缺填null。

(4)除运算 ÷ ​

定义 ​

R(X,Y)、S(Y,Z),R与S中Y属性域相同; R÷S结果仅保留X列,筛选规则:X上某值x对应的Y值集合(象集Yx)包含S中全部Y投影。 公式:R÷S={tr[X]∣tr∈R∧πY(S)⊆Yx}

典型例题 ​

题目:查询至少选修1号、3号课程的学生学号

  1. 构造临时关系K(仅含Cno:1、3);
  2. 表达式:πSno,Cno(SC)÷K;
  3. 输出满足两门课都选的学号集合。

综合查询例题 ​

题目:查询至少选修先行课为5号课程的学生姓名 表达式:

πSname(πSno(σCpno=′5′(Course)⋈SC)⋈πSno,Sname(Student))

解析:

  1. σCpno=′5′(Course) 筛选先行课为5的课程;
  2. 和SC自然连接,拿到选该课的学号;
  3. 和Student投影后的学号、姓名表连接;
  4. 最终投影只输出学生姓名。

课时二 练习题 ​

1. 选择题 ​

关系数据库管理系统应能实现的专门关系运算包括()。 A. 排序、索引、统计 B. 选择、投影、连接 C. 关联、更新、排序 D. 显示、打印、制表 答案:B

2. 简答:等值连接与自然连接的区别 ​

  1. 等值连接只要求比较属性值相等,允许两张表比较属性名不同;自然连接必须是同名属性等值匹配;
  2. 等值连接结果保留重复的匹配属性列;自然连接自动删除重复同名列;
  3. 等值连接仅做行筛选;自然连接同时完成行筛选+重复列删除。

3. 计算:R÷S ​

R

ABCD
abcd
abef
abhk
bdef
bddl
ckcd
ckef

S

CD
cd
ef

解:

  1. S投影πC,D(S)={(c,d),(e,f)};
  2. 遍历R中(A,B)的象集:
    • (a,b)对应{(c,d),(e,f),(h,k)},包含S全部元组;
    • (b,d)对应{(e,f),(d,l)},不包含(c,d);
    • (c,k)对应{(c,d),(e,f)},包含S全部元组;
  3. 结果R÷S:
    AB
    ab
    ck

4. SPJ四表查询 ​

关系模式: S(SNO,SNAME,CITY)P(PNO,PNAME,COLOR,WEIGHT)J(JNO,JNAME,CITY)SPJ(SNO,PNO,JNO,QTY)

1)求供应J1工程零件的供应商号

πSNO(σJNO=′J1′(SPJ))

2)求供应J1工程、P1零件的供应商号

πSNO(σJNO=′J1′∧PNO=′P1′(SPJ))

3)求供应J1工程红色零件的供应商号

πSNO(σJNO=′J1′(SPJ)⋈σCOLOR=′红色′(P))

4)求至少使用天津供应商生产的红色零件的工程号

πJNO(σCITY=′天津′(S)⋈SPJ⋈σCOLOR=′红色′(P))

5)求至少使用S1供应商全部零件的工程号

πJNO,PNO(SPJ)÷πPNO(σSNO=′S1′(SPJ))

5. 雇员、工作、公司、主管多表查询 ​

模式: 雇员(员工姓名,居住城市,居住街道) 工作(员工姓名,公司名,工资) 公司(公司名,公司所在城市) 主管(员工姓名,主管姓名)

1)找出在firstbank工作的员工姓名

π员工姓名(σ公司名=′firstbank′(工作))

2)firstbank员工姓名+居住城市

π员工姓名,居住城市(σ公司名=′firstbank′(工作)⋈雇员)

3)firstbank、工资>1000的员工姓名+工资

π员工姓名,工资(σ公司名=′firstbank′∧工资>1000(工作))

4)所有员工工资都大于1000的公司名

π公司名(公司)−π公司名(σ工资≤1000(工作))

5)主管Smith下属员工姓名+居住城市

π员工姓名,居住城市(σ主管姓名=′Smith′(主管)⋈雇员)

Powered by VitePress 1.6.4 | 持续更新中