这个建议与 inner join 对比学习,一目了然
- 期末考试,学校考了一门数据结构,分数已经出来,如下表(附代码):
代码如下:
mysql> create table stu_score(
-> id int auto_increment primary key,
-> stuid varchar(15),
-> score int
-> );
- 作为辅导员的你,想看看学生的学习情况,于是输入了:
select name,score from stu_infor inner join stu_score on stu_infor.stuid=stu_score.stuid;
- 但是如果你用 left 代替了 inner ,即:
select name,score from stu_infor left join stu_score on stu_infor.stuid=stu_score.stuid;
,很明显,抓到一个缺考的 - 假如你不小心把
stu_infor left join stu_score
写成了stu_score left join stu_infor
,即:select name,score from stu_score left join stu_infor on stu_infor.stuid=stu_score.stuid;
,出乎意料的是,缺考的人没出现 - 这是怎么回事,小老弟?欲知后事如何,请看总结
总结
left join 是以左表为主,右表为副。
select name,score from stu_infor left join stu_score on stu_infor.stuid=stu_score.stuid;
,左表为 stu_infor ,右表为stu_score。查询 name,score 时,要求左表 stu_infor 中的所有的 name 全部存在,所以你就可以看到有 王婷 且成绩为 NULL 。
select name,score from stu_score left join stu_infor on stu_infor.stuid=stu_score.stuid;
,左表为 stu_score,右表为 stu_infor ,查询 name,score 时,要求左表 stu_score 中的所有的 score 全部存在,而表 stu_score 表中并没有 王婷 的记录,所以查询的结果就没有王婷。