Post

W B

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


表 1:person

列名类型说明
personIdint主键
FirstNamevarchar 
LastNamevarchar 

表 2:address

列名类型说明
AddressIdint主键
PersonIdint 
Cityvarchar 
Statevarchar 

这个需求是 无论 person 是否有地址信息 都要显示,所以我们需要用 LEFT JOIN 来保证 person 表里的数据不会因为没有地址而被过滤掉。

SQL 语句如下:

1
2
3
4
5
6
7
8
SELECT 
    p.FirstName,
    p.LastName,
    a.City,
    a.State
FROM person p
LEFT JOIN address a
    ON p.personId = a.PersonId;

解释:

  • LEFT JOIN:以 person 表为主表,即使 address 中没有匹配记录,也会显示 person 数据,CityState 会显示 NULL
  • pa 是别名,方便书写。
  • ON p.personId = a.PersonId 是连接条件。

如果希望 没有地址的人 City 和 State 显示为空字符串而不是 NULL,可以用 COALESCE

1
2
3
4
5
6
7
8
SELECT 
    p.FirstName,
    p.LastName,
    COALESCE(a.City, '') AS City,
    COALESCE(a.State, '') AS State
FROM person p
LEFT JOIN address a
    ON p.personId = a.PersonId;

This post is licensed under CC BY 4.0 by the author.