表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
MySQL
# MySQL
select FirstName, LastName, City, State
from Person left join Address
on Person.PersonId = Address.PersonId
;
注意:如果没有某个人的地址信息,使用 where 子句过滤记录将失败,因为它不会显示姓名信息。
补充:
from子句中on条件主要用来连接表,其他不属于连接表的条件可以使用where子句来指定; join连接分为三种,1内连接,2外连接,3交叉连接; 1:inner join ,默认,所以可以省略inner关键字 2:left outer join ,左外连接,结果表中除了匹配行外,还包括左表有而右表中不匹配的行,对于这样的行,右表选择列置为null right outer join ,右外连接,结果表中除了匹配行外,还包括右表有而左表中不匹配的行,对于这样的行,左表选择列置为null natural join,自然连接,分为natural left outer join和natural right outer join,语义定义与inner join相同 3:cross join,交叉连接,实际上就是将两个表进行笛卡尔积运算,结果表的行数等于两表行数之积。
来源:力扣(LeetCode)