关系代数的运算

一、基本运算(5种) ------ 可以表达所有其他运算的基础

  1. 选择(Selection,σ)

    • 从关系中选出满足条件的元组(行)。
    • 符号:σ
    • 示例:σ_{salary > 5000}(Employee)
  2. 投影(Projection,π)

    • 选出指定属性列,去除重复元组。
    • 符号:π
    • 示例:π_{name, dept}(Employee)
  3. 并(Union,∪)

    • 两个兼容关系的元组集合合并,自动去重。
    • 要求:两个关系属性数相同、域兼容。
    • 示例:R ∪ S
  4. 集合差(Set Difference,−)

    • 属于 R 但不属于 S 的元组。
    • 示例:R − S
  5. 笛卡尔积(Cartesian Product,×)

    • 两个关系的元组所有可能组合。
    • 示例:Employee × Department

二、扩展运算(常见且重要,常被视为基本操作的补充)

  1. 重命名(Rename,ρ)

    • 给关系或属性赋予新名字,用于表达自连接或避免歧义。
    • 符号:ρ
    • 示例:ρ_{E1}(Employee) 将 Employee 重命名为 E1
  2. 连接(Join)

    • 笛卡尔积 + 选择的组合,用于基于条件关联两个关系。
    • 常见类型:
      • θ-连接(Theta Join):R ⋈_{条件} S
      • 等值连接(Equi-join):基于等值条件的连接
      • 自然连接(Natural Join) :自动匹配同名属性并去重
        • 符号:⋈
        • 示例:Employee ⋈ Department(自动按 dept_id 等值连接并合并同名属性)
  3. 外连接(Outer Join) ------ 保留未匹配元组

    • 左外连接(⟕):保留左表所有元组
    • 右外连接(⟖):保留右表所有元组
    • 全外连接(⟗):保留两个表的所有元组
  4. 除法运算(Division,÷)

    • 用于表达"全部"语义的查询。
    • 典型问题:
      "找出选修了所有 由'数学系'开设的课程的学生"
      "找出同时管理所有项目员工的经理"
    • 形式定义:
      给定关系 R(A, B) 和 S(B),则
      R ÷ S 的结果是所有在 A 上的值 a,使得对于 S 中每一个 b,元组 (a, b) 都在 R 中。
    • 用基本运算表达(简化):
      R ÷ S = π_A® − π_A( (π_A® × S) − R )

三、附加运算(部分系统支持)

  1. 赋值运算(←)
  • 用于将表达式结果存入临时关系,便于分步操作。
  • 示例:T ← σ_{salary>5000}(Employee)
  1. 聚集函数(如 γ 运算)
  • 用于分组统计:sum, avg, count, min, max 等。
  • 示例:γ_{dept, avg(salary)}(Employee)
  • 这属于关系代数的扩展版本(如"聚集关系代数")
  1. 广义投影(Extended Projection)
  • 支持派生属性,如:π_{id, salary*1.1}(Employee)

总结:关系代数运算一览表

运算 符号 元数 说明
选择 σ 一元 按条件选行
投影 π 一元 选列去重
二元 集合并
二元 集合差
笛卡尔积 × 二元 所有组合
重命名 ρ 一元 改名
连接 二元 基于条件关联
自然连接 ⋈(无下标) 二元 自动匹配同名属性
外连接 ⟕, ⟖, ⟗ 二元 保留未匹配行
除法 ÷ 二元 "全部"语义查询
赋值 ------ 分步表达
聚集 γ 一元(扩展) 分组统计

举个除法运算的例子:

假设:

  • 职工表:Employee(eid)
  • 工程表:Project(pid)
  • 工作表:Work(eid, pid) ------ 表示职工参与的工程

问题 :找出参与了所有工程的职工。

表达式

Work ÷ π_{pid}(Project)

相关推荐
高飞的Leo3 天前
数据流图有几种层次
软考-系统分析师