上面文章介绍了 join和on的语法,下面看看left join和right join
left join:
先看看join和left join的区别:
- left join必须有on;
- left join会检查左边表的数据是否都包含在新生成的表中,若是:则和join一样;若不是:则用NULL和不包含的行组成新的行加入到新表中;(可能有些不理解,结合下面例子看看就懂)
举例看:
我们先执行join: stu join class on classid = class.id (join的详细语法介绍过)
再执行left join:stu left join class on classid = class.id 后变为:
由于左边的表stu中的数据在join后,第三行没有在新表出现,left join会将没在新表出现的数据和NULL作拼接,并作为新的行加进来
如果将stu和class顺序换一下,执行: class left join stu on classid = class.id ,结果会是什么呢?
这个时候,左边的表是class,它的数据在新表中都存在,所以和用join是一样的!!
通过这个例子,再回过头去看上面的话,应该就可以理解。
left join 左右两边的表是不能交换的,交换的话,意思会变;join左右两边的表可以交换,意思不变
right join:
right join会检查右边表的数据是否都包含在新生成的表中,若是:则和join没有区别;若不是:则用NULL和不包含的行组成新的行加入到新表中。
如果理解了 left join的话,就会发现其实: A right join B = B left join A
A right join B: 是以B为基准;B left join A: 也是以B为基准的
总结:
- join: 将两个表按照条件连接起来;
- left join: 以左边表为基准,看左边表的数据是否都包含在新生成的表中,若是:则和join一样;若不是:则用NULL和不包含的行组成新的行加入到新表中;
- right join: 以右边表为基准,看右边表的数据是否都包含在新生成的表中,若是:则和join一样;若不是:则用NULL和不包含的行组成新的行加入到新表中;