组合两个表

表1: Person

1
2
3
4
5
6
7
8
+-------------+---------+
| 列名 | 类型 |
+-------------+---------+
| PersonId | int |
| FirstName | varchar |
| LastName | varchar |
+-------------+---------+
# PersonId 是上表主键

表2: Address

1
2
3
4
5
6
7
8
9
+-------------+---------+
| 列名 | 类型 |
+-------------+---------+
| AddressId | int |
| PersonId | int |
| City | varchar |
| State | varchar |
+-------------+---------+
# AddressId 是上表主键

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

1
FirstName, LastName, City, State

解题思路:

可以参考七种连接来解决:

  1. 左连接:左表的全部记录,右表不满足的列补空
  2. 右连接:右表的全部记录,左表不满足的列补空

代码:

1
2
3
4
5
SELECT FirstName, LastName, City, State
FROM Person p
LEFT JOIN Address a
ON
p.personid=a.personid

耗时:549ms

1
2
3
4
5
SELECT FirstName, LastName, City, State
FROM Address a
RIGHT JOIN Person p
ON
a.personid=p.personid

耗时:377ms

功能是一样,性能可能是执行时环境引起的。在查看他人答案时,语句相同,耗时却不一样。