力扣-刷MySQL(详细解析)

news2024/12/23 22:47:34

 🎉欢迎您来到我的MySQL基础复习专栏

☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克🍹
✨博客主页:小小恶斯法克的博客
🎈该系列文章专栏:重拾MySQL
🍹文章作者技术和水平很有限,如果文中出现错误,希望大家能指正🙏
📜 感谢大家的关注! ❤️

目录

🚀组合两个表

 🚀总结:关于on

 🚀超过经理收入的员工


🚀组合两个表

表: Person

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

表: Address

+-------------+---------+
| 列名         | 类型    |
+-------------+---------+
| AddressId   | int     |
| PersonId    | int     |
| City        | varchar |
| State       | varchar |
+-------------+---------+
addressId 是该表的主键(具有唯一值的列)。
该表的每一行都包含一个 ID = PersonId 的人的城市和州的信息。

编写解决方案,报告 Person 表中每个人的姓、名、城市和州。如果 personId 的地址不在 Address 表中,则报告为 null 。

以 任意顺序 返回结果表。

结果格式如下所示。

示例 1:

输入: 
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 的地址不在 Address 表中,则报告为 null 。

2.很显然,通过这句话无论 person 是否有地址信息都要返回信息,那么返回null,其实就是因为没有对应的城市和州

3.既然都要返回人的PersonId ,FirstName, LastName,要左表的全部信息,所以使用左查询

4.让person作左表,Address 作右表

5.我们分析出这一步还不算完成,我们还要知道左外连接on的具体知识,请看下面

6..很明显,在person表中,personId是它的主键,Address表中addressId对应了personId

7..那么我们的on后面的条件肯定是从personld这个字段来建立关系,关系就是p.PersonId = a.PersonId,由此可以返回出address表中的数据

8.select * from Person as p left join Address as a on 条件

9.把*优化一下

10.代码如下

select FirstName, LastName, City, State
from Person as p
left join Address as a
on p.PersonId = a.PersonId

执行: 

 

注意:如果没有某个人的地址信息,使用 where 子句过滤记录将失败,因为它不会显示姓名信息。 

 🚀总结:关于on

在 MySQL 中,多表查询中的左外连接(LEFT JOIN)是一种用于连接两个表的查询操作,它会返回左表中的所有记录,以及符合连接条件的右表记录。在左外连接中,ON 后面连接的条件具体是指定两个表之间的连接条件,它决定了在连接时哪些行应该被匹配。

具体来说,ON 后面的条件通常是用来指定连接两个表的列之间的关联关系。这些条件可以是等值比较(例如,table1.column1 = table2.column2),也可以是其他类型的比较操作(例如,大于、小于、包含等)。这些条件决定了在连接时哪些行应该被匹配起来。

ON 的作用是在进行表连接时指定连接条件,它告诉数据库引擎在进行左外连接时应该如何匹配两个表的行。通过指定连接条件,可以确保在连接时只有符合条件的行会被匹配起来,从而实现多表查询的目的。

举个例子,假设我们有两个表 A 和 B,我们想要以 A 表的所有记录为基础,同时将符合某些条件的 B 表记录连接起来。在这种情况下,我们可以使用左外连接来实现这一目的。ON 后面的条件将决定 A 表和 B 表之间的连接条件,只有满足条件的记录才会被连接起来。

 🚀超过经理收入的员工

表:Employee 

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| id          | int     |
| name        | varchar |
| salary      | int     |
| managerId   | int     |
+-------------+---------+
id 是该表的主键(具有唯一值的列)。
该表的每一行都表示雇员的ID、姓名、工资和经理的ID。

编写解决方案,找出收入比经理高的员工。

以 任意顺序 返回结果表。

结果格式如下所示。

示例 1:

输入: 
Employee 表:
+----+-------+--------+-----------+
| id | name  | salary | managerId |
+----+-------+--------+-----------+
| 1  | Joe   | 70000  | 3         |
| 2  | Henry | 80000  | 4         |
| 3  | Sam   | 60000  | Null      |
| 4  | Max   | 90000  | Null      |
+----+-------+--------+-----------+
输出: 
+----------+
| Employee |
+----------+
| Joe      |
+----------+
解释: Joe 是唯一挣得比经理多的雇员。

思路:

方法一

1.在这里面只有一张表,表中有一个很大的缺陷就是并没有去记录员工的直属领导是谁,只有一个字段managerId

2.这个managerId指的就是领导的id,所以managerId指代的就是当前表的主键,员工id

