175.组合两个表

题目

表:Person

        +-------------+---------+
        | 列名         | 类型     |
        +-------------+---------+
        | PersonId    | int     |
        | FirstName   | varchar |
        | LastName    | varchar |
        +-------------+---------+
personId 是该表的主键列。
该表包含一些人的 ID 和他们的姓和名的信息。
        
表:Address

        +-------------+---------+
        | 列名         | 类型    |
        +-------------+---------+
        | AddressId   | int     |
        | PersonId    | int     |
        | City        | varchar |
        | State       | varchar |
        +-------------+---------+
 addressId 是该表的主键列。
 该表的每一行都包含一个 ID = PersonId 的人的城市和州的信息。
        
编写一个SQL查询来报告Person表中每个人的姓,名,城市和州.如果personId的地址不在Address表中,则报告为空null,以任意顺序返回结果表.


查询结果格式如下所示:
输入: 
Person表:
+----------+----------+-----------+
| personId | lastName | firstName |
+----------+----------+-----------+
| 1        | Wang     | Allen     |
| 2        | Alice    | Bob       |
+----------+----------+-----------+
Address表:
+-----------+----------+---------------+------------+
| addressId | personId | city          | state      |
+-----------+----------+---------------+------------+
| 1         | 2        | New York City | New York   |
| 2         | 3        | Leetcode      | California |
+-----------+----------+---------------+------------+
输出: 
+-----------+----------+---------------+----------+
| firstName | lastName | city          | state    |
+-----------+----------+---------------+----------+
| Allen     | Wang     | Null          | Null     |
| Bob       | Alice    | New York City | New York |
+-----------+----------+---------------+----------+
解释: 
地址表中没有 personId = 1 的地址,所以它们的城市和州返回 null。
addressId = 1 包含了 personId = 2 的地址信息。
解答思路:
1.先以personid连接表;
2.因为要求没有地址返回空,并不是所有的都有地址,但是所有的姓名都有,所以左连接,地址没有默认为空.
3.查看要打印的内容是什么,让他们的列保持一致即可.

考察点:
LEFT JOIN: 保留左表内容,右表不存在的列使用 Null 代替

参考答案:
select 
    firstName,
    lastName,
    City as `city`,
    State as `state`
from Person
left join Address
on Person.PersonId = Address.PersonId;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lucky bigdata

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值