Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >LeetCode数据库篇|175组合两个表

LeetCode数据库篇|175组合两个表

作者头像
刘早起
发布于 2020-05-12 01:28:37
发布于 2020-05-12 01:28:37
62100
代码可运行
举报
文章被收录于专栏:早起Python早起Python
运行总次数:0
代码可运行

大家好,从今天起我们将对Leetcode数据库相关题目进行讲解,如果对SQL相关操作还不是很了解的读者可以点击万字Mysql学习笔记复习。

通过做题来学习是最有效的方式,阅读的同时一定要思考每种解法的异同,最好能够敲一遍。

本文为第175题:组合两个表


01

题目与SQL架构

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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');

02

第一种解法

从题意上判断很简单,无论person是否有地址信息,说明地址信息(City, State)的查询结果允许为NULL。但是,姓名(FirstName, LastName)必须有

直观的解法是基于Person表的左连接。

注:写SQL语句的时候尽量按照执行顺序去写

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
FROM...
JOIN...
ON...
WHERE...
GROUP BY...
SELECT...
HAVING...
ORDER BY...
LIMIT...

先给出最简单直接的解法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT P.FirstName, P.LastName, A.City, A.State
FROM Person P 
LEFT JOIN Address A
ON P.PersonID = A.PersonID

03

第二种解法

另一种解法是将Address换成子查询临时表

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT P.FirstName, P.LastName, A.City, A.State
FROM Person P
LEFT JOIN (SELECT DISTINCT PersonId, City, State 
           FROM Address) A
on P.PersonId = A.PersonId;

