深入解析:Leetcode_175.组合两个表

在这里插入图片描述
在这里插入图片描述

分析:

通过查看输出,最后需要得出firstName lastName city state 这四个字段

观察到,Person表和Address表通过personId关联,所以这就是我们联查的条件

得出:

内连接写法:

select firstName ,lastName , city , state from Person as p, Address as a where p.personId = a.personId;
-- 显式内连接(更推荐,连接条件与筛选条件分离,可读性更高)
select p.firstName, p.lastName, a.city, a.state
from Person as p
inner join Address as a
on p.personId = a.personId;

但是这样就对了吗?
NONONO
在这里插入图片描述
我们没有照顾到 city 为 null 的人,每个人都必须照顾到,也就是所选表中的字段必须全部照顾到,查看Person表,我们需要照顾Person表中的每一个人,也就是每个人都必须要查询到,此时,就使用到了左链接

LEFT JOIN:返回左表的所有记录,以及右表中能匹配上的记录。如果右表没有匹配项,结果集中右表的字段则为 NULL。

INNER JOIN:只返回两个表中都能匹配上的记录。

RIGHT JOIN:返回右表的所有记录,以及左表中能匹配上的记录。如果左表没有匹配项,结果集中左表的字段则为 NULL。

左链接写法:
select firstName ,lastName , city , state from Person as p left join Address as a on p.personId=a.personId;

性能优化:大多数数据库对左连接的优化更好

右链接写法:
select firstName ,lastName , city , state from Address as a right join Person as p on p.personId=a.personId;
posted @ 2025-09-05 17:36  yjbjingcha  阅读(6)  评论(0)    收藏  举报