【LeetCode-SQL每日一练】——1.组合两个表

举报
超梦梦梦梦 发表于 2022/03/21 22:05:52 2022/03/21
【摘要】 大家好呀,我是超梦梦梦梦。小伙伴们都知道,不管是在学习中还是日常工作中,几乎天天是要跟数据库打交道的,为了更好的操作数据库,我们的SQL知识储备是必不可少的。想要掌握好SQL,那少不了每天的练习与学习。从今天开始,小梦就和小伙伴们一起每天刷一道LeetCode-数据库(SQL)相关的题目,在例举相关知识点帮小伙伴们练习与学习,更好的掌握SQL。

 🎈写在前面

        🙋‍♂️大家好呀,我是超梦梦梦梦。小伙伴们都知道,不管是在学习中还是日常工作中,几乎天天是要跟数据库打交道的,为了更好的操作数据库,我们的SQL知识储备是必不可少的。想要掌握好SQL,那少不了每天的练习与学习。从今天开始,小梦就和小伙伴们一起每天刷一道LeetCode-数据库(SQL)相关的题目,在例举相关知识点帮小伙伴们练习与学习,更好的掌握SQL。

       🙋‍♂️ 小伙伴们如果在学习过程中有不明白的地方,欢迎评论区留言提问,小梦定知无不言,言无不尽



1. 题目概述

题目:

编写一个 SQL 查询,满足条件:无论 person 是否有地址信息,都需要基于表1和表2两表提供 person 的以下信息:

FirstName, LastName, City, State

LeetCode原题地址,点击进入~

表1: Person

+-------------+---------+
| 列名        |  类型      |
+-------------+---------+
| PersonId    | int       |
| FirstName   | varchar   |
| LastName    | varchar   |
+-------------+---------+
PersonId 是Person表主键

 表2: Address

+-------------+---------+
| 列名         | 类型    |
+-------------+---------+
| AddressId   | int     |
| PersonId    | int     |
| City        | varchar |
| State       | varchar |
+-------------+---------+
AddressId 是Address表主键
PersonId 是表 Person 的外键

2. 解题思路

       1. 我们先通读一下题目,先看题目中提到的表1(person)和表2(address),从表的结构可以看出,表1(person)是人的姓名信息,表2(address)是人的地址信息

       2. 我们都要通过Person表与AddressId表来查询出FirstName, LastName, City, State)这四个字段的信息。查询结果是两个表里的列名,所以需要多表查询

       3. 可能不是每个人都有地址信息,所以查询出来的数据有的person就会有City,State两个字段的信息,有的person就会没有,对应显示为null。考虑到有的人可能没有地址信息,要是查询结构要查所有人,需要保留表1(Person)里的全部数据,所以用左联结(left join)。

  4. 表 Address 中的 PersonId 是表 Person 的外关键字,两个表通过personId产生联结。


3. 代码实现

这里我们使用的是左外连接

select FirstName, LastName, City, State from Person left join Address on Person.PersonId = Address.PersonId;

在LeetCode上执行测试是否成功

 与预期结果一致,通过!


4. 知识小结——联表查询之外连接

         该题目主要考察了联表查询外连接的相关知识点,接下来带着小伙伴们快速回顾一下外连接的相关知识点,帮助大家学习与巩固。

外连接分为三种:左外连接(left join),右外连接(right join),全外连接(full join)。这里我们省略了outer 这个关键字。

外连接的一个重要特点:至少有一方保留全集,没有匹配行用NULL代替。

下面小梦把这三种外连接简单说一下:

    1. LEFT OUTER JOIN,简称LEFT JOIN,左外连接(左连接)

      结果集保留左表的所有行,但右表只包含与左表匹配的行。右表相应的空行为NULL值。

SELECT * FROM 表1 LEFT JOIN 表2 ON 表1.xx = 表2.xx

    2. RIGHT OUTER JOIN,简称RIGHT JOIN,右外连接 (右连接)

       结果集保留右表的所有行,但左表只包含与右表匹配的行。左表相应的空行为NULL值。

SELECT * FROM 表1 RIGHT JOIN 表2 ON 表1.xx = 表2.xx
 

    3. FULL OUTER JOIN,简称FULL JOIN,全外连接

       会把两个表所有的行都显示在结果表中。

SELECT * FROM 表1 FULL JOIN 表2 ON 表1.xx = 表2.xx



😀感谢小伙伴们支持,如果有什么疑问,欢迎留言询问,小梦定知无不言,言无不尽!

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。