高频SQL 50 题(持续更新)

SQL的编写与运用

0. 写在前面

最近学习了数据库系统概论,其中涉及到了关于SQL语句的编写,感觉理论知识不足以让我掌握相关的编写方式,因此选择刷力扣上的题目进行复习巩固。

时间不是很多,可能不会经常更新,有时间写几道题目便会在后面进行题解补充和感想撰写。

1. MySQL 编写

1757. 可回收且低脂的产品 - 力扣(LeetCode)

没有啥难度,直接使用SQL语句进行搜索即可

关键字 SELECT 用于指定我们想要从表 Products 中检索的列。在这种情况下,我们想要检索 product_id 列。关键字 WHERE 用于根据特定条件过滤表 Products 中的行,条件是 low_fats 列的值为"Y"(表示低脂肪产品)且 recyclable 列的值为"Y"(表示可回收产品)。我们使用逻辑运算符 AND 将两个条件组合起来,确保最终结果只包含既是低脂肪产品又是可回收产品的产品ID。

selectproduct_id
fromProducts
where low_fats="Y" and recyclable="Y"

584. 寻找用户推荐人 - 力扣(LeetCode)

这道题目的主要难点就是需要知道如何查询到字段值为NULL的人,也就是查询到没有推荐人的人。

初步想法是这样的

SELECT name FROM customer WHERE referee_Id <> 2;
# SELECT name FROM customer WHERE referee_Id != 2;  -- 和 # 都是表示单行注释的意思

但是实际上上面的语句是查询不到NULL字段值的,因为

  • NULL是一个特殊值,代表缺失的数据,不应该用NULL == NULL这样的逻辑来判断。
  • NULL值不能参与普通的比较运算,如<, >, =, <=, >=
  • 使用IS NULLIS NOT NULL来查询NULL值是最推荐的做法。

因此正确的代码如下:

SELECT name FROM customer WHERE referee_id != 2 OR referee_id IS NULL;

595. 大的国家 - 力扣(LeetCode)

-- 使用行过滤来识别满足条件的国家
SELECT * 
FROM world 
WHERE area >= 3000000 OR population >= 25000000
-- 然后按照问题的要求返回三列
SELECT name, population, area 
FROM world 
WHERE area >= 3000000 OR population >= 25000000

还可以使用union进行实现

# Write your MySQL query statement beloow
select name, population, area from world where population >= 25000000
union
select name, population, area from world where area >= 3000000;

关于or和union的区别,大致如下:

对于单列来说,使用or是没有问题的,但是or涉及到多个列的时候,每次select只能选取一个ndex,如果选择了area,population就需要进行table-scan,即全部扫描一遍,但是使用union就可以解决这个问题,分别使用area和population上面的index进行查询。 但是这里还会有一个问题就是,UNION会对结果进行排序去重,可能会降低一些performance

u n i o n 用于连接两个 s q l ,所以可以查询返回列相同的 s e l e c t 语句,所以表可以不是同一张,而 o r 的对象只能是同一张表; u n i o n 可以实现将判断不同字段的两个 s q l 联合查询, o r 固然也可以实现,但是很容易让人绕进去,没有 u n i o n 那么通俗易懂。 union 用于连接两个sql,所以可以查询返回列相同的 select 语句,所以表可以不是同一张,而 or 的对象只能是同一张表;\\ union 可以实现将判断不同字段的两个sql 联合查询,or 固然也可以实现,但是很容易让人绕进去,没有 union 那么通俗易懂。 union用于连接两个sql,所以可以查询返回列相同的select语句,所以表可以不是同一张,而or的对象只能是同一张表;union可以实现将判断不同字段的两个sql联合查询,or固然也可以实现,但是很容易让人绕进去,没有union那么通俗易懂。

1148. 文章浏览 I - 力扣(LeetCode)

这道题目主要的难点就是需要进行重命名,然后需要升序排序。

SELECT DISTINCT author_id AS id # DISTINCT用于消除查询结果中的重复行,只保留唯一的记录。
FROM Views 
WHERE author_id = viewer_id 
ORDER BY id # id DESC  表示按照id降序进行排序

1683. 无效的推文 - 力扣(LeetCode)

题目中的主要难点就是需要知道mysql求解字符串长度的函数

对于SQL表,用于计算字符串中字符数的最佳函数是 CHAR_LENGTH(str),它返回字符串 str 的长度。另一个常用的函数 LENGTH(str) 在这个问题中也适用,因为列 content 只包含英文字符,没有特殊字符。否则,LENGTH() 可能会返回不同的结果,因为该函数返回字符串 str 的字节数,某些字符包含多于 1 个字节。

