一、什么是联接
1、什么是联接
联接就是把两个表以笛卡尔积的形式组合到一起,除此之外,好像也没有什么其他方法可以把表组合到一起了。
2、笛卡尔积
在离散数学中,我们就学过集合的运算,其中的一种形式就是笛卡尔积。
具体形式就是 第一个集合中的每一个元素与第二个集合中的每一个元素组合。
在对表进行联接时,可将表看做一个集合,表中的元素就是表中的一行。对表进行联接即与第一张表中的每一行与第二张表中的每一行组合。
3、最简单的联接
用SQL语句描述即:
select *
from 表1,表2;
假设表1有m行a列,表2有n行b列,则最终联接产生的结果为一张
m*n行,a+b列的表。
这其实就是对两张表做笛卡尔积,一般没什么实际价值,实际环境中还需要掌握多种联接方式。
二、不同类型的联接
1、内部连接(等值联接)
这是最常用到的一种联接,但实现这种功能需要借助外键的帮助。
外键:表A中的某一列,在B表中是主键,则该列称为A表的外键。
通常情况下,只有一张表中存在另一张表的外键,这两张表才能进行内部联接,或称之为等值联接,即将一张表的外键与另一张表的主键联接起来。
常见的形式为:
select *
from SC,Student
where = ;
此外,内联接的标准写法为
select *
from SC inner join Student
on = ;
上述形式就是将SC和Student两张表进行内部联接,实际上,它是以筛选的形式达到此效果的,即将笛卡尔积的结果,添加筛选条件,即保留笛卡尔积结果中满足 = 的行得到的结果即为内部联接的结果。
通过内部联接,可以将对一张表中的信息进行扩展,从而达到我们想要的查询目的。
2、自连接
有些情况下,需要联接自己才能完成相关的查询操作,此时的联接被称为自连接,此时联接的两张表为,自己和自己,为了避免混淆,需要使用别名进行区分。比如:
select *
from products as p1,products as p2
where =
3、外连接
有时进行联接时,左边表中的外键列中的某一个值在右边表中的主键里没有值与之对应,但我们还是希望可以显示左边表中的这一个值,只不过在对应的右边的列中显示值为NULL,此时就需要就行外连接(outer join)。
需要注意的是,外联接必须搭配关键字LEFT或RIGHT使用,这两个关键字用于指出将哪边的表中列的值完整保留。
比如:
Select *
from products Left Outer Join vends
on = ;
此时如果products中的某一行在vends表中没有与之对应的行,任然会保留products中的这一行,只不过对应的行中的值全部为NULL。
除了以上三种类型的联接之外,我们有时还能听到一种联接叫“自然联接”,其实,自然联接不是一种联接的类型,而像是一种联接的规范,只要满足联接过后,两张表没有重复的列,就是自然联接。