【刷题记录】1.组合两个表

250 阅读1分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

一、题目描述:

题目来源:LeetCode>SQL架构>175.组合两个表

表1: Person

列名类型
PersonIdint
FirstNamevarchar
LastNamevarchar

PersonId 是上表主键

表2: Address

列名类型
AddressIdint
PersonIdint
Cityvarchar
Statevarchar

AddressId 是上表主键

 

要求:编写一个 SQL 查询,满足条件:无论 person 是否有地址信息,都需要基于上述两表提供 person 的以下信息:

FirstName, LastName, City, State

二、思路分析:

1.首先观察两张表的表结构,【Person】表除了PersonId,其他都是次要字段;【Address】表除了AddressId、PersonId,其他都是次要字段。

2.梳理两张表的关联关系,从字段名可以看出,【Person】表PersonId字段对应【Address】表的PersonId字段(一对一or一对多暂不明确)

3.理解题意,“无论 person 是否有地址信息”表明【Person】表中不一定每条数据在【Address】表中都有对应数据,“都需要基于上述两表提供 person 的以下信息”表明这里需要做一次主表和副表关联。

4.最后结合以上分析,可以很明确的得知,【Person】表作为主表,【Address】表作为副表,用left join或者right join进行关联即可

三、AC 代码:

SELECT FirstName, LastName, City, State 
FROM Person 
LEFT JOIN Address ON Person.PersonId = Address.PersonId

四、总结:

  1. 个人分析此题目主要考察对于表关联关系的构建,以及需要知道左关联和右关联的特点是什么

  2. 知识点比较基础,申请题意,稍加梳理,难度并不大

  3. 加油共勉