Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
一、题目描述:
题目来源:LeetCode>SQL架构>175.组合两个表
表1: Person
| 列名 | 类型 |
|---|---|
| PersonId | int |
| FirstName | varchar |
| LastName | varchar |
PersonId 是上表主键
表2: Address
| 列名 | 类型 |
|---|---|
| AddressId | int |
| PersonId | int |
| City | varchar |
| State | varchar |
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
四、总结:
-
个人分析此题目主要考察对于表关联关系的构建,以及需要知道左关联和右关联的特点是什么
-
知识点比较基础,申请题意,稍加梳理,难度并不大
-
加油共勉