终于想到一个好记的例子,通俗理解join on、left join on、right join on、full join on
生活场景一:
夫妻两个人买东西,他要买衣服、车子、可乐,她要买衣服、可乐、房子、鲜花,谁说了算?
Left join 男的说了算,right join 女的说了算,(inner)join两人商量办,full join都买!
表结构如下:
查询语句:
select * from He_buy ________ join She_buy on He_buy.P_id=She_buy.P_id
查询结果:
生活场景二:学生成绩系统
查询语句:
select * from student ______join score on student.S#=score.S#
(学生信息表student,成绩表score,S#是学号)
- JOIN: 如果表中有至少一个匹配,则返回行(inner join)。例如返回有学号的、并且参加了考试的学生信息+分数表
- LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行。例如返回全部学生的成绩,不管是否参加了考试
- RIGHT JOIN:即使左表中没有匹配,也从右表返回所有的行。例如返回全部的成绩情况,不管成绩是否挂钩了学生的学号
- FULL JOIN:只要其中一个表中存在匹配,就返回行。例如返回全部学生和成绩,不管学生是否参加考试,也不管不管成绩是否挂钩了学生的学号