这种解法针对于大数据、建立合适索引的情况下速度会加快,但是如果数据量太小,由于子查询会再产生临时表,有时候执行速度不一定有提升,见仁见智。主流的做法就是JOIN连表,如果用WHERE或者建立多个子查询也可以解决这道题。个人认为相对而言意义偏小。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-05-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 早起Python 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
LeetCode数据库(一)
如果一个国家的面积超过300万平方公里,或者人口超过2500万,那么这个国家就是大国家。
万能青年
2019/08/30
6510
【每日SQL打卡】​​​​​​​​​​​DAY 2 丨组合两个表【难度简单】
编写一个 SQL 查询,满足条件:无论 person 是否有地址信息,都需要基于上述两表提供 person 的以下信息:
不吃西红柿
2022/07/29
3970
MySQL 多表查询、连接查询(内连接、外连接)
查询的结果是一个二维表,它是students表和classes表的“乘积”,即students表的每一行与classes表的每一行都两两拼在一起返回
Michael阿明
2020/07/13
4.5K0
MySQL 多表查询、连接查询(内连接、外连接)
「SQL面试题库」 No_4 组合两个表
「SQL面试题库」是由 不是西红柿 发起,全员免费参与的SQL学习活动。我每天发布1道SQL面试真题,从简单到困难,涵盖所有SQL知识点,我敢保证只要做完这100道题,不仅能轻松搞定面试,代码能力和工作效率也会有明显提升。
不吃西红柿
2023/04/21
4120
☆打卡算法☆LeetCode 175. 组合两个表 算法解析
“编写一个SQL查询来报告包中每个人的信息,如果id不在表中,则报告显示为空,返回结果表。”
恬静的小魔龙
2022/08/07
3830
☆打卡算法☆LeetCode 175. 组合两个表 算法解析
leetcode-for-sql-组合两张表join
最近要准备开始刷LeetCode上关于SQL部分的练习题了。相信很多人是知道LeetCode的,毕竟太多互联网公司是从上面抽题目来考察面试者,尤其是算法相关的题目,它就像是一个庞大的题库。而作为打工人的我们,能做的就是多加练习,提升的能力
皮大大
2023/08/23
3470
7天快速掌握MySQL-DAY5
首先公布一下DAY4的作业答案。 项目五: --创建表 create table person ( personid int not null primary key, firstname varchar(20) not null, lastname varchar(20) not null ); --插入数据 insert into person values (101, 'ming', 'Yao'); insert into person values (102, 'lei', 'Wu'); inser
披头
2019/12/26
3450
LeetCode SQL
175.【简单】组合两个表 select p.FirstName,p.LastName,a.City,a.State from person p left join address a on p.personid=a.personid; 176.【简单】第二高的薪水 select ifnull((select distinct(Salary) from Employee order by Salary desc limit 1,1),null) as SecondHighestSalary; 177.【中等
hankleo
2020/09/17
3170
【LeetCode】--- MySQL刷题集合
这个 SQL 代码创建了一个名为 getNthHighestSalary 的函数,该函数接收一个整数参数 N,用于表示要查找第 N 高的薪水。函数的返回值是一个整数,代表第 N 高的薪水值。
用户11288958
2025/01/22
2930
【LeetCode】--- MySQL刷题集合
【leetcode两题选手】MySQL类题目(一)
编写一个 SQL 查询,满足条件:无论 person 是否有地址信息,都需要基于上述两表提供 person 的以下信息:
看、未来
2020/08/25
4590
【leetcode两题选手】MySQL类题目(一)
LeetCode-SQL(一)
表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 这一题,比较简单用left join就可以了。
_一级菜鸟
2019/12/20
5000
LeetCode 0175 - Combine Two Tables
Write a SQL query for a report that provides the following information for each person in the Person table, regardless if there is an address for each of those people:
Reck Zhang
2021/08/11
2690
LeetCode 数据库十道题解答
在之前做算法题的途中发现,LeetCode 上面推出了数据库解答,有十道题,于是这两天晚上时间就给做了。解答是次要主要的好处是,正好复习复习 SQL 一些查询语句的写法,比如自定义变量和常用函数。题目都比较简单,少做解释,以贴题目和答案为主。
四火
2022/07/19
5330
LeetCode-175. 组合两个表
编写一个 SQL 查询,满足条件:无论 person 是否有地址信息,都需要基于上述两表提供 person 的以下信息:
悠扬前奏
2019/05/28
5360
数据库常用sql语句总结「建议收藏」
大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说数据库常用sql语句总结「建议收藏」,希望能够帮助大家进步!!!
Java架构师必看
2022/07/06
23.7K0
数据库常用sql语句总结「建议收藏」
第 3.3 节 Leetcode-Database 题解
转载地址 https://github.com/CyC2018/CS-Notes/blob/master/README.md
全栈程序员站长
2021/04/07
6550
LeetCode 数据库 175. 组合两个表
原题链接 # Write your MySQL query statement below /* Write your T-SQL query statement below */ select Fi
glm233
2021/03/27
7540
7天快速掌握MySQL-DAY4
查询数据时,如果表名很长,使用起来不方便,此时,就可以为表取一个别名,用这个别名来代替表的名称 SELECT * FROM 表名 [AS] 别名; 注意,为表指定别名,AS关键字可以省略不写。
披头
2019/12/26
4740
在 Swift 中使用 SQL 组合人员和地址数据
在本篇文章中,我们将讨论如何结合两个表——Person 和 Address,以便生成包含每个人的姓名和地址信息的结果表。如果某人的地址信息不存在,则对应的城市和州返回为 null。我们将用 Swift 和 SQLite 数据库实现这一功能,并详细分析其逻辑。
Swift社区
2025/01/27
2850
在 Swift 中使用 SQL 组合人员和地址数据
leet-code两表求合查询
编写一个SQL查询来报告Person表中每个人的姓、名、城市和州。如果personId的地址不在Address表中,则报告为空null 。以 任意顺序 返回结果表。
兔云小新LM
2022/11/21
6280
相关推荐
LeetCode数据库(一)
更多 >
领券
一站式MCP教程库,解锁AI应用新玩法
涵盖代码开发、场景应用、自动测试全流程,助你从零构建专属AI助手
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验