[数据库与SQL]

来源:互联网 发布:ubuntu ssd 性能优化 编辑:程序博客网 时间:2024/06/06 10:45

首先,我们放上一张图,清晰地显示什么是内连接,外连接:


(图片来自百度图片)

1. 内连接,又可以简称为连接。是我们投影在左右两表中匹配条件的行,在结果表中删除与其他被连接表中没有匹配行的所有行。

例如我们有以下两个表:

teacher 表:


course表:


我们以tid为条件,进行内连接(以其他非共有列为条件没有实际意义,)


可以看到,结果选取了course 和 teacher tid 列中在左右表均匹配的行,然后投影、连接到一起组成结果表。

同时,在mysql中,inner join 也可以简写为join


2. 外连接:内连接选取的是两个表均匹配的行,外连接时都会以一张表为基表,该表的内容会全部显示,然后加上两张表匹配的内容。如果基表的数据在另一张表没有记录。那么在相关联的结果集行中列显示为空值(NULL)

外连接分为左外连接和右外连接,全连接,如何记忆外连接中的主表呢?在外连接中,左右即表示主表是哪一个。

A  左连接 B : A(左表)为 主表,其所有行均被选取,B中不存在的行以null显示

A  右连接 B : B(右表)为主表,其所有行具备选取,A中不存在的行以null显示

全连接中,左右表所有行均被选取,不被匹配的行以null填充

我们来看几个例子:


在上面的例子中,由于course表为主表,所以course中所有的行被选中,teacher中没有匹配的行以null表示


在Mysql中,没有 full join 关键字,所以无法直接进行全连接。但是我们仔细查看全连接和左右连接的关系,我们会发现,全连接其实是左右连接的并集。

我们使用左右连接来实现全连接:



P.S. 文章不妥之处还望指正


原创粉丝点击