3.那么我们可以先找出员工对应的领导,如遇到这种类型的题,只有一个表,那必然是用到自连接的

4.提到自连接,就自然联想到了一句话,自连接查询中,必须要为表起别名,很简单的逻辑,自连接其实就是把这题想成两个表,一个员工表,一个领导表,只是说两个表长的一样而已,所以名字肯定是要不同,那么我们假设员工表是a,领导表是b

5.那么我们的员工对应的领导的连接条件是什么呢?

6.员工的managerId  = 领导的id

7.来实现一下这个过程(自连接的语法)

8.select * from Employee a join Employee b on b.id = a.managerId

9.但我们的目的并不是找员工对应的领导,我们还有一个条件,要员工工资大于领导工资,也就是a.salary > b.salary

10.我们又想起,连接两个条件的关键字是什么?and

11.此时select * from Employee a join Employee b on b.id = a.managerId and a.salary > b.salary

12.此时优化一下 * 

select a.name as Employee
from 
Employee as a
    join
Employee as b
    on
a.managerId =b.id and a.salary>b.salary ;

执行: 

 

方法二:

1.嵌套查询,直接抓着工资硬刚

2.Employee表还是取一个别名a 作为员工表

3.select name as Employee from Employee as a where salary >  经理的薪资

4.也就是select name as Employee from Employee as a where salary > (select salary from Employee where Id = a.Managerid )

5.大于号后面的条件就理解为,查取员工对应的领导的薪资

6.整体理解为员工的薪资 大于 员工对应的领导的薪资,则查询出来了

select name as Employee from Employee as a where salary > (select salary from Employee where Id = a.Managerid ) ;

写到这里,每日两题的力扣就结束了,但是对于第二题来说,我个人认为肯定是自连接的方式让大家更为接受!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1387246.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

16 命令行模式

命令行模式 将行为的执行与与行为的调用通过命令分离,行为的的调用者不需要知道具体是哪个类执行的,他们之间通过命令连接。 demo的目录结构 命令的执行者(接口) package behavioralpattern.commandpattern.actuator;import ja…

2024年腾讯云服务器多少钱1年?超便宜62元一年

腾讯云服务器租用价格表:轻量应用服务器2核2G3M价格62元一年、2核2G4M价格118元一年,540元三年、2核4G5M带宽218元一年,2核4G5M带宽756元三年、轻量4核8G12M服务器446元一年、646元15个月,云服务器CVM S5实例2核2G配置280.8元一年…

Github项目推荐-clone-voice

项目地址 GitHub - jianchang512/clone-voice 项目简述 一个声音ai工具。基于python编写。作用是音色复用。下面是官方说明:“这是一个声音克隆工具,可使用任何人类音色,将一段文字合成为使用该音色说话的声音,或者将一个声音使…

新火种AI|GPT-5前瞻!GPT-5将具备哪些新能力?

作者:小岩 编辑:彩云 Sam Altman在整个AI领域,乃至整个科技领域都被看作是极具影响力的存在,而2023年OpenAI无限反转的宫斗事件更是让Sam Altman刷足了存在感,他甚至被《时代》杂志评为“2023年度CEO”。 也正因此&…

Modbus协议学习第二篇之Modbus poll slave仿真软件初体验

