2024年C C++最全数据库LeetCode每日练习(二)_数据库刷题,2024年最新C C++面试题目

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

customers 

where
id not in (select distinct customerid from orders);

解决方式2 : 外连接的方式

取出customers表的全部 和 orders表进行左外连接

连接条件利用 c.id = o.customerid. 不存在连接关系的记录o.id = null

select
c.name as ‘Customers’
from
customers as c left join orders as o
on c.id = o.customerid
where
o.id is null;


* **外连接不理解的可以看我上一篇刷题中存在详细解释**


[数据库LeetCode每日练习(一)\_小杰312的博客-CSDN博客sql操作LeetCode每日练习![](https://g.csdnimg.cn/static/logo/favicon32.ico)https://blog.csdn.net/weixin\_53695360/article/details/123985354?spm=1001.2014.3001.5501](https://blog.csdn.net/weixin_53695360/article/details/123985354?spm=1001.2014.3001.5501 "数据库LeetCode每日练习(一)_小杰312的博客-CSDN博客")


## 题目2: 删除重复的电子邮件


[196. 删除重复的电子邮箱](https://bbs.csdn.net/topics/618668825)


![watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCP5p2wMzEy,size_20,color_FFFFFF,t_70,g_se,x_16](https://img-blog.csdnimg.cn/05366a71143c471f90fee9eaa20f78b2.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCP5p2wMzEy,size_20,color_FFFFFF,t_70,g_se,x_16)


* **题目要求: 删除所有重复出现的  email 记录,也就是按照 email 进行delete ,保留id 小的唯一电子邮件,所以删除的重复记录 id 是 后面的**
* **思路:****可以利用自连接的方式,自己这张表跟自己进行连接,然后比较,如果满足 p2.id > p1.id && p2.email = p1.email 我们就将这条记录删除.****(核心在于连接不仅仅可以用在select 竟然还可以用在  delete 等其他操作上)**                       ---  **如果需要同一张表的数据比较操作,请善用自连接操作**
* **注意 delete 是条件删除,按照后面的where 条件删除我们指定表中的条件指定记录, 我看LeetCode评论区会存在这样的疑问说,p1 和 p2 不是做了笛卡尔积嘛,咋删除的完, p1 是临时表啥的问题,    此处 p1 就是 person表本体, 我们仅仅只是利用了笛卡尔积来实现连接关系,从而在 p1表中不断地筛选出来满足 重复email 且 id 大 地记录删除掉**



p1 和 p2 都是 person 表

delete
p1
from
person as p1, person as p2
where p1.id > p2.id && p1.email = p2.email;


## 题目3:上升的温度


[197. 上升的温度](https://bbs.csdn.net/topics/618668825)


![watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCP5p2wMzEy,size_20,color_FFFFFF,t_70,g_se,x_16](https://img-blog.csdnimg.cn/ed02a305cfa54563b0dd077d83ef2eb8.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCP5p2wMzEy,size_20,color_FFFFFF,t_70,g_se,x_16)


* **题目要求: 查找比前一天温度更高地所有日期id**
* **题目很简单,也很明显地使用自连接,因为还是本表数据比较,关键在于针对日期地差值应该如何做地问题上了, 如何表示  今天和昨天地日期关系?**


![watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCP5p2wMzEy,size_20,color_FFFFFF,t_70,g_se,x_16](https://img-blog.csdnimg.cn/30c03dafc755423cb5b6519c0cbdd697.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCP5p2wMzEy,size_20,color_FFFFFF,t_70,g_se,x_16)


**我们利用 sql 提高地上述地datediff 函数即可**



select
w1.id
from
weather w1 inner join weather w2
on datediff(w1.recorddate, w2.recorddate) = 1
where
w1.temperature > w2.temperature;


## **题目4:第二高的薪水**


**![watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCP5p2wMzEy,size_20,color_FFFFFF,t_70,g_se,x_16](https://img-blog.csdnimg.cn/bbeda70ac04049ba970e9f9a61bdfbe0.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCP5p2wMzEy,size_20,color_FFFFFF,t_70,g_se,x_16)**


* **题目要求: 特别地简单,要求返回表中第二高的薪水**
* **思路:这种获取第几的薪水,我们第一反应肯定是进行一个sort 按照 desc 降序排序,去重排序, 接下来就利用Limit 分页查询 查询第二条记录不就是第二高薪水记录了噻.**
* **但是题目还存在一个要求是如果不存在第二高薪水放回 null 查询**
* **对于Null的处理我采取的是isfull函数**


![watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCP5p2wMzEy,size_20,color_FFFFFF,t_70,g_se,x_16](https://img-blog.csdnimg.cn/b413501e8aae4adf9a3fb5727f05b9ec.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCP5p2wMzEy,size_20,color_FFFFFF,t_70,g_se,x_16)



select ifnull(
(select distinct
salary
from
employee
order by salary desc
limit 1, 1
), null
) as ‘SecondHighestSalary’;

如果子查询select 结果不为Null则正常输出结果

否则输出null


## **本章刷题总结**



> 
> * **总结经验:  一般如果是需要通过同一张表的相互比较达到题目要求的,就一般是可以使用子连接查询或者处理。表的自连接, 就是表自己和自己连接在一起.**
> * **两张表连接,不做任何条件限定就是笛卡尔积, 做出限定一般是通过逻辑外键进行限定. 外键存在附表中,    外键一般是主表中的主键**


![img](https://img-blog.csdnimg.cn/img_convert/abbd01674b874717d5f4af5930855c73.png)
![img](https://img-blog.csdnimg.cn/img_convert/14ffed1348f74dbf447ac6841b8b407d.png)

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化的资料的朋友,可以添加戳这里获取](https://bbs.csdn.net/topics/618668825)**


**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

s.csdn.net/topics/618668825)**


**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值