写点什么

数据库每日一题 --- 第 10 天:组合两个表

作者:知心宝贝
  • 2022 年 6 月 12 日
  • 本文字数:1201 字

    阅读完需:约 4 分钟

数据库每日一题---第10天:组合两个表

一、问题描述

: 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.表连接2.建议用时10~25min
复制代码

三、问题分析

这一题就是一道考察连接基础的问题,我把SQL里面常见的几种语言列举一下:


  • A inner join B:内连接,取交集

  • A left join B:左外连接,取 A 全部,B 没有对应的值,则为null

  • A right join B:右外连接,取 B 全部,A 没有对应的值,则为null

  • A full outer join B:全外连接,取并集,彼此没有对应的值为null


这一题,我们看一下题目的要求:两个表 PersonAddress,如果右侧的地址号未出现在左侧表中,直接置为 null。


那么选择哪一种连接方式,就显而易见了。简单的选择一下左外连接,一下子问题就会迎刃而解

四、编码实现

select p.firstName,p.lastName,a.city,a.statefrom Person pleft join Address a on p.personId=a.personId
复制代码

五、测试结果



发布于: 刚刚阅读数: 4
用户头像

知心宝贝

关注

公众号:穿越计算机的迷雾 2022.03.07 加入

生于尘埃 溺于人海 死于理想高台

评论

发布
暂无评论
数据库每日一题---第10天:组合两个表_前端_知心宝贝_InfoQ写作社区