以字符 ‘¥’ 为例:CHAR_LENGTH() 返回结果为 1,而 LENGTH() 返回结果为 2,因为该字符串包含 2 个字节。

SELECT tweet_id
FROM tweets
WHERE CHAR_LENGTH(content) > 15# LENGTH(content)>15  也是可以的,但是要是出现了非英文的字符,可能就会出错了

1378. 使用唯一标识码替换员工ID - 力扣(LeetCode)

SELECT  # 指定要返回的列EmployeeUNI.unique_id, Employees.name
FROM Employees
LEFT JOIN  # 将表进行连接,LEFT JOIN 的特点是,即使 EmployeeUNI表中没有匹配的记录,Employees 表中的所有记录都会出现在结果集中。EmployeeUNI
ON # 指定连接条件Employees.id = EmployeeUNI.id;

1068. 产品销售分析 I - 力扣(LeetCode)

SELECT p.product_name , s.year , s.price
# 指定了查询返回的结果集应包含哪些列
FROM Sales s # 定义了一个主表,并指定了一个别名
LEFT JOIN Product p
# 将Sales表与另一个名为Product的表进行连接,并给Product表指定了一个别名p。
# LEFT JOIN意味着即使Product表中没有匹配项,也会返回Sales表中的所有记录。如果没有匹配项,则结果中的Product字段将为NULL。
ON s.product_id = p.product_id
# 定义了两个表之间的连接条件

1581. 进店却未进行过交易的顾客 - 力扣(LeetCode)

这题主要就是需要看懂题目表达的意思:题目翻译过来就是左连接,然后找出来null的就可以了。

因为左连接是以左表为主导,确保左表的所有记录都会出现在结果集中,而右表中的记录只有在与左表有匹配时才会出现。

select customer_id ,count(customer_id) count_no_trans
from Visits v
left join Transactions t
on v.visit_id=t.visit_id
where transaction_id is null
group by customer_id;

然后还可以使用不相关子查询进行求解:只要是visit_id不在Transactions表中但是在visits表中的话,则这样的数据是满足条件的,基于此,查询代码如下:但是下面每次检查not in耗时长

SELECT customer_id,count(visit_id) as count_no_trans
FROM Visits
WHERE visit_id not in (SELECT DISTINCT visit_id FROM Transactions)
# 使用 DISTINCT 可以避免重复排除同一个 visit_id,确保每个 visit_id 只被考虑一次。
GROUP BY customer_id
# 将数据分组,以便对每组数据执行聚合函数

197. 上升的温度 - 力扣(LeetCode)

这题一开始的想法就是将表和自己进行笛卡尔积,但是后面发现不太对,因为只需要找出比其前一天温度高的天气即可,看解析后发现有个函数datediff可以进行使用

# Write your MySQL query statement below
select w2.id
from Weather w1,Weather w2
Where datediff(w2.recordDate,w1.recordDate)=1 and w2.temperature>w1.temperature

1661. 每台机器的进程平均运行时间 - 力扣(LeetCode)

这道题目主要是需要知道round的使用方式
round的使用方式

select a.machine_id ,
round(avg(a.timestamp-b.timestamp),3) as processing_time  
from Activity a
join Activity b
on  # 下面的是连接条件:a、b表的机器、进程id都对应相等,且a表类型是end,b表类型是start 将这样的行按机器id分组
a.machine_id=b.machine_id and
a.process_id=b.process_id and
a.activity_type='end' and
b.activity_type='start'
group by a.machine_id

577. 员工奖金 - 力扣(LeetCode)

还是做题目了有效果的,我一看题目要求和样例,我就知道需要考虑以下事情:

1、由于奖金不是所有员工有的,因此Bonus表和Employee表进行连接的话,需要对Bonus进行左连接。

2、要是想要取出null值的话,需要使用is null 而不是直接简单的使用=号进行判断

select name,bonus
from Employee
left join bonus
on Employee.empId=bonus.empId
where bonus<1000 or bonus is null

1280. 学生们参加各科测试的次数 - 力扣(LeetCode)

首先需要统计每个学生参加每个科目的考试次数,因此需要使用group by,考虑到还需要返回其他的属性,因此这里需要使用到子查询。同时考虑到学生和科目都是有可能进行连接的,因此这里选择使用笛卡尔积将学生表和科目表进行连接,也就是使用cross join进行连接。然后再将子查询得到的表进行左连接,考虑到会有null的情况,使用ifnull进行填充即可。最后对相应位置进行排序即可。

