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

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。