开发中,在使用两表联查的时候,不知道应该使用LEFT JOIN、ROGHT JOIN还是INNER JOIN?
今天来聊一下三者的区别,开完后根据不同的情况就知道应该采用什么连接了
表示例:
表关系,t_user表中的id=t_user_diary表中的uid
INNER JOIN
INNER JOIN属于内连接,使用这个连接查询两表的数据只会展示两表中符合关联条件的数据,也就是说其中一个表的一条数据和在另外一个表中没有关联的数据,那么这条数据就不会展示出来。
select
*
from
t_user u
inner join t_user_diary d
on u.id=d.uid
查询结果:
t_user表中的id为4的用户在,t_user_diary表没有关联的数据所以没有展示id为4的用户的信息
LEFT JOIN
LEFT JOIN属于外连接也叫左连接,使用这个连接去查询两表数据时,左边表的数据会全部显示,如果左表(from关键字后写的表名)中的一条数据在右表(LEFT JOIN关键字后写的表名)没有关联的数据,则查询出的数据右表没有关联的数据会显示null。
select
*
from
t_user u
left join t_user_diary d
on u.id=d.uid
查询结果:
t_user表中的id为4的用户在右表中没有关联的数据,查询结果右表数据则会显示null
RIGHT JOIN
RIGHT JOIN属于外连接也叫右连接,使用这个连接去查询两表数据时,右边表的数据会全部显示,如果左表(from关键字后写的表名)中的一条数据在右表(RIGHT JOIN关键字后写的表名)没有关联的数据,则查询出的数据左表没有关联的数据会显示null。
select
*
from
t_user u
right join t_user_diary d
on u.id=d.uid
查询结果:
t_user表中id为4的用户,在t_user_diary表中没有关联的数据,但是使用的是右连接会显示右表的所有数据,所以左表id为4的信息会显示null
内连接和外连接的区别
内连接和外连接都是用于在多个表之间进行联接(JOIN)的操作,但它们之间有一些不同的区别。主要的区别如下:
- 内连接(INNER JOIN):只返回两个表中满足联接条件(即 ON 子句指定的条件)的行。也就是说,只有在两个表中都存在匹配的数据时才会返回结果。如果其中一个表中没有与另一个表匹配的数据,则该表中的所有行都不会出现在结果中。
- 外连接–左连接(LEFT JOIN):返回左侧表中的所有行以及右侧表中与其匹配的行,如果右侧表中没有与左侧表匹配的行,则返回 NULL 值。
- 外连接–右连接(RIGHT JOIN):返回右侧表中的所有行以及左侧表中与其匹配的行,如果左侧表中没有与右侧表匹配的行,则返回 NULL 值。
总体来说,内连接返回匹配的数据,左连接和右连接则会返回至少一个表中的所有行,并且外连接会返回所有数据,包括没有匹配的行。