菜鸟晋级之力扣SQL爆刷简单题-175题组合两个表(outer join inner join where on)

本文讲述了如何使用SQL的leftjoin和outerjoin解决Person表与Address表的组合问题,强调了在外键关联中考虑可能存在的空值,并解释了on和where在不同情况下的区别。
摘要由CSDN通过智能技术生成

菜鸟晋级之力扣SQL爆刷简单题-175题组合两个表

175. 组合两个表

1.题目描述

编写解决方案,报告 Person 表中每个人的姓、名、城市和州。如果 personId 的地址不在 Address 表中,则报告为 null。

正确代码:

select firstName, lastName, city, state
from Person left join Addressc
on Person.PersonId = Address.PersonId
;

2.解题思路

组合俩个表-力扣官方解答

方法:使用 join...on

  • 因为表 Address 中的 personId 是表 Person 的外关键字,所以我们可以连接这两个表来获取一个人的地址信息。

  • 考虑到可能不是每个人都有地址信息,我们应该使用 outer join 而不是默认的 inner join。

  • 如果没有某个人的地址信息,使用 where 子句过滤记录将失败,因为它不会显示姓名信息。

3.知识记录

错误代码:

select firstName, lastName, city, state
from Person **join** Address
**where** Person.PersonId = Address.PersonId
;
3.1. left join使用(各类join区别)

inner join、outer join、right join、left join 之间的区别

1.join(Nested Loop Join-嵌套循环连接)
  • 通过 驱动表的结果集 作为循环基础数据,然后一条一条的通过 该结果集 中的数据作为过滤条件到下一个表中查询数据,然后合并结果。
  • 如果还有第三个参与 Join,则再通过前两个表的 Join 结果集作为循环基础数据,再一次通过循环查询条件到第三个表中查询数据
  • 所以驱动表的选择非常重要,驱动表的数据小可以显著降低扫描的行数。(驱动表就是主表,left join中的左表就是驱动表,right join中的右表是驱动表)
2.inner join和outer join 区别

注:outer join分为left和right(left joinleft outer join ;right joinright outer join)

  • inner join on:内联操作,将符合ON条件的A表和B表结果均搜索出来,然后合并为一个结果集

  • left join on(合并去左边):左联操作,将符合ON条件的B表结果搜索出来,然后左联到A表上,然后将合并后的A表输出

  • right join on(合并去右边):右联操作,将符合ON条件的A表结果搜索出来,然后右联到B表上,然后将合并后的B表输出

where 和 on 区别

SQL语句中 where 和 on 的区别

  • on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回表中的记录(有null的数据也会返回)

  • where条件是在临时表生成好后,再对临时表进行过滤的条件(where后的条件对临时表中的记录进行过滤)

做left join操作的时候,先笛卡尔积处理,无论是否有空,都是表之间的连接

如果是on,直接输出;如果是where,在这个基础上再对null进行过滤,但是这样其实就没有left join的意义了。

所以,一般用outer join的时候,就用on

如果对您有帮助的话,可以加我的公众号~
https://mp.weixin.qq.com/s/B1tkQoUW2QNwZBeBe7-WRQ
网络安全学习记录日记
在这里插入图片描述

  • 23
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bessie_Lee_gogogo

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值