力扣刷MySQL-第二弹(详细解析)

🎉欢迎您来到我的MySQL基础复习专栏
☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克🍹
✨博客主页:小小恶斯法克的博客
🎈该系列文章专栏:力扣刷题讲解-MySQL
🍹文章作者技术和水平很有限,如果文中出现错误,希望大家能指正🙏
📜 感谢大家的关注! ❤️
目录
🚀查找重复的电子邮箱
🚀查找没有买东西的顾客
🚀总结
🚀查找重复的电子邮箱
表:
Person+-------------+---------+ | Column Name | Type | +-------------+---------+ | id | int | | email | varchar | +-------------+---------+ id 是该表的主键(具有唯一值的列)。 此表的每一行都包含一封电子邮件。电子邮件不包含大写字母。 编写解决方案来报告所有重复的电子邮件。 请注意,可以保证电子邮件字段不为 NULL。
以 任意顺序 返回结果表。
结果格式如下例。
示例 1:
输入:
Person 表:
+----+---------+
| id | email |
+----+---------+
| 1 | a@b.com |
| 2 | c@d.com |
| 3 | a@b.com |
+----+---------+
输出:
+---------+
| Email |
+---------+
| a@b.com |
+---------+
解释: a@b.com 出现了两次。
解法一:
1.自连接
2.因为实际上就这一个表,一般这类题目都是首选用自连接的方法
3.那么自连接就是需要起别名
4.这里我们肯定是把它想成两个表,一个p1,一个p2
5.那么我们自连接后面的on的条件是什么?
6.因为要找重复的邮箱,所以我们肯定是找两个表相同的邮箱,即p1.email = p2.email
7.但是只有这一个条件肯定是不够的,因为你这里是把它想成了两张表,但实际上这两张表本来就是一样的,它们两的字段email里面的value本身也就是一样的,你只有这一个条件,没有任何意义
8.所以还需要一个条件,就是我们是根据不同的id相同的email,这才叫重复
9.连接两个不同的条件用and
10.两个表中id要不相同的去比较,即p1.Id != p2.Id
11.所以写为select p1.Email from Person p1 join Person p2 on p1.Email = p2.Email AND p1.Id!=p2.Id
12.但此时还是不对的,因为id为1的email=id为3的email,然后id为3的email=id为1的email,相当于最后输出email,会输出两次一样的,重复了
13.那么最后一步就是去重,用关键字distinct,代码如下
select distinct(p1.Email) from Person p1
join Person p2 on p1.Email = p2.Email AND p1.Id!=p2.Id
执行:

