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
复制代码
获取的结果如下:
当然我们也可以通过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
复制代码
结果如下: