题目来源:
力扣的数据库算法题,原题链接:
https://leetcode-cn.com/problems/combine-two-tables
题目描述:
表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
分析:
由题目可以看出来,首先是需要两张表关联查询的,其次就是哪怕person表中的personid在地址表中没有,也需要显示四个字段。只有left join符合这个条件。
left join就是左连接,它是指哪怕在联立的右表中没有相对应的数据,它也会完整的显示所有的查询字段,没有查询到的字段数据就使用null来表示。
由此可以反推right join ,在相对情况下,跟left join的使用情况相反。
inner join则是如果两个表有一个没有数据,则完全不显示,某种情况下相当于where条件
答案:
//写得有点随意,应引以为戒
select p.firstname,p.lastname,a.city,a.state from person p left join address a on p.personid=a.personid