前言
在说Join之前,先要了解Join这个关键字的意思,就和它的字面意思一样——“连接”,就是把两张表连接起来,我们在初学MySQL进行查询时,肯定都知道了“内连接”——“inner join”和外连接——“left outer join”和“right outer join”,但有些人就像我一样,一开始不知道这些语句是怎么处理数据的,有时候在做查询的时候很迷茫,不知道怎么使用,那么我就有必要知道它的处理方式,那么它是以怎样一种方式处理两张表的呢?在说上面的几个复杂查询关键字之前,先了解一下在用“join”时,两个表发生了什么。
1.每一次“join”都在做“笛卡尔积”
在这个里我们可以看到,”join“这个关键字在执行的时候做了图中的事,即把学生表的每个记录和课程表每个记录匹配,相当于做了一次”m*n”的“笛卡尔积”,这才是所有join语句的开始,之后的内连接和外连接在处理表的时候都先进行了这样一次表处理。
2.“inner join”
有了上面的基础,我们来看内连接“inner join”,从笛卡尔积的角度来说就是做了一次交集,即在经过笛卡尔积后的表基础上根据”on“后面的条件,将符合”on“的数据留下
3. “outer join”
很多人看到“outer join”可能有点蒙,我们在MySQL里没有单独使用过“outer join”,但是我们用过“left outer join”和“right outer join”,MySQL没有支持使用”outer join“,但是可以使用“left outer join”和“right outer join”,那么在搞清楚“left outer join”和“right outer join”之前就需要搞清楚”outer join“
这里可以看到“outer join”是求了并集,即把符合“on”条件的数据和两个表剩下的数据都留了下来。
4.“left outer join”
“left outer join”就等于把笛卡尔积后的表,根据“on”的条件,将符合条件的数据留下,也将不符合条件的左表数据留下了,并将右表数据设为“null”值。
5.“right outer join”
“right outer join”和“left outer join”很像,也是把笛卡尔积后的表,根据“on”的条件,将符合条件的数据留下,也将不符合条件的右表数据留下了,并将左表数据设为“null”值。
以上就是我在学习join时候的一些经验,本人初学,如果有错欢迎大佬在下评论指出不足之处。