表连接这块搞不清楚,写个博客给自己捋一下
LEFT JOIN
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
简写为c
,teacher t
表示将teacher
简写为t
LEFT JOIN
为左连接,是以左边的表为基准,右表若没有对应的值,用NULL
填补
这句话的意思就是 将course、teacher简写为c、t,courser_id代替course表里的id,course表是teacher表的左连接,连接表的条件course里的teacher_id等于teacher里的id
INNER JOIN
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
以右表为基准,左边没有对应的值则填补NULL
多表混合连接
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的内连接。