1、首先,我们先考浞骒镤迫虑以下左表和右表为多对一的情况,例如上数学课的学生对上教师,这个是后我们采用学生表 LEFT OUTER JOIN 数学教师表后,其实我们会发觉这是不是多对一其实没有任何影响,因为LEFT OUTER JOIN本身就是左表数据全部保留,而右表数据满足条件的再遵循ON后的条件做插入的,所以其实对于左边的每一条数据,右表要么没有对应的,要么有且仅有一条有效数据可以和左表对应,其实这也就是数学上映射的关系,因此其实这对于一条数据而言,也可以说是单对单的,是满足函数f(x)的关系的,因此不仅join以后数据量没有发生变化,连数据的内容也没有半点变化,right join与此相反。详情见下图:
2、然后就是一对多的状况了,首先,在右表有n条数据和左表1条做对应的情况下,很显然,左表的一条数据在我们JOIN之后的表中就变成了n条数据,相较于一对一的关系,这就多了n-1条数据,而且左右表中每有一种这样子的一对多的关系,都会相应的增加记录,而且很显然,只要左右表有这样的关系以后,原先左表的主键在新表中,也就不在唯一了。
3、最后是多对多,其实多对多没有什么好说的,因为一对多和多对一的笛卡儿积就是多对多,既然前面说过多对一等同于一对一,那么实际上多对多的关系其实和一对多的关系是一样的,也就是其实右表的一条数据,是否可以对应与左表的多条数据,我们并不关心,我们关心的只有左表的一条数据和右表的多条数据的对应关系,毕竟LEFT OUTER JOIN 中,只有左表是无条件加入到join表中的,右表只是一个满足条件的依附品而已。
4、那么说到这里,很多人也可以想到我接下来要说什么了,对,就是有一个join,可以使得左右表中只要有一个表满足要求,就可以返回一行结果的,就是僻棍募暖FULL OUTER JOIN,这个的原理其实也不用我细说,大家就完全可以理解为A LEFT OUTER JOIN B UNION B LEFT OUTER JOIN A 这样子就可以了,其实FULL OUTER JOIN 也就是这么回事而已。下图为我们的一个举例:
5、最后我们再来谈一下INNER JOIN,前面我们一直都在说的都是XXX OUTER JOIN 那么我们也肯定是有相对应的 INNER JOIN 的,但是为什么我们很少提这个呢,因为INNER JOIN的含义只是,A和B两个表都满足后面的条件,才可以被查询出来,对,没错,和where = 一模一样,那么这个join也就没有它的特殊的存在意义了。
6、最后,对于数据库中JOIN的介绍也就到此为止了,不知道各位在阅读完这一些之后有没有收获到想要得到的东西,最后,再次希望本文可以在数据库学习之众帮到大家,谢谢。