vlambda博客
学习文章列表

mysql--联合两张表提取需要的信息

大家好我是CloudCoder,云计算码农,专注分享linux/go/java等相关技术。

学会使用mysql联合两张表

表一:
+-------------+---------+
| 列名         | 类型     |
+-------------+---------+
| PersonId    | int     |
| FirstName   | varchar |
| LastName    | varchar |
+-------------+---------+
PersonId 是上表主键

表二:
+-------------+---------+
| 列名         | 类型    |
+-------------+---------+
| AddressId   | int     |
| PersonId    | int     |
| City        | varchar |
| State       | varchar |
+-------------+---------+
AddressId 是上表主键

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/combine-two-tables
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

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

首先我们要明白的就是有哪些方式进行联表!

  • left join
  • right join
  • inner join
  • outer join

一张图进行总结

mysql--联合两张表提取需要的信息
img

那肯定选择将Person作为左表,Address作为右表,使用left join,对应左上角的图。

测试

使用一个极端测试案例,两表没有同一个PersonId,但是也要打印出PersonId为1的信息。

mysql--联合两张表提取需要的信息

select FirstName, LastName, City, State from Person left join Address on Person.PersonId = Address.PersonId;

mysql--联合两张表提取需要的信息

如果使用right join那么将会出现只有城市和国家,打印的就不是我们想要的person信息。