题目在这:https://leetcode-cn.com/problems/combine-two-tables/
sql表结构:
表1: Person
+-------------+---------+
| 列名 | 类型 |
+-------------+---------+
| PersonId | int |
| FirstName | varchar |
| LastName | varchar |
+-------------+---------+
PersonId 是上表主键
表2: Address
+-------------+---------+
| 列名 | 类型 |
+-------------+---------+
| AddressId | int |
| PersonId | int |
| City | varchar |
| State | varchar |
+-------------+---------+
AddressId 是上表主键
题目分析:
这是一道sql的题。
题目中有一关键信息:无论 person 是否有地址信息,都需要基于上述两表提供 person 的以下信息
。
也就是说:无论 person 是否有地址信息,都需要基于上述两表提供 person 的以下信息: FirstName, LastName, City, State 也就是说,地址信息(City, State)的查询结果是Null是OK的。但是,姓名(FirstName, LastName)必须有。
显然是使用左连接。 person表放到左边作为主表。
我们要从左连接的两个表里找到题目要求的四个信息:FirstName, LastName, City, State
约束条件显然是两个表中的personID相等。
答案:select FirstName, LastName, City, from Person left join Address on Person.PersonID = Address.PersonID;
知识点:
sql的左连接和右连接区别:1、左连接只要左边表中有记录,数据就能检索出来,而右连接是只要右边表中有记录;2、左连接是已左边表中的数据为基准,而右联接是左向外联接的反向联接。