光学不练假把式,MySQL练习之SQL操作(持续更新)

2023-11-25 16:10

本文主要是介绍光学不练假把式,MySQL练习之SQL操作(持续更新),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

学习了几天的MySQL,发现只是看视频记笔记的话,很多内容根本记不住。即使记住一些,对于SQL命令也只是有一点模糊的概念,没有深刻的理解。前面一句是通常的理解,学了肯定要练习嘛。后面一句是练习之后发现的,本来不想写这篇笔记的,但是做题的时候发现自己对一些SQL语句的用法有了很多新的理解,想要写下来。

这里要贴一下题目的原帖经典SQL练习题MySQL版,然后有任何侵权的问题,希望告知,我会立即删帖,这方面我不是特别懂,所以希望大家能多给点意见,当然,理解不对的地方也希望大家能够不吝指教,多评论,谢谢大家

正文开始

----------------------------------------------------------分割线---------------------------------------------------------------------------------

原题1:用一条SQL 语句 查询出每门课都大于80 分的学生姓名

name course grade
张三 语文 81
张三 数学 75
李四 语文 76
李四 数学 90
王五 语文 81
王五 数学 100
王五 英语 90
select name from table group by name having min(grade) > 80

解析:首先分析题目

  1. 一条SQL语句
  2. 每门功课都大于80分
  3. 查询结果为学生的姓名

通过题目的信息可以知道,最后显示出来的只有一个字段,就是学生的姓名,所以语句前面一定是select name from table,然后是查询的条件——门功课都大于80分,显然我们需要把张三、李四、王五的成绩分别分组,然后对比它们的成绩对比是否满足条件。所以这里就要用到,并且是以学生的姓名进行分组的group by name,然后就是最后一步,这里需要画一个图比较好理解
在这里插入图片描述
这就是分组之后的逻辑结构,并且这样直接查询是没办法显示的。查询条件是没门成绩都大于80,grade中最小的值都比80大,所以用聚合函数min(grade)>80,题目就做完啦。

这里提一下where和having,为什么这里不用where而用having?

要回答这个问题,我们首先得知道having和where的区别:

1. having是where在分组之前进行限定,having在分组之后限定
2. where后不可以跟聚合函数的判断,having可以

根据分析这里用having。

原题2:现有学生表如下:

自动编号 学号 姓名 课程编号 课程名称 分数
1 2005001 张三 0001 数学 69
2 2005002 李四 0001 数学 89
3 2005001 张三 0001 数学 69
删除除了自动编号不同, 其他都相同的学生冗余信息

delete tablename where 自动编号 not in (select min( 自动编号) from tablename group by 学号, 姓名, 课程编号, 课程名称, 分数
)

解析:分析题目

  1. 数据表中,姓名为张三的学生中有一条重复数据。
  2. 删除这种住了自动编号不同,其他数据都相同的数据。

解析答案
这道题我自己没什么思路,就直接解析答案本身的含义吧。首先这是个删除的操作,所以前面的delete tablename where 删除条件没什么好说的。比较巧妙的是答案用了group by给数据分组,使得只要满足其他数据相同,而自动编号不同的数据就会被分到一个组,接着找保留最小的自动编码的那一条数据,接着将这些组成一个不重复的自动编号的集合,最后判断自动编码(因为重复的数据只有自动编码不同,所以删除的依据也只能用自动编码来判断),凡是不在集合中==(not in())==的数据就是冗余的数据,删除这些数据就可以完成这道题。

原题3:一个叫 team 的表,里面只有一个字段name, 一共有4 条纪录,分别是a,b,c,d, 对应四个球队,现在四个球队进行比赛,用一条sql 语句显示所有可能的比赛组合

分析题目

  1. 一个字段name
  2. 4条数据a,b,c,d
  3. 一条sql
  4. 四条数据两两组合

解析答案
一开始不懂a.name和b.name是什么意思,后来看到后面team a,team b,才知道,这是分别给team 取了两个别名——a和b,然后一个表就成了两张表,a中的name字段和b中的name字段自由组合,也就是笛卡尔积,接着用字典序a.name>b.name去掉例如ab与ba这种重复组合与aa这种不存在组合的情况。

原题4:请用SQL 语句实现:从TestDB 数据表中查询出所有月份的发生额都比101 科目相应月份的发生额高的科目。

请注意:TestDB 中有很多科目,都有1~12月份的发生额。
AccID :科目代码,Occmonth :发生额月份,DebitOccur :发生额。
数据库名:JcyAudit ,数据集:Select * from TestDB

