LeetCode笔记:组合两个表

问题

表 1: Person

列名类型
PersonIdint
FirstNamevarchar
LastNamevarchar

PersonId 是上表主键

表 2: Address

列名类型
AddressIdint
PersonIdint
Cityvarchar
Statevarchar

AddressId 是上表主键

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

FirstName, LastName, City, State

解法

思路:

  1. 两表的关联查询,有四种情况
    • 左连接(left join),取左边表的全部字段
    • 右连接(right join),取右边表的全部字段
    • 内连接(inner join),取左右两边表的公共字段
    • 外连接(full join),取两边表的所有字段
  2. 这里需要取得左边表的全部字段,所以使用左连接
  3. 为了从中查出需要的字段,还需要让左表的主键等于左表在右表中的外键

代码一:

# 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;

参考

评论