MySQL中表连接一直是很多人比较混淆的地方。到底MySQL中有哪几种连接,它们有什么不一样的呢?下面笔者带你一一分析。
什么是表连接?表连接一般体现在表之间的关系上。当需要同时显示多个表中的字段时,就可以用表连接来实现。而表连接中,分为内连接和外连接。外连接中又分为左外连接,右外连接。有些人可能会疑惑,不是还有全外连接吗?是的,在其他的数据库中的确存在全外连接,但是在MySQL数据库中并不存在,所以全外连接我们暂时忽略掉。
内连接
内连接:选出两张表中互相匹配的记录。
SQL语句写法:select * from A表,B表 where A表.C字段=B表.D字段
左外连接
左外连接:筛选出包含左表的记录并且右表没有和它匹配的记录。
SQL语句写法:select * from A表 left join B表 on A表.C字段=B表.D字段
右外连接
右外连接:筛选出包含右表的记录并且左表没有和它匹配的记录。
SQL语句写法:select * from A表 right join B表 on A表.C字段=B表.D字段
如果你对上面文绉绉的文字理解不了,下面我们就实际用数据库演示一下,看看三种连接到底有什么不同的结果。
我们以两个数据表为例。一个是pet表,表示宠物。一个是person表,表示主人。宠物表中两个字段,id和name。主人表中有三个字段,id、name和pid。pid表示这个人的宠物id。宠物表的id和主人表的pid之间存在外键联系,一个主人拥有一个宠物。
pet表和person表的结构
pet表和person表的数据
使用内连接进行查询
使用左外连接进行查询
使用右外连接进行查询
总结:笔者最后用自己的话总结一下,表连接使用在两个表之间有外键联系的情况下。使用内连接时,会把两个表字段中有相同数据的记录查询出来,没有相同数据的记录则不会显示。而外连接不仅会把有相同数据的记录显示出来,也会把没有相同数据的记录显示出来。左外连接则是以左表为标准,以左表外键字段中所有数据去连接右表,当右表中没有左表某个数据的记录时,则会置为NULL。右外连接则是以右表为标准,以右表外键字段中的所有数据去连接左表,当左表中没有右表某个数据的记录时,则会置为NULL。