谈谈Mysql中leftjoin的使用

leftjoin用于返回左表的所有记录以及右表匹配的记录(如有匹配,没有则不返回)

leftjoin在连表查询时非常有用,比如下面的场景:

  • 一张学生表
  • 一张课程表
  • 一张成绩表

想通过用户的id查询用户的基本信息以及考试成绩

student:
id
sex
name
age
复制代码
course:
id
course_name
复制代码
student_course:
student_id
course_id
score
复制代码

根据学生的id查询考试成绩:

SELECT S.id,S.name,C.name as course,SC.score,S.sex,S.age from student S 
left join student_course SC on SC.student_id = S.id 
left join course C on C.id= SC.course_id
复制代码

获取的结果如下:

image.png

当然我们也可以通过WHERE指令对结果集合进行过滤:

  • 筛选及格的成绩:WHERE SC.score>=60
  • 筛选某个人的成绩,WHERE S.name='Andrew'

这样看起来不是很直观,因为一个人可能有多条成绩记录,可以通过分组GROUP BY对记录进行合并操作,注意修改SELECT语句

SELECT S.id,MAX(S.name) as name,MAX(S.age) as age,GROUP_CONCAT(concat_ws('_',C.name,SC.score)) from student S 
left join student_course SC on SC.student_id = S.id 
left join course C on C.id= SC.course_id 
GROUP BY S.id
复制代码

结果如下:

image.png

Guess you like

Origin juejin.im/post/7040454626902016014