1. 表连接类型:LEFT JOIN(左连接)
-
核心逻辑:以左表(
Person)为基准,匹配右表(Address)的记录。 -
如果右表没有匹配的行,对应的字段会返回
NULL,正好符合题目 “地址不存在则返回 null” 的要求。 -
语法示例:
sql
SELECT ... FROM Person LEFT JOIN Address ON Person.PersonId = Address.PersonId
2. 主键与外键关系
Person.PersonId是主键(唯一标识每个人)。Address.PersonId是外键(关联到Person表的主键),用来表示这条地址属于哪个人。- 连接条件必须写在
ON子句中:ON Person.PersonId = Address.PersonId。
3. 字段选择与别名
-
题目要求输出:
FirstName、LastName、City、State。 -
注意字段名的大小写和表归属,避免歧义。
-
最终 SQL 示例:
sql
SELECT p.FirstName, p.LastName, a.City, a.State FROM Person p LEFT JOIN Address a ON p.PersonId = a.PersonId;
4. 结果集的完整性
- 左连接会保留左表所有行,即使右表没有匹配记录,也不会丢失
Person表中的数据。 - 对比:如果用
INNER JOIN,没有地址的人会被直接过滤掉,不符合题目要求。
💡 易错点提醒
- ❌ 不要用
INNER JOIN:会丢失没有地址的用户。 - ❌ 不要把连接条件写在
WHERE里:会变成等价的INNER JOIN。 - ✅ 必须用
LEFT JOIN并将连接条件放在ON子句中。
📌 总结
这道题的本质是理解 左连接的语义: “以左表为主,右表补充信息,无匹配则补空” 。掌握了 LEFT JOIN 的使用场景和语法,就能轻松解决这类 “主表信息必须全部保留,附表信息可选” 的问题。