软件准备 学习Modbus离不开硬件,好在我们可以通过仿真软件来模拟硬件,本篇博客就来简单介绍一下Modbus仿真软件的最基础使用方法,需要用到的3款仿真软件如下: Modbus Poll 64位 / Modbus Poll 32位(根据自己机器位数选…

【Python学习】Python学习14-函数

目录 【Python学习】Python学习14-函数 前言自定义函数创建语法自定义函数与调用参数传递参考 文章所属专区 Python学习 前言 本章节主要说明Python的函数。函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。 函数能提高应…

自定义vector的实现

实现前需要思考的一个问题 为什么需要将空间的申请与对象的构建分开 查看vector的模板参数时可以看到其有第三个参数是空间适配器allocator,查找其对外提供的成员函数不难发现它的实现逻辑是将空间的申请与对象的构建分开的,为什么呢?不弄清…

云畅科技技术中心被认定为湖南省省级企业技术中心

近日,湖南省工业和信息化厅公布《2023年第二批湖南省省级企业技术中心(第29批)》,云畅科技技术中心作为研发设计型代表入选。 省级企业技术中心是强化企业技术创新主体地位,增强企业自主创新能力,推动工业企业高质量发展的一个重要…

搬运5款帮你优化电脑的小工具软件

​ 你想让你的电脑更好用吗?这里有五款电脑软件可以帮你,它们可以让你的电脑更高效、美观、安全,快来看看吧! 1.窗口管理——MaxMax ​ MaxMax是一款窗口管理软件,可以让你自定义窗口的最大化行为,避免窗…

STC8H8K蓝牙智能巡线小车——2. 点亮左右转弯灯与危险报警灯

任务调用示例 RTX 51 TNY 可做多任务调度,API较为简单。 /* 接口API */// 创建任务 extern unsigned char os_create_task (unsigned char task_id); // 结束任务 extern unsigned char os_delete_task (unsigned char task_id);// 等待 extern unsig…

Ubuntu20.04下A-LOAM配置安装及测试教程(包含报错问题踩坑)

参考文章: ubuntu20.04下ros运行A-LOAM Ubuntu20.04下运行LOAM系列:A-LOAM、LeGO-LOAM、SC-LeGO-LOAM、LIO-SAM 和 LVI-SAM 需要学习源码的同学可以下载LOAM论文 LOAM论文链接 1.需要安装的库文件 1.1Eigen 3.3 可以直接使用apt命令安装,或…

C#,字符串匹配(模式搜索)AC(Aho Corasick)算法的源代码

Aho-Corasick算法简称AC算法,也称为AC自动机(Aho-Corasick)算法,1975年产生于贝尔实验室(The Bell Labs),是一种用于解决多模式字符串匹配的经典算法之一。 the Bell Lab 本文的运行效果: AC算法以模式树…

Android 13.0仿ios的hotseat效果修改hotseat样式

1.概述 在13.0系统产品rom定制化开发中,在项目需求的需要,系统原生Launcher的布局样式很一般,所以需要重新设计ui对布局样式做调整,产品在看到 ios的hotseat效果觉得特别美观,所以要仿ios一样不需要横屏铺满的效果 居中显示就行了,所以就要看hotseat的具体布局显示了 效…

Docker部署Traefik结合内网穿透远程访问Dashboard界面

文章目录 前言1. Docker 部署 Trfɪk2. 本地访问traefik测试3. Linux 安装cpolar4. 配置Traefik公网访问地址5. 公网远程访问Traefik6. 固定Traefik公网地址 前言 Trfɪk 是一个云原生的新型的 HTTP 反向代理、负载均衡软件,能轻易的部署微服务。它支持多种后端 (D…

『 C++ 』AVL树详解 ( 万字 )

🦈STL容器类型 在STL的容器中,分为几种容器: 序列式容器(Sequence Containers): 这些容器以线性顺序存储元素,保留了元素的插入顺序。 支持随机访问,因此可以使用索引或迭代器快速访问任何位置的元素。 主要的序列式…

tensorflow报错: DNN library is no found

错误描述 如上图在执行程序的时候,会出现 DNN library is no found 的报错 解决办法 这个错误基本上说明你安装的 cudnn有问题,或者没有安装这个工具。 首先检测一下你是否安装了 cudnn 进入CUDA_HOME下,也就是进入你的cuda的驱动的安装目…

【Leetcode 78】子集 —— 回溯法

78. 子集 给你一个整数数组nums,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 示例 1: 输入:nums [1,2,3] 输出:[[],[1],[2],[…

记ubuntu2004通过NetworkManager修改网络的优先级

这里写自定义目录标题 前言步骤 前言 起因在于万恶的校园网,突然台式有线死活没法认证(感觉是IP冲突了?另外一台电脑同样的系统就没有问题,连路由器WIFI也是可以的,路由器设置的是桥接模式,有没有大佬提供…

欧盟产品安全新规来袭,亚马逊发出紧急提醒(GPSR)要求

欧盟产品安全新规来袭,亚马逊发出紧急提醒(GPSR)要求 一、发布新规 这世界上唯一不变的事,或许就是变化本身。 在跨境电商领域,这个道理再次得到验证。近日,不少卖家都收到了一封来自亚马逊的通知。通知中…

德语B2 SampleAcademy

德语B2 SampleAcademy 一, Zweigliedrige Konnektion1, entweder... oder2, nicht nur... sondern auch3,sowohl... als auch4,einerseits... andererseits5, zwar...aber6, weder...noch7,je...desto/umso 一, Zweigliedrige Konnektion discontinuous conjunctions 1,…