一张图搞定MySQL七种 JOIN 关系

在 mysql 查询语句中,JOIN 扮演的角色很重要,所以掌握其用法很重要。很多同学可能只是会用几种常用的,但要成为高级的工程师是需要掌握透彻,360度全无死角。

图片精华版

一张图搞定MySQL七种 JOIN 关系_第1张图片

文字解释版

1. 需要准备好两个table:subject(学科表)和 student_score(学生成绩表)
通过学生成绩表的subject_id字段(学科ID)和学科表的id字段(主键ID)进行关联

一张图搞定MySQL七种 JOIN 关系_第2张图片

一张图搞定MySQL七种 JOIN 关系_第3张图片

2. 分别填充数据 

一张图搞定MySQL七种 JOIN 关系_第4张图片

一张图搞定MySQL七种 JOIN 关系_第5张图片

3. inner join
语句:select score.student_name,score.score,subject.name,subject.teacher from student_score as score inner join subject on score.subject_id = subject.id;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VAtABLgH-1577718684574)(https://cdn.learnku.com/uploads/images/201912/24/32495/ZUzDjBNBDe.png!large)]

4. left join (共有+右表不匹配补NULL)
语句:select score.student_name,score.score,subject.name,subject.teacher from student_score as score left join subject on score.subject_id = subject.id;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L3PcaQY8-1577718684575)(https://cdn.learnku.com/uploads/images/201912/24/32495/gC6Gu6upDx.png!large)]

5. left join (左表独有)
语句:select score.student_name,score.score,subject.name,subject.teacher from student_score as score left join subject on score.subject_id = subject.id where subject.id is null;

一张图搞定MySQL七种 JOIN 关系_第6张图片

6. right join (共有+左表不匹配补NULL)
语句:select score.student_name,score.score,subject.name,subject.teacher from student_score as score right join subject on score.subject_id = subject.id;

一张图搞定MySQL七种 JOIN 关系_第7张图片

7. right join (右表独有)
语句:select score.student_name,score.score,subject.name,subject.teacher from student_score as score right join subject on score.subject_id = subject.id where score.id is null;

一张图搞定MySQL七种 JOIN 关系_第8张图片

8. union (左右表合并并去重)
语句:
select score.student_name,score.score,subject.name,subject.teacher from student_score as score left join subject on score.subject_id = subject.id
union 
select score.student_name,score.score,subject.name,subject.teacher from student_score as score right join subject on score.subject_id = subject.id;

一张图搞定MySQL七种 JOIN 关系_第9张图片

9. union (左右表独有)
语句:
select score.student_name,score.score,subject.name,subject.teacher from student_score as score left join subject on score.subject_id = subject.id where subject.id is null
union
select score.student_name,score.score,subject.name,subject.teacher from student_score as score right join subject on score.subject_id = subject.id where score.id is null;

一张图搞定MySQL七种 JOIN 关系_第10张图片

你可能感兴趣的:(MySQL,mysql)