以后再更新吧,太难了,根本不是基础练习,以后更新吧,我得找点基础题目写了,抱歉了,我太难了

这篇关于光学不练假把式,MySQL练习之SQL操作(持续更新)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/424092

相关文章

MySQL 日期时间格式化函数 DATE_FORMAT() 的使用示例详解

《MySQL日期时间格式化函数DATE_FORMAT()的使用示例详解》`DATE_FORMAT()`是MySQL中用于格式化日期时间的函数,本文详细介绍了其语法、格式化字符串的含义以及常见日期... 目录一、DATE_FORMAT()语法二、格式化字符串详解三、常见日期时间格式组合四、业务场景五、总结一、

mysql线上查询之前要性能调优的技巧及示例

《mysql线上查询之前要性能调优的技巧及示例》文章介绍了查询优化的几种方法,包括使用索引、避免不必要的列和行、有效的JOIN策略、子查询和派生表的优化、查询提示和优化器提示等,这些方法可以帮助提高数... 目录避免不必要的列和行使用有效的JOIN策略使用子查询和派生表时要小心使用查询提示和优化器提示其他常

grom设置全局日志实现执行并打印sql语句

《grom设置全局日志实现执行并打印sql语句》本文主要介绍了grom设置全局日志实现执行并打印sql语句,包括设置日志级别、实现自定义Logger接口以及如何使用GORM的默认logger,通过这些... 目录gorm中的自定义日志gorm中日志的其他操作日志级别Debug自定义 Loggergorm中的

MySQL InnoDB引擎ibdata文件损坏/删除后使用frm和ibd文件恢复数据

《MySQLInnoDB引擎ibdata文件损坏/删除后使用frm和ibd文件恢复数据》mysql的ibdata文件被误删、被恶意修改,没有从库和备份数据的情况下的数据恢复,不能保证数据库所有表数据... 参考:mysql Innodb表空间卸载、迁移、装载的使用方法注意!此方法只适用于innodb_fi

mysql通过frm和ibd文件恢复表_mysql5.7根据.frm和.ibd文件恢复表结构和数据

《mysql通过frm和ibd文件恢复表_mysql5.7根据.frm和.ibd文件恢复表结构和数据》文章主要介绍了如何从.frm和.ibd文件恢复MySQLInnoDB表结构和数据,需要的朋友可以参... 目录一、恢复表结构二、恢复表数据补充方法一、恢复表结构(从 .frm 文件)方法 1:使用 mysq

mysql8.0无备份通过idb文件恢复数据的方法、idb文件修复和tablespace id不一致处理

《mysql8.0无备份通过idb文件恢复数据的方法、idb文件修复和tablespaceid不一致处理》文章描述了公司服务器断电后数据库故障的过程,作者通过查看错误日志、重新初始化数据目录、恢复备... 周末突然接到一位一年多没联系的妹妹打来电话,“刘哥,快来救救我”,我脑海瞬间冒出妙瓦底,电信火苲马扁.

MySQL进阶之路索引失效的11种情况详析

《MySQL进阶之路索引失效的11种情况详析》:本文主要介绍MySQL查询优化中的11种常见情况,包括索引的使用和优化策略,通过这些策略,开发者可以显著提升查询性能,需要的朋友可以参考下... 目录前言图示1. 使用不等式操作符(!=, <, >)2. 使用 OR 连接多个条件3. 对索引字段进行计算操作4

MySQL表锁、页面锁和行锁的作用及其优缺点对比分析

《MySQL表锁、页面锁和行锁的作用及其优缺点对比分析》MySQL中的表锁、页面锁和行锁各有特点,适用于不同的场景,表锁锁定整个表,适用于批量操作和MyISAM存储引擎,页面锁锁定数据页,适用于旧版本... 目录1. 表锁(Table Lock)2. 页面锁(Page Lock)3. 行锁(Row Lock

Docker部署Jenkins持续集成(CI)工具的实现

《Docker部署Jenkins持续集成(CI)工具的实现》Jenkins是一个流行的开源自动化工具,广泛应用于持续集成(CI)和持续交付(CD)的环境中,本文介绍了使用Docker部署Jenkins... 目录前言一、准备工作二、设置变量和目录结构三、配置 docker 权限和网络四、启动 Jenkins

MySQL zip安装包配置教程

《MySQLzip安装包配置教程》这篇文章详细介绍了如何使用zip安装包在Windows11上安装MySQL8.0,包括下载、解压、配置环境变量、初始化数据库、安装服务以及更改密码等步骤,感兴趣的朋... 目录mysql zip安装包配置教程1、下载zip安装包:2、安装2.1 解压zip包到安装目录2.2