SELECT s.student_id, s.student_name, sub.subject_name, IFNULL(grouped.attended_exams, 0) AS attended_exams
FROM Students s
CROSS JOIN Subjects sub
LEFT JOIN (SELECT student_id, subject_name, COUNT(*) AS attended_exams  # 前面两个属性是用来进行连接的,后面的才是需要查询的属性FROM ExaminationsGROUP BY student_id, subject_name
) grouped 
ON s.student_id = grouped.student_id AND sub.subject_name = grouped.subject_name
ORDER BY s.student_id, sub.subject_name;

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

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

相关文章

【Python】12、函数-02

文章目录 1. 返回值2.文档字符串3. 作用域4. 命名空间 1. 返回值 返回值就是函数执行以后返回的结果&#xff0c;可以通过return来指定函数的返回值。返回值可以通过变量接收返回值 return 后可以返回任意的对象&#xff0c;甚至是一个函数如果仅写一个return或者不写return&…

Unity插件-适用于画面传输的FMETP STREAM使用方法(三)基础使用

目录 一、插件介绍 二、组件介绍 三、Game View Streaming 1、使用 FM Network UDP 的基本设置 Server Scene Client Scene 2、使用使用 FM WebSocket 的基本设置 四、Audio Streaming 五、Microphone Streaming 一、插件介绍 ​​​​​​Unity插件-适用于画面传输的…

如何为预训练模型进行领域适配:全参数微调、LoRA 还是 Prompt Tuning?

目录 如何为预训练模型进行领域适配&#xff1a;全参数微调、LoRA 还是 Prompt Tuning&#xff1f; 1. 全参数微调&#xff08;Full Fine-tuning&#xff09; 适用场景 优缺点 示例代码&#xff08;使用 Hugging Face Transformers 进行全参数微调&#xff09; 2. LoRA&am…

C++ —— 线程同步(互斥锁)

C —— 线程同步&#xff08;互斥锁&#xff09; 线程同步互斥锁&#xff08;互斥量&#xff09;测试代码mutex互斥锁 线程同步 线程同步&#xff1a;多线程协同工作&#xff0c;协商如何使用共享资源。 C11线程同步包含三部分内容&#xff1a; 互斥锁&#xff08;互斥量&…

UI设计中的加载动画:优化用户体验的细节

hello宝子们...我们是艾斯视觉擅长ui设计和前端数字孪生、大数据、三维建模、三维动画10年经验!希望我的分享能帮助到您!如需帮助可以评论关注私信我们一起探讨!致敬感谢感恩! 在数字产品泛滥的今天&#xff0c;用户对体验的要求早已超越功能本身。一个看似简单的加载动画&…

SpringBoot3+Vue3实战(Vue3快速开发登录注册页面并对接后端接口)(4)

目录 一、SpringBoot3Vue3实现基本增删改查。前后端通信交互、配置后端跨域请求。数据批量删除。(博客链接) 二、SpringBoot3Vue3快速开发登录、注册页面并实现对接。 &#xff08;1&#xff09;操作数据表employee(员工信息表)。 <1>修改employee表的字段组成。 <2&g…

Python标准库中bisect模块的bisect_right()函数在网格交易中的应用

本文将深入探讨Python标准库中bisect模块的bisect_right()函数在网格交易中的具体应用。 bisect模块 bisect模块是Python标准库中的一个模块&#xff0c;提供了对有序列表的插入和搜索操作的支持。它基于二分查找算法&#xff0c;可以高效地在有序列表中查找或插入元素&#x…

Excel(函数篇):IF函数、FREQUNCY函数、截取函数、文本处理函数、日期函数、常用函数详解

目录 IF函数等于判断区间判断与AND函数、OR函数一同使用IFNA函数和IFERROR函数 FREQUNCY函数、分断统计LEFT、RIGHT、MID截取函数FIND函数、LEN函数SUBSTITUTE函数ASC函数、WIDECHAR函数实战&#xff1a;如何获取到表中所有工作簿名称文本处理函数TEXT函数TEXTJOIN函数 日期函数…

生成PDF文件:从html2canvas和jsPdf渲染到Puppeteer矢量图

刚刚实现而已&#xff1a;第一次明白&#xff0c;双击或file:///打开html文件&#xff0c;居然和从localhost:3000打开同一个html文件有本质的区别。 字体居然还能以Base64代码嵌入到网页&#xff0c;只是太大太笨。 需要安装node.js&#xff0c;npm安装更多依赖&#xff1a;…

Git 分支删除操作指南(含本地与远程)

