最近遇到了一个关于join查询与left/right join查询区别的问题,在之前并没有去真正去思考过这两者的区别,在看到这个问题的时候我的第一反应是觉得join与left/right join的区别应该就是基本表的区别,不知道是在哪里看到过相应的文章还是怎么样,并且强烈的认为这肯定就是标准答案,被朋友去建议自己尝试一下去证明一下这个猜想。
猜想开始:
一:建立班级和学生表并写入假数据,
班级表:
学生表:
二:测试查找育英班的学生
(1) inner join: select class.cid,class.infos,student.sid,student.sname from class join student on class.cid=student.cid and class.cid=1;
(2) left join: select class.cid,class.infos,student.sid,student.sname from class left join student on class.cid=student.cid and class.cid=1;
(3) right join: select class.cid,class.infos,student.sid,student.sname from class right join student on class.cid=student.cid and class.cid=1;
看到结果之后我在考虑刚刚所提到的基本表的事情,我现在认为有基本表这一层概念在里面,但是最根本的问题不是基本表的事情,而是依靠强大的数学背景下的集合的问题。把班级和学生看成集合A和B,inner join是取出两个集合中间共同相等的部分,left join是以左边集合为基本集合全部取出,取出右面中与左边集合的交集部分,right join同理。本人数学不太好,大家可以自行翻查资料来证实或推翻我现在的想法。