学会使用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
一张图进行总结
题目意思是就算没有地址信息(为NULL),那么姓名也会打印出来。即重要的表示Person表,需要的是Person的信息。
那肯定选择将Person作为左表,Address作为右表,使用left join,对应左上角的图。
测试
使用一个极端测试案例,两表没有同一个PersonId,但是也要打印出PersonId为1的信息。
select FirstName, LastName, City, State from Person left join Address on Person.PersonId = Address.PersonId;
如果使用right join那么将会出现只有地址和国家,打印的就不是我们想要的person信息。