每天一道SQL题
每天一道SQL题之day02
1、题目:
表:Person
±------------±--------+
| 列名 | 类型 |
±------------±--------+
| PersonId | int |
| FirstName | varchar |
| LastName | varchar |
±------------±--------+
personId 是该表的主键列。
该表包含一些人的 ID 和他们的姓和名的信息。
表:Address
±------------±--------+
| 列名 | 类型 |
±------------±--------+
| AddressId | int |
| PersonId | int |
| City | varchar |
| State | varchar |
±------------±--------+
addressId 是该表的主键列。
该表的每一行都包含一个 ID = PersonId 的人的城市和州的信息。
编写一个SQL查询来报告Person
中每一个人的姓、名、城市和州。如果personId
的地址不为Address
,则报告为空 null
示例:
Person表:
personId | lastName | firstName |
---|---|---|
1 | wang | Allen |
2 | Alice | Bob |
Address表:
addressId | personId | city | state |
---|---|---|---|
1 | 2 | New York City | New York |
2 | 3 | Code | California |
输出:
firstName | lastName | city | state |
---|---|---|---|
Allen | Wang | Null | Null |
Bob | Alice | New York City | New York |
解释:
地址表中没有personId = 1 的地址,所以它们的城市和州返回null,addressId = 1 包含了 personId = 2 的地址信息。
2、题解
select FirstName,LastName,City,State
from Person
left join
Address
on
Person.PersonId = Address.PersonId
3、解析
由输出可以看到,firstName
、lastName
都不为空,而city
、state
有为null的。故可以用Person表来连接Address表。
故可以用多表连接。