光学不练假把式,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

相关文章

PyCharm接入DeepSeek实现AI编程的操作流程

《PyCharm接入DeepSeek实现AI编程的操作流程》DeepSeek是一家专注于人工智能技术研发的公司,致力于开发高性能、低成本的AI模型,接下来,我们把DeepSeek接入到PyCharm中... 目录引言效果演示创建API key在PyCharm中下载Continue插件配置Continue引言

MySQL分表自动化创建的实现方案

《MySQL分表自动化创建的实现方案》在数据库应用场景中,随着数据量的不断增长,单表存储数据可能会面临性能瓶颈,例如查询、插入、更新等操作的效率会逐渐降低,分表是一种有效的优化策略,它将数据分散存储在... 目录一、项目目的二、实现过程(一)mysql 事件调度器结合存储过程方式1. 开启事件调度器2. 创

使用Python实现操作mongodb详解

《使用Python实现操作mongodb详解》这篇文章主要为大家详细介绍了使用Python实现操作mongodb的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、示例二、常用指令三、遇到的问题一、示例from pymongo import MongoClientf

SQL Server使用SELECT INTO实现表备份的代码示例

《SQLServer使用SELECTINTO实现表备份的代码示例》在数据库管理过程中,有时我们需要对表进行备份,以防数据丢失或修改错误,在SQLServer中,可以使用SELECTINT... 在数据库管理过程中,有时我们需要对表进行备份,以防数据丢失或修改错误。在 SQL Server 中,可以使用 SE

mysql外键创建不成功/失效如何处理

《mysql外键创建不成功/失效如何处理》文章介绍了在MySQL5.5.40版本中,创建带有外键约束的`stu`和`grade`表时遇到的问题,发现`grade`表的`id`字段没有随着`studen... 当前mysql版本:SELECT VERSION();结果为:5.5.40。在复习mysql外键约

SQL注入漏洞扫描之sqlmap详解

《SQL注入漏洞扫描之sqlmap详解》SQLMap是一款自动执行SQL注入的审计工具,支持多种SQL注入技术,包括布尔型盲注、时间型盲注、报错型注入、联合查询注入和堆叠查询注入... 目录what支持类型how---less-1为例1.检测网站是否存在sql注入漏洞的注入点2.列举可用数据库3.列举数据库

Mysql虚拟列的使用场景

《Mysql虚拟列的使用场景》MySQL虚拟列是一种在查询时动态生成的特殊列,它不占用存储空间,可以提高查询效率和数据处理便利性,本文给大家介绍Mysql虚拟列的相关知识,感兴趣的朋友一起看看吧... 目录1. 介绍mysql虚拟列1.1 定义和作用1.2 虚拟列与普通列的区别2. MySQL虚拟列的类型2

使用MongoDB进行数据存储的操作流程

《使用MongoDB进行数据存储的操作流程》在现代应用开发中,数据存储是一个至关重要的部分,随着数据量的增大和复杂性的增加,传统的关系型数据库有时难以应对高并发和大数据量的处理需求,MongoDB作为... 目录什么是MongoDB?MongoDB的优势使用MongoDB进行数据存储1. 安装MongoDB

mysql数据库分区的使用

《mysql数据库分区的使用》MySQL分区技术通过将大表分割成多个较小片段,提高查询性能、管理效率和数据存储效率,本文就来介绍一下mysql数据库分区的使用,感兴趣的可以了解一下... 目录【一】分区的基本概念【1】物理存储与逻辑分割【2】查询性能提升【3】数据管理与维护【4】扩展性与并行处理【二】分区的

Linux使用fdisk进行磁盘的相关操作

《Linux使用fdisk进行磁盘的相关操作》fdisk命令是Linux中用于管理磁盘分区的强大文本实用程序,这篇文章主要为大家详细介绍了如何使用fdisk进行磁盘的相关操作,需要的可以了解下... 目录简介基本语法示例用法列出所有分区查看指定磁盘的区分管理指定的磁盘进入交互式模式创建一个新的分区删除一个存