表:?Person
+-------------+---------+
|? ? ? 列名? ??|? ?类型? |
+-------------+---------+
| PersonId? |? ? ?int? ??|
| FirstName | varchar |
| LastName | varchar |
+-------------+---------+
personId 是该表的主键(具有唯一值的列)。 该表包含一些人的 ID 和他们的姓和名的信息。?
表:?Address
+-------------+---------+
|? ? ? ?列名? ?|? ?类型? |
+-------------+---------+
| AddressId |? ? int? ??|
| PersonId? |? ? int? ? ?|
|? ? City? ? ? ?|varchar |
|? ? ?State? ? |varchar |
+-------------+---------+
addressId 是该表的主键(具有唯一值的列)。 该表的每一行都包含一个 ID = PersonId 的人的城市和州的信息。
?
编写解决方案,报告?Person?表中每个人的姓、名、城市和州。如果?personId?的地址不在?Address?表中,则报告为?null?。
以?任意顺序?返回结果表。
结果格式如下所示。
输入:
Person表:
+--------------+-----------------+-----------------+
|? ? personId |? ?lastName? ?|? ?firstName? ?|
+--------------+-----------------+-----------------+
|? ? ? ? ?1? ? ? ? |? ? ? Wang? ? ? |? ? ? ?Allen? ? ? ?|
|? ? ? ? ?2? ? ? ? |? ? ? ?Alice? ? ? ?|? ? ? ?Bob? ? ? ? |
+---------------+-----------------+----------------+
Address表:
+---------------+----------------+------------------+------------+
|? ?addressId |? ? personId? ?|? ? ? ? city? ? ? ? ?|? ? state? ? |
+---------------+-----------------+------------------+-------------+
|? ? ? ? ?1? ? ? ? ?|? ? ? ? ?2? ? ? ? ? ?|New York City| New York |
|? ? ? ? ?2? ? ? ? ?|? ? ? ? ?3? ? ? ? ? ?| Leetcode? ? ? ?| California |
+----------------+-----------------+------------------+--------------+
输出:
+-------=----+--------------+---------------+----------+
| firstName | lastName |? ? ? ?city? ? ? ?|? ? state? |
+-------------+--------------+---------------+----------+
|? ? ? Allen? ? |? ? ?Wang? ?|? ? ? ?Null? ? ? ?|? ?Null? ? |
|? ? ? Bob? ? ?|? ? ? Alice? ? | New York City | New York |
+--------------+-------------+----------------+------------+
?
?答:
select? firstName ,lastName,city,state
from? Person
left join Address
on Person.personId = Address.PersonId
这段SQL代码是用来从person
表中选择firstName
、lastName
、city
和state
字段,并与Address
表进行左连接(left join)。左连接会返回所有的person
记录,即使在Address
表中没有匹配的记录。?
具体方法参考:联表查询中的左联查询(left join )