问题
表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都有address,所以不能用inner join)
# left outer join,因为要保留左表的全部数据,因此要用左联结
select
FirstName, LastName, City, State
from Person left join Address
on Person.PersonId = Address.PersonId
知识点
1. 联结方式的选取
(参考:解答里面的【图解SQL面试题:多表如何查询】讲的很详细)2
2. 主键、外键和索引
主键:数据库中若干个属性里面,能唯一标识一条记录的属性,该属性就可以成为一个主键,不能有重复,不能为空;
外键:表的外键是另一个表的主键,可以有重复的可以为空;
索引:没有重复值,但可以为空。
(参考:关于数据库主键和外键(终于弄懂啦))