解法二:
1.使用 GROUP BY 和 HAVING 子句
2.这个解法首先按照电子邮件地址分组,然后使用 HAVING 子句筛选出出现次数大于 1 的电子邮件地址,从而找出重复的电子邮件。
SELECT email
FROM Person
GROUP BY email
HAVING COUNT(email) > 1;
解法三:
1.使用子查询
2.这个解法使用了子查询,首先在子查询中找出重复的电子邮件,然后在外部查询中选择出现在子查询结果中的电子邮件。
3.这个意思就相当于把解法2作为一个嵌套select,只是没有去重,然后外部再套一个select用于去找子查询中的email
5.用where去筛查子查询中的电子邮件
6.代码如下:
SELECT email
FROM Person
WHERE email IN (SELECT emailFROM PersonGROUP BY emailHAVING COUNT(email) > 1
);
不过博主比较推荐用第一种和第二种,逻辑比较清晰,最后一种相当于画蛇添足
🚀查找没有买东西的顾客
Customers表:+-------------+---------+ | Column Name | Type | +-------------+---------+ | id | int | | name | varchar | +-------------+---------+ 在 SQL 中,id 是该表的主键。 该表的每一行都表示客户的 ID 和名称。
Orders表:+-------------+------+ | Column Name | Type | +-------------+------+ | id | int | | customerId | int | +-------------+------+ 在 SQL 中,id 是该表的主键。 customerId 是 Customers 表中 ID 的外键( Pandas 中的连接键)。 该表的每一行都表示订单的 ID 和订购该订单的客户的 ID。
找出所有从不点任何东西的顾客。
以 任意顺序 返回结果表。
结果格式如下所示。
示例 1:
输入:
Customers 表:
+----+-------+
| id | name |
+----+-------+
| 1 | Joe |
| 2 | Henry |
| 3 | Sam |
| 4 | Max |
+----+-------+
Orders 表:
+----+------------+
| id | customerId |
+----+------------+
| 1 | 3 |
| 2 | 1 |
+----+------------+
输出:
+-----------+
| Customers |
+-----------+
| Henry |
| Max |
+-----------+
解法一:
1.要找出所有从不点任何东西的顾客,我们可以使用 SQL 中的 LEFT JOIN 和 IS NULL 来解决这个问题。
2.左外连接相当于查询左表的所有数据,也包含了左表和右表交集部分的数据
3.所以我们肯定是select * from Customers left join Orders on 条件
4.我们肯定是要给表取一个别名比较方便简洁
5.SELECT * FROM Customers c LEFT JOIN Orders o ON 条件
6.那么现在最重要的其实就是我们的ON后面的连接条件到底是什么?
7.即用Orders的外键,去关联Customers的主键,因为实际上Orders的外键代表的就是Customers的主键,所有条件是O.customerId = C.Id
8.即SELECT * FROM Customers c LEFT JOIN Orders o ON c.id = o.customerId
9.此时只是左外连接成功了,但是我们还没有完成,它只是把所有数据返回了,这时候我们要进行筛选
10.筛选我们用到where条件,那么where后面的条件如何写呢?
8..我们会把左表的所有数据返回,包括没有买东西的顾客和他们的订单,那么没有买东西的顾客就是null
9.我们再用where子句去过滤出Orders 表中没有对应订单的顾客,即 o.id IS NULL。这样就能找出所有从不点任何东西的顾客。
10.SELECT * FROM Customers c LEFT JOIN Orders o ON c.id = o.customerId WHERE o.id IS NULL;
11.再把*优化一下,代码如下:
SELECT c.name AS Customers
FROM Customers c
LEFT JOIN Orders o ON c.id = o.customerId
WHERE o.id IS NULL;
🚀总结
这个查询首先从 Customers 表中选择顾客的名称,并左连接 Orders 表,以便找出所有顾客和他们的订单。然后使用 WHERE 子句过滤出在 Orders 表中没有对应订单的顾客,即 o.id IS NULL。这样就能找出所有从不点任何东西的顾客。
在这个示例中,查询的结果会返回 Henry 和 Max,因为他们在 Orders 表中没有对应的订单记录。
解法二:
1.运用not in去找Customers表中谁的id,没有在Orders表中的CustomerId中
2.意思也就是,这4个人,谁没有顾客订单,我们就返回谁的名字
3.select * from Customers c where c.id not in (select CustomerId from Orders)
4.优化一下*,返回名字,然后字段取需要的别名Customers
5.代码如下
select Name Customers
from Customers c
where c.Id not in (select CustomerId from Orders
)相关文章:
力扣刷MySQL-第二弹(详细解析)
🎉欢迎您来到我的MySQL基础复习专栏 ☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克🍹 ✨博客主页:小小恶斯法克的博客 🎈该系列文章专栏:力扣刷题讲解-MySQL 🍹文章作者技术和水平很有限,如果文中出…...
LiveGBS流媒体平台GB/T28181功能-基础配置接入控制白名单黑名单配置控制设备安全接入设备单独配置接入密码
LiveGBS基础配置接入控制白名单黑名单配置控制设备安全接入设备单独配置接入密码 1、白名单配置应用场景2、接入控制2.1、白名单2.2、黑名单 3、搭建GB28181视频直播平台 1、白名单配置应用场景 LiveGBS国标流媒体服务,支持白名单配置。 可在设备注册前࿰…...
企业网站建站源码系统:Thinkphp5内核企业网站建站模板源码 带完整的安装代码包以及搭建教程
随着互联网的快速发展,企业对于网站的需求日益增强。为了满足这一市场需求,小编给大家分享一款基于Thinkphp5内核的企业网站建站源码系统。该系统旨在为企业提供一套功能强大、易于使用的网站建设解决方案,帮助企业快速搭建自己的官方网站&am…...
SC20-EVB ubuntu14.04 Andriod 5.1 SDK编译下载
1.ubuntu14.04安装环境配置 vi /etc/profile to add export JAVA_HOME/usr/lib/jvm/java-7-openjdk-amd64 export JRE_HOME J A V A H O M E / j r e e x p o r t C L A S S P A T H . : {JAVA_HOME}/jre export CLASSPATH.: JAVAHOME/jreexportCLASSPATH.:{JAVA_HOME}/lib…...
OpenCV——图像按位运算
目录 一、算法概述1、逻辑运算2、函数解析3、用途 二、代码实现三、结果展示 OpenCV——图像按位运算由CSDN点云侠原创,爬虫自重。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、算法概述 1、逻辑运算 OpenCV4 针对两个图像之…...
5 个被低估的开源项目
文章目录 1.集算器 -数据处理2. Firecamp - 邮递员替代方案3.Keploy——后端 测试4. Hanko - 密钥验证5. Zrok - Ngrok 类固醇 长话短说 本文列出了五个不太受欢迎的优秀项目,您应该尝试一下。🔥 这些工具旨在改进数据处理、API 开发、后端测试、身份验…...
go语言初探(一)
package mainimport ("fmt""time" )func main() {fmt.Print("hello go!")time.Sleep(1 * time.Second)}运行后,结果如下: 1、golang表达式中,加;和不加;都可以 2、函数的{和函数名一…...
跟着cherno手搓游戏引擎【7】Input轮询
在引擎程序中任何时间,任何位置都能知道按键是否按下、鼠标的位置等等信息。 与事件系统的区别:事件系统是在按下时调用并传递按键状态;轮询是每时每刻都能获取按键状态 创建基类: YOTO/Input.h:名如其意 #pragma …...
stm32 - GPIO高级用法
stm32 - GPIO高级用法 PWMPWM / LEDPWM / 电机 PWM PWM / LED PWM波通过改变占空比可以改变LED的亮度 PWM信号调节LED亮度时,信号频率保持不变,即一个周期时间不变,改变的是脉冲的高电平的时间,即LED的导通时间,占空比…...
CMake TcpServer项目 生成静态库.a / 动态库.so
CMake 实战构建TcpServer项目 静态库/动态库-CSDN博客https://blog.csdn.net/weixin_41987016/article/details/135608829?spm1001.2014.3001.5501 在这篇博客的基础上,我们把头文件放在include里边,把源文件放在src里边,重新构建 hehedali…...
为什么光刻要用黄光
光刻是集成电路(IC或芯片)制造中的重要工艺之一。简单来说,它是通过使用光掩膜和光刻胶在基板上复制电路图案的过程。 基板将涂覆硅二氧化层绝缘层和光刻胶。光刻胶在被紫外光照射后可以容易地用显影剂溶解,然后在腐蚀后…...
Python 两种多值参数
有时可能需要一个函数中处理的参数的个数是不确定的,就需要使用多值参数 参数名前加上*,代表可以接收元组参数名前加上**,代表可以接收字典 代码: def demo(*args, **kwargs):print(args)print(kwargs)demo(1, 2, 3, 4, 5, nam…...
【Python学习】Python学习19- 异常处理
目录 【Python学习】Python学习19- 异常处理 前言python标准异常异常处理带异常类型语法不带异常类型语法使用except而带多种异常类型try-finally 语句触发异常 参考 文章所属专区 Python学习 前言 本章节主要说明Python的异常处理。 python标准异常 BaseException 所有异常…...
《A++ 敏捷开发》- 4 三点估算
估算是一个范围,不是一个数 唐工:你估计完成开发用户登录模块要多少天?小李:3天。唐工:能在3天完成的可能性有多高?小李:可能性很高。唐工:可否量化一点?小李:可能性为5…...
cesiumlab切片通过arcgisjs加载
cesiumlab切片通过arcgisjs加载 需要注意2个地方,一个是tileInfo,一个是getTileUrl, 在tileInfo中定义好cesiumlab切片的相关信息。 getTileUrl 格式化url的格式。 注意设置编辑,避免超出范围报404。 <html lang"en"…...
React16源码: React中调度之scheduleWork的源码实现
scheduleWork 1 ) 概述 在 ReactDOM.render, setState, forceUpdate 这几个方法最终都调用了 scheduleWork 这个方法 在 scheduleWork 当中,它需要去找到更新对应的 FiberRoot 节点 在使用 ReactDOM.render 的时候,传给 scheduleWork 的就是…...
【STM32】| 02——常用外设 | I2C
系列文章目录 【STM32】| 01——常用外设 | USART 【STM32】| 02——常用外设 | I2C 失败了也挺可爱,成功了就超帅。 文章目录 前言1. 简介2. I2C协议2.1 I2C物理连接2.2 I2C通信协议2.2.1 起始和停止信号2.2.2 数据有效性2.2.3 数据传输格式2.2.4 从机地址/数据方…...
微服务架构设计核心理论:掌握微服务设计精髓
文章目录 一、微服务与服务治理1、概述2、Two Pizza原则和微服务团队3、主链路规划4、服务治理和微服务生命周期5、微服务架构的网络层搭建6、微服务架构的部署结构7、面试题 二、配置中心1、为什么要配置中心2、配置中心高可用思考 三、服务监控1、业务埋点的技术选型2、用户行…...
.net core 6 集成和使用 mongodb
1、安装包 MongoDB.Driver 2、定义顶层类 /// <summary> /// monggodb规范 /// </summary> public abstract class MongoDBToolBase { /// <summary> /// 客户端 /// </summary> protected MongoClient mongoClient { get; private …...
07-微服务getaway网关详解
一、初识网关 在微服务架构中,一个系统会被拆分为很多个微服务。那么作为客户端要如何去调用这么多的微服务呢?如果没有网关的存在,我们只能在客户端记录每个微服务的地址,然后分别去调用。这样的话会产生很多问题,例…...
边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...
Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...
MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...
企业如何增强终端安全?
在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...
鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南
1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发,使用DevEco Studio作为开发工具,采用Java语言实现,包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...
浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...
【Linux系统】Linux环境变量:系统配置的隐形指挥官
。# Linux系列 文章目录 前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变量的生命周期 四、环境变量的组织方式五、C语言对环境变量的操作5.1 设置环境变量:setenv5.2 删除环境变量:unsetenv5.3 遍历所有环境…...
