不像关系代数中“连接”是用一个特殊符号来表达的,在SQL中“连接”是用“连接条件”来表达的。
连接条件或连接谓词:用来连接两个表的条件
一般格式:
[<表名1>.]<列名1><比较运算符>[<表名2>.]<列名2>
连接字段:连接谓词中的列名称
连接条件中的各连接字段类型必须是可比的,但名字不必相同
1、等值与非等值连接查询
等值连接:连接运算符:“=”
采用在select中去掉重复字段的方式
连接操作的执行过程
(1)嵌套循环法(NESTED-LOOP)
a.首先在表1中找到第一个元组,然后从头开始扫描表2,逐一查找满足连接件的元组,找到后就将表1中的第一个元组与该元组拼接起来,形成结果表中的一个元组。
b.表2全部查找完后,再找表1中的第二个元组,然后再从头开始扫描表2,逐一查找满足连接条件的元组,找到后就将表1中的第二个元组与该元组拼接起来,形成结果表中的一个元组。
c.重复上述操作,直到表1中的全部元组都处理完毕
(2)排序合并法(SORT-MERGE)
常用于等值连接
a.首先按连接属性对表1和表2排序
b.设置指针,分别指向表1和表2的第一个元组。如果这两个元组满足连接条件,则进行元组拼接(如果有多个连续元组满足连接条件,则需要一一拼接),并将两指针分别向后移一个原则。否则,将具有较小值得指针后移一个元组。
c.重复上述操作,直到表1或表2中的全部元组都处理完毕为止
(3)索引连接(INDEX-JOIN)
a.对表2按连接字段建立索引
b.对表1中的每个元组,依次根据其连接字段值查询表2的索引,从中找到满足条件的元组,找到后就将表1中的第一个元组与该元组拼接起来,形成结果表中的一个元组
c.(该方法亦可以看做嵌套循环法的一个变种)
2、自身连接
一个表与其自己进行连接,是一种特殊的连接
需要给表起别名以示区别
由于所有属性名都是同名属性,因此必须使用别名前缀
3、外连接
外连接与普通连接的区别
- 普通连接操作只输出满足连接条件的元组
- 外连接操作以指定表为连接主体,将主体表中不满足连接条件的元组一并输出
- 左外连接
列出左边关系中所有的元组
4.右外连接
列出右边关系中所有的元组
4、多表连接
两个以上的表进行连接
谢谢!