力扣-刷MySQL(详细解析)

 🎉欢迎您来到我的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 ) ;

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

DataX的安装使用

DataX概述: DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括 MySQL、Oracle、HDFS、Hive、OceanBase、HBase、OTS、ODPS 等各种异构数据源之间高效的数据同步功能。DataX采用了框架 插件 的模式,目前已开源,代…

救赎之道,就在其中

时光荏苒,不知不觉距离我踏入职场的第一天已经快一年了。最近也是看到平台举办年度征文活动,借此契机重新审视自己这两年来的成长历程,也希望对正在迷茫的人提供一些精神上的慰藉。 1.对未来的迷茫 如果要给两年前的自己打上标签&#xff0…

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

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

Hadoop 3.2.4 集群搭建详细图文教程

一、集群简介 Hadoop 集群包括两个集群:HDFS 集群、YARN 集群。两个集群逻辑上分离、通常物理上在一起;两个集群都是标准的主从架构集群。逻辑上分离 两个集群互相之间没有依赖、互不影响 物理上在一起 某些角色进程往往部署在同一台物理服务器上 MapR…

常见的反爬虫风控 | 验证码风控

一.前言 在当今信息技术迅速发展的背景下,网站和在线服务面临着日益增长的自动化访问威胁,这些大多来自于各类爬虫程序。这种大量的自动化访问不仅对网站的正常运行构成压力,还可能导致敏感数据的泄露,甚至被用于不正当竞争和恶意…

给 Linux 主机添加 SSH 双因子认证

GitHub:https://github.com/google/google-authenticator-android 在信息时代,服务器安全愈发成为首要任务。Linux 主机通过 ssh 方式连接,当存在弱密码的情况下,通过暴力破解的方式会很容易就被攻破了,本文将向你展示…

java的面向对象编程(oop)——static概述及初始单例设计模式

前言: 过了入门阶段,开始学习进阶语法了。每天进步一点点,打好基础,daydayup! 什么是面向对象编程(oop),可以看这篇 java的面向对象编程(oop)概述及案例 static概述 s…

亚信安慧AntDB超融合框架——数智化时代数据库管理的新里程碑

在信息科技飞速发展的时代,亚信科技AntDB团队提出了一项颠覆性的“超融合”理念,旨在满足企业日益增长的复杂混合负载和多样化数据类型的业务需求。这一创新性框架的核心思想在于融合多引擎和多能力,充分发挥分布式数据库引擎的架构优势&…

DBA技术栈(三):MySQL 性能影响因素

文章目录 前言一、影响MySQL性能的因素1.1 商业上的需求1.2 应用架构规划1.3 查询语句使用方式1.4 Schema的设计1.5 硬件环境 总结 前言 大部分人都一致认为一个数据库应用系统(这里的数据库应用系统概指所有使用数据库的系统)的性能瓶颈最容易出现在数…

什么是DDOS高防ip?DDOS高防ip是怎么防护攻击的

随着互联网的快速发展,网络安全问题日益突出,DDoS攻击和CC攻击等网络威胁对企业和网站的正常运营造成了巨大的威胁。为了解决这些问题,高防IP作为一种网络安全服务应运而生。高防IP通过实时监测和分析流量,识别和拦截恶意流量&…

Pixel手机进入工程模式、是否是Version版本?

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

个人数据备份方案分享(源自一次悲惨经历)

文章目录 1 起源2 备份架构2.1 生活照片2.2 生活录音2.3 微信文件2.4 工作文件2.5 笔记、影视音乐、书籍 3 使用工具介绍3.1 小米云服务3.2 中国移动云盘3.3 小米移动硬盘(1T)3.4 FreeFileSync 4 总结 1 起源 本文的灵感源于我个人的一次不幸遭遇&#…

java自定义排序Comparator

📑前言 本文主要是【java】——java自定义排序Comparator的文章,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是听风与他🥇 ☁️博客首页:CSDN主页听风与他 🌄每…

腾讯云主机价格表和优惠活动汇总(2024年更新)

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

ENVI5.6版本中规则与不规则图像裁剪操作

图像裁剪的目的是将研究之外的区域去除,常用的是按照行政区划边界或自然区划边界进行图像的裁剪,在基础数据生产中,还经常要做标准分幅裁剪。按照ENVI的图像裁剪过程,可分为规则裁剪和不规则裁剪。 ENVI5.6之前版本的图像裁剪工具…

*(长期更新)软考网络工程师学习笔记——Section 22 无线局域网

目录 一、IEEE 802.11的定义二、IEEE 802.11系列标准三、IEEE 802.11的两种工作模式四、CDMA/CA协议(一)CDMA/CA协议的定义(二)CDMA/CA协议的过程 五、AC与AP(一)接入控制器AC(二)无…

浅谈6种流行的API架构风格

前言 API在现代软件开发中扮演着重要的角色,它们是不同应用程序之间的桥梁。编写业务API是日常开发工作中最常见的一部分,选择合适的API框架对项目的成功起到了至关重要的作用。本篇文章将浅谈一下当前6种流行的API架构风格的优点、缺点以及适用场景。 …

MySQL解决海量数据和并发性的方案——分库分表

分库分表其实是两个事情,为了解决的东西实际上也是两个,但是一定要注意,不到最后万不得已,不要用分库分表,因为这会对数据查询有极大限制。 数据量太大查询慢的问题。 这里面我们讲的「查询」其实 主要是事务中的查询…

数学建模-Matlab R2022a安装步骤

软件介绍 MATLAB是一款商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分,可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程…

idea写sql语句快捷键提醒,mapper注解开发,mybatis

第一步:注入SQL语言 1.显示上下文操作(没有这个选项的话就选中sql然后直接alt回车快捷键)2.注入语言或引用 3.mysql 第二步:配置MySQL数据库连接 1.首先点击侧边的数据库,再点击上面的加号 2.点击数据源&#xff…