LeetCode第175题:组合两个表(MySQL)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: LeetCode第175题:组合两个表(MySQL)

前言


明天的希望,让我们忘了今天的痛苦。

本题难度不大,在看题的过程意识到之前学习过的MySQL中的关于表格连接的知识掌握相对薄弱,借着这道题将表格连接的内容进行复习并在此留下记录。

一、题目内容


表1: Person

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

表2: Address

+-------------+---------+
| 列名         | 类型    |
+-------------+---------+
| AddressId   | int     |
| PersonId    | int     |
| City        | varchar |
| State       | varchar |
+-------------+---------+
AddressId 是上表主键

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

FirstName, LastName, City, State

SQL架构:

Create table Person (PersonId int, FirstName varchar(255), LastName varchar(255))
Create table Address (AddressId int, PersonId int, City varchar(255), State varchar(255))
Truncate table Person
insert into Person (PersonId, LastName, FirstName) values ('1', 'Wang', 'Allen')
Truncate table Address
insert into Address (AddressId, PersonId, City, State) values ('1', '2', 'New York City', 'New York')

代码模板:

# Write your MySQL query statement below

二、解题过程


1. 解题思路


数据库查询问题相对简单,本题要求无论Person表是否有地址信息,都要将两个表中的FirstName, LastName, City, State四个字段查出出来。观察题目中的两个表可以发现,Person表中的字段PersonId是Address表中的外键,因此在连接时可以通过PersonId将两张表连接起来。在看到题目的第一想法是使用left join,因为Person表中的用户不一定具有具体的地址信息,所以想要在查询结果中保存Person表中的数据就需要使用left join的方式将左表的数据保存下来。

2. 解题代码


# Write your MySQL query statement below
select FirstName, LastName, City, State 
from Person 
left join Address 
on Person.PersonId = Address.PersonId

三、提交结果


image.png

四、MySQL连接的使用


如何在一张表中读取数据,这是相对简单的,但是在真正的应用中经常需要从多个数据表中读取数据。就涉及到了连接的问题,在MySQL中常用的连接有inner join(内连接或等值连接),left join(左连接),right join(右连接),full join(全连接)

  1. inner join:获取两个表中字段匹配关系的记录
  2. left join:获取左表所有记录,即使右表没有对应匹配的记录
  1. right join:获取右表所有记录,即使左表没有对应匹配的记录
  2. full join:如果某表中某一行在另一表中,没有匹配行,则相应列的内容为NULL

图示:

INNER JOIN … ON …


image.png

总结:inner join 连接查询到的内容为两张表的交集

LEFT JOIN … ON …


image.png

总结:left join 查询出左表的所有数据,右表中的数据如果有对应的数据就显示出来,没有对应的数据就用NULL来代替

RIGHT JOIN … ON …


image.png

总结:right join 查询出右表的所有数据,左表中的数据如果有对应的数据就显示出来,没有对应的数据就用NULL来代替

FULL JOIN … ON …


image.png

总结:full join为左表和和右表的集合,如果某一张表中某一行在另一表中没有匹配行,则相应列的内容用NULL来代替

总结


在实际的应用中数据库中经常会使用多张表的查询,很少会使用单张表的查询,因此对于多表查询的掌握更为重要,在多表查询中表格的连接查询首当其冲,接着这一道题再次对数据表连接方式做一个回顾与总结

image.png


相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
6月前
|
安全 关系型数据库 MySQL
【MySQL】表的增删查改
【MySQL】表的增删查改
|
6月前
|
关系型数据库 MySQL 数据库
数据迁移脚本优化过程:从 MySQL 到 Django 模型表
在大规模的数据迁移过程中,性能问题往往是开发者面临的主要挑战之一。本文将分析一个数据迁移脚本的优化过程,展示如何从 MySQL 数据库迁移数据到 Django 模型表,并探讨优化前后的性能差异。
|
6月前
|
SQL 关系型数据库 MySQL
mysql sql语句删除一个库下的所有表
mysql sql语句删除一个库下的所有表
46 1
|
6月前
|
分布式计算 DataWorks MaxCompute
DataWorks产品使用合集之需要将mysql 表(有longtext类型字段) 迁移到odps,但odps好像没有对应的类型支持,该怎么办
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
6月前
|
关系型数据库 MySQL
LeetCode //MySQL - 184. Department Highest Salary
LeetCode //MySQL - 184. Department Highest Salary
35 2
|
5月前
|
存储 SQL 关系型数据库
MySQL设计规约问题之在数据库设计中,为什么要适当考虑反范式的表设计
MySQL设计规约问题之在数据库设计中,为什么要适当考虑反范式的表设计
|
5月前
|
SQL 存储 数据库
MySQL设计规约问题之如何处理日志类型的表
MySQL设计规约问题之如何处理日志类型的表
|
6月前
|
关系型数据库 MySQL
蓝易云 - 如何修复MySQL中损坏的表
最后,为了防止数据丢失,定期备份数据是非常重要的。
157 3
|
5月前
|
运维 关系型数据库 MySQL
实时计算 Flink版产品使用问题之在处理MySQL表新增数据记录时,没有正确触发变更事件,该如何解决
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
6月前
|
SQL 存储 关系型数据库
MySQL数据库——SQL(1)-SQL通用语法、SQL分类、DDL(数据库操作、表操作)
MySQL数据库——SQL(1)-SQL通用语法、SQL分类、DDL(数据库操作、表操作)
64 1