• 连接查询:同时涉及两个以上的表的查询
  • 连接条件或连接谓词:用来连接两个表的条件
  • 一般格式:
    • [<表名1>.]<列名1><比较运算符>[<表名2>.]<列名2>
    • [<表名1>.]<列名1>BETWEEN[<表名2>.]<列名2> AND[<表名2>.]<列名3>
  • 连接字段:连接谓词中的列名称
    • 连接条件中的各连接字段类型必须是可比的,但名字不必相同

image-20250404205443137

连接操作执行过程

  • 嵌套循环法(NESTED-LOOP)
    • 首先在表1中找到第一个元组,然后从头开始扫描表2,逐一查找满足连接件的元组,找到后就将表1中的第一个元组与该元组拼接起来,形成结果表中一个元组。
    • 表2全部查找完后,再找表1中第二个元组,然后再从头开始扫描表2,逐一查找满足连接条件的元组,找到后就将表1中的第二个元组与该元组拼接起来,形成结果表中一个元组。
    • 重复上述操作,直到表1中的全部元组都处理完毕
  • 排序合并法(SORT-MERGE)
    • 常用于=连接
    • 首先按连接属性对表1和表2排序
    • 对表1的第一个元组,从头开始扫描表2,顺序查找满足连接条件的元组,找到后就将表1中的第一个元组与该元组拼接起来,形成结果表中一个元组。当遇到表2中第一条大于表1连接字段值的元组时,对表2的查询不再继续
  • 索引连接(INDEX-JOIN)
    • 表2按连接字段建立索引
    • 对表1中的每个元组,依次根据其连接字段值查询表2的索引,从中找到满足条件的元组,找到后就将表1中的第一个元组与该元组拼接起来,形成结果表中一个元组
  • 自身连接:一个表与其自己进行连接
  • 需要给表起别名以示区别
  • 由于所有属性名都是同名属性,因此必须使用别名前缀
  • [例3.52]查询每一门课的间接先修课(即先修课的先修课)
    • SELECT FIRST.Cno,SECOND.Cpno FROM Course FIRST,Course SECOND WHERE FIRST.Cpno =SECOND.Cno;

外连接与普通连接的区别

  • 普通连接操作只输出满足连接条件的元组
  • 外连接操作以指定表为连接主体,将主体表中不满足连接条件的元组一并输出
  • 左外连接
    • -列出左边关系中所有的元组
  • 右外连接
    • -列出右边关系中所有的元组

image-20250407002142843

image-20250407002210225