MySQL表连接

193 阅读1分钟

表连接这块搞不清楚,写个博客给自己捋一下

teacher.jpg

student.jpg

student_course.jpg

course.jpg

LEFT JOIN

left-join.jpg

mysql> SELECT c.id AS course_id,c.*,t.* FROM course c LEFT JOIN teacher t ON c.teacher_id = t.id;
  • c.id AS course_id 是将course表中id字段重命名为course_id展示,为了防止混淆
  • c.*表示course表所有字段数据
  • t.*表示teacher表所有字段数据
  • ON 后面跟着的条件是连接表的条件
  • course c 表示将 course 简写为 cteacher t 表示将 teacher 简写为 t
  • LEFT JOIN 为左连接,是以左边的表为基准,右表若没有对应的值,用NULL填补

这句话的意思就是 将course、teacher简写为c、t,courser_id代替course表里的id,course表是teacher表的左连接,连接表的条件course里的teacher_id等于teacher里的id

INNER JOIN

inner-join.jpg

mysql> SELECT c.id AS course_id,c.*,t.* FROM course c INNER JOIN teacher t ON c.teacher_id = t.id;

展示左右两表都有对应的数据(无法对应的就去掉,不填补NULL值)

RIGHT JOIN

right-join.jpg

以右表为基准,左边没有对应的值则填补NULL

多表混合连接

Snipaste_2021-05-28_17-39-18.jpg

mysql> SELECT * FROM
    -> student a
    -> LEFT JOIN
    -> student_course b
    -> ON a.id = b.student_id
    -> RIGHT JOIN
    -> course c
    -> ON b.course_id = c.id
    -> INNER JOIN teacher d
    -> ON c.teacher_id = d.id;

将student,student_course,course,teacher简写为a,b,c,d。a是b的左连接,c是b的右连接,d是c的内连接。

left-inner-right-detail.jpg