SQL 多表连接 入门题

4 阅读1分钟

image.png

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. 字段选择与别名

  • 题目要求输出:FirstNameLastNameCityState

  • 注意字段名的大小写和表归属,避免歧义。

  • 最终 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 的使用场景和语法,就能轻松解决这类 “主表信息必须全部保留,附表信息可选” 的问题。