LeetCode笔记:组合两个表
问题
表 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
解法
思路:
- 两表的关联查询,有四种情况
- 左连接(left join),取左边表的全部字段
- 右连接(right join),取右边表的全部字段
- 内连接(inner join),取左右两边表的公共字段
- 外连接(full join),取两边表的所有字段
- 这里需要取得左边表的全部字段,所以使用左连接
- 为了从中查出需要的字段,还需要让左表的主键等于左表在右表中的外键
代码一:
# Write your MySQL query statement below
-- 对两个表重命名,可以清楚的看到需要查询的四个字段分别来自哪个表
select p.FirstName,p.LastName,a.City,a.State
from Person as p left join Address as a
on p.PersonId = a.PersonId;
代码二:
# Write your MySQL query statement below
-- 简洁的写法,直接取得表中的字段
select FirstName,LastName,City,State
from Person left join Address
on Person.PersonId = Address.PersonId;
评论