关系运算

1 关系

1 域( domain)

定义:域是一组具有相同数据类型的值的集和
  例如,自然数、整数、{0,1)、{男,女”(用来表示性别的取值范围)、{学士,“硕士,博士“(表示学位的取值范围)、大于等于0且小于等于100的正整数(用来表示百分制成绩取值范图)长度不超过字节的字符串集合等,都可以是域。
  空值(用null表示)是所有可能的域的一个取值,表名值未知或不存在。例如,对于表示学位的取值域,某员工的学位为空值nul,表示不知道该员工所获得的学位,或该员工没有获得学位;对于表示成绩的取值域,某学生的成绩为空值null,表示不知道该学生的成绩,或该学生没有成绩。

2 笛卡尔积(cartesian product)

关系运算
例:给定两个域:
  学生的姓名集合:D1={李小勇,刘方晨,王红敏}
  课程的名称集合:D2={数据库系统概论’,操作系统“}
则D,D2的笛卡儿积为
  D1XD2={(‘李小勇’,‘数据库系统概论’),(‘李小勇’,‘操作系统’)
      (‘刘方晨’,‘数据库系统概论’),(‘刘方晨’,‘操作系统’),
      ('王红敏’,‘数据库系统概论’),(‘王红敏’,‘操作系统’)}
该笛卡儿积的基数M=3×2=6,即D1×D2共有6个元组,如图所示

姓名 课程名称
李小勇 数据库系统概论
李小勇 操作系统
刘方晨 数据库系统概论
刘方晨 操作系统
王红敏 数据库系统概论
王红敏 操作系统

3 关系( relation)

定义:D1XD2×…×Dn的子集称为在域D1,D2,…,Dn上的关系,表示为
        r(D1,D2,…,Dn)
其中:表示关系的名字;n是关系的目或度( degree)。
  当n=1时,称该关系为单元关系;当n=2时,称该关系为二元关系。
  关系是笛卡儿积的有限子集,所以关系也是一个二维表,表的每行对应于关系的一个元组,表的每列对应于关系的一个域。由于域可以相同,为了区别就必须给每列起一个名字,称为属性(attribute)。n目关系共有n个属性。
  一般来说,D1,D2,…,Dn的笛卡儿积是没有实际语义的。只有它能够构成一个关系的某个子集才有实际含义。例如,对于上图中的6个元组,如果“李小勇”同学只修读了“数据库系统概论”课,没有修读“操作系统”课,那么第1个元组有实际含义,而第2个元组没有实际含义。因此,我们也称表的一行(即关系的一个元组)是由有关联的若干值成,它对应于现实世界中一个实体的若干属性的值的集合。

2 关系运算

1 选择

  选择操作时在关系r中查找满足给定谓词(即选择条件)的所有元组,记作:
关系运算
其中:P(predicate)表示谓词(即选择条件),它是一个逻辑表达式,取值为“真”或“假”。
  例1:在数据库ScoreDB(Class表)中,查找2015级的所有班级情况
关系运算
  例2:在数据库ScoreDB(Student表)中,查找所有2000年及以后出生的女学生情况
关系运算

2 投影

  关系是一个二维表,对它的操作可以从水平(行)的角度进行,即选择操作,也可以从纵向(列)的角度进行,即投影操作。
  关系 r 上的投影是从 r 中选出若干属性列组成新的关系。记作:
关系运算
其中:A 为关系 r 的属性集合。
  例1:在数据库ScoreDB(Student表)中,查找所有学生的姓名和民族
关系运算
  例2:在数据库ScoreDB(Student表)中,查找所有“蒙古族”学生的姓名和籍贯
关系运算

3 连接

关系运算
例:在数据库ScoreDB中查询所有2016级的“蒙古族”学生的姓名

  1. 此查询涉及两个表Student,Class,且两表通过外键classNo关联,因此,自然连接可表示为:
    关系运算
    因此,最后的查询为:
    关系运算