&#x1f680; Git 分支删除操作指南&#xff08;含本地与远程&#xff09; 在多人协作的开发过程中&#xff0c;定期清理已合并的临时分支&#xff08;如 feature/*、bugfix/*、hotfix/* 等&#xff09;可以保持仓库整洁&#xff0c;避免混乱。 &#x1f4cc; 分支命名规范回…

Qt中打开windows的cmd窗口并显示

在windows上&#xff0c;用Qt的GUI程序打开另一个程序&#xff0c;使用QProcess即可&#xff0c;并且被打开的程序通常也会显示出来&#xff0c;但是如果想要打开dos窗口并显示&#xff0c;并执行其中的命令或者批处理&#xff0c;则需要使用QProcess提供的windows特有的函数QP…

Modbus TCP到RTU:轻松转换指南!

Modbus TCP 到 RTU&#xff1a;轻松转换指南&#xff01; 在现代工业自动化领域&#xff0c;Modbus TCP和Modbus RTU两种通信协议因其高效、稳定的特点被广泛应用。然而&#xff0c;随着技术的发展和设备升级的需求&#xff0c;经常会遇到需要将这两种协议进行互相转换的场景。…

微信小程序订阅消息发送消息,点击消息进入小程序页面

1、在小程序官网订阅消息选用或创建消息模板获取模板ID可多个 如图&#xff1a; 2、微信小程序前端页面发送请求订阅权限 请求模板id的权限可以是一个可以是多个&#xff0c;用户同意订阅&#xff0c;获取code传递给后端——后端拿到code生成唯一的openid用于发送订阅消息 注…

卷积神经网络 - 卷积层

卷积神经网络一般由卷积层、汇聚层和全连接层构成&#xff0c;本文我们来学习卷积层。 卷积层&#xff08;Convolutional Layer&#xff09;是卷积神经网络&#xff08;CNN&#xff09;的核心组件&#xff0c;专门用于处理具有网格结构的数据&#xff08;如图像、音频、时间序…

Vue3全局化配置(ConfigProvider)

效果如下图&#xff1a; 在线预览 APIs ConfigProvider 参数说明类型默认值theme主题对象Theme{}abstractboolean是否不存在 DOM 包裹元素truetagstringConfigProvider 被渲染成的元素&#xff0c;abstract 为 true 时有效‘div’ Theme Type 名称说明类型默认值common?全…

LabVIEW烟气速度场实时监测

本项目针对燃煤电站烟气流速实时监测需求&#xff0c;探讨了静电传感器结构与速度场超分辨率重建方法&#xff0c;结合LabVIEW多板卡同步采集与实时处理技术&#xff0c;开发出一个高效的烟气速度场实时监测系统。该系统能够在高温、高尘的复杂工况下稳定运行&#xff0c;提供高…

若依excel工具类导出excel模板数据带下拉映射

导出模板代码&#xff0c;原理是combo属性 传递一个数组 里面是label下拉数组。 Overridepublic void downloadTemplate(HttpServletResponse response) {ExcelUtil<ThMachineryManageExcel> util new ExcelUtil<>(ThMachineryManageExcel.class);List<SysDist…

3.8 Spring Boot监控:Actuator+Prometheus+Grafana可视化

在Spring Boot应用中&#xff0c;通过整合Actuator、Prometheus和Grafana可以构建完整的监控体系&#xff0c;实现指标采集、存储和可视化。以下是具体实现步骤&#xff1a; 一、Spring Boot Actuator 配置 作用&#xff1a;暴露应用健康指标、性能数据等监控端点。 1. 添加依…

启幕数据结构算法雅航新章,穿梭C++梦幻领域的探索之旅——二叉树序列构造探秘——堆的奥义与实现诗篇

人无完人&#xff0c;持之以恒&#xff0c;方能见真我&#xff01;&#xff01;&#xff01; 共同进步&#xff01;&#xff01; 文章目录 一、堆的定义与结构二、堆的实现1.堆的初始化和销毁堆的初始化堆的销毁 2.向上调整算法和入堆向上调整算法入堆 3.向下调整算法和出堆顶数…

“Failed to Load SteamUI.dll” 错误详解:全面解析与高效解决方案,助你快速修复 Steam 客户端问题

在使用 Steam 客户端时&#xff0c;你是否遇到过 failed to load steamui.dll 错误&#xff1f;这个令人头疼的问题可能导致 Steam 无法正常启动&#xff0c;影响游戏体验。Failed to load steamui.dll 错误通常与文件损坏、系统配置或软件冲突有关&#xff0c;但无需担心&…