MySQL的left join/right join

书写格式 : 

左外连接: 表A left join 表B on 条件

右外连接:   表A right join 表B on 条件

外连接的出现,目的就是为了在查询过程中以免丢失数据的出现,假设有两张表,A表和B表,以A表为主体,查询A表和B表满足一定条件的记录,如果不使用外连接,查询结果会将A表中不满足条件的记录也过滤掉,从而导致查询结果数据的丢失,这是我们所不期望的,如果使用外连接,那么A表中不符合条件的记录也将会保留下来,将不会导致数据的丢失。

说了那么多,举个例子就一目了然了。

学生表:student

学生课程关系表:SC

例1:查询每个学生及其选修课程的情况,没有选修课程的学生也要保留

不使用外连接的情况:

select student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade
from Student, SC
where student.Sno = sc.Sno;

我们会发现,查询结果将小华和小乐没有选课的同学的信息过滤掉了,这不是我们所期待的

使用外连接后:

左外连接:

select student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade
from Student left join SC on
student.Sno = sc.Sno;

你会发现,会将没有选课的同学的信息也保留下来了,这正是我们想要的

右外连接:

外连接的格式: 表A left/right join 表B on 条件

左外连接,就是以左边的表为主体,也就是以写在left on前面的表为主体,也就是以表A为主体

右外连接,和左外连接相反,是以right on后面的表为主体,也就是以表B为主体

用右外连接实现上述功能:

select student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade
from  SC right join Student on
student.Sno = sc.Sno;

实现相同的功能,比较两个SQL

左连接:

select student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade
from Student left join SC on
student.Sno = sc.Sno;

右连接:

select student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade
from  SC right join Student on
student.Sno = sc.Sno;

对比发现,左连接:是写在left join左边的表为主体,所以叫左连接

右连接以right join右边的表为主体,所以叫右连接,

其实两种都是为了实现相同功能而出现的,一般都是用左连接

猜你喜欢

转载自blog.csdn.net/Kermit_father/article/details/85937406