光学不练假把式,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更新某个字段拼接固定字符串的实现

《MySQL更新某个字段拼接固定字符串的实现》在MySQL中,我们经常需要对数据库中的某个字段进行更新操作,本文就来介绍一下MySQL更新某个字段拼接固定字符串的实现,感兴趣的可以了解一下... 目录1. 查看字段当前值2. 更新字段拼接固定字符串3. 验证更新结果mysql更新某个字段拼接固定字符串 -

python连接本地SQL server详细图文教程

《python连接本地SQLserver详细图文教程》在数据分析领域,经常需要从数据库中获取数据进行分析和处理,下面:本文主要介绍python连接本地SQLserver的相关资料,文中通过代码... 目录一.设置本地账号1.新建用户2.开启双重验证3,开启TCP/IP本地服务二js.python连接实例1.

Spring Boot项目中结合MyBatis实现MySQL的自动主从切换功能

《SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能》:本文主要介绍SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能,本文分步骤给大家介绍的... 目录原理解析1. mysql主从复制(Master-Slave Replication)2. 读写分离3.

Ubuntu中远程连接Mysql数据库的详细图文教程

《Ubuntu中远程连接Mysql数据库的详细图文教程》Ubuntu是一个以桌面应用为主的Linux发行版操作系统,这篇文章主要为大家详细介绍了Ubuntu中远程连接Mysql数据库的详细图文教程,有... 目录1、版本2、检查有没有mysql2.1 查询是否安装了Mysql包2.2 查看Mysql版本2.

基于SpringBoot+Mybatis实现Mysql分表

《基于SpringBoot+Mybatis实现Mysql分表》这篇文章主要为大家详细介绍了基于SpringBoot+Mybatis实现Mysql分表的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可... 目录基本思路定义注解创建ThreadLocal创建拦截器业务处理基本思路1.根据创建时间字段按年进

Python3.6连接MySQL的详细步骤

《Python3.6连接MySQL的详细步骤》在现代Web开发和数据处理中,Python与数据库的交互是必不可少的一部分,MySQL作为最流行的开源关系型数据库管理系统之一,与Python的结合可以实... 目录环境准备安装python 3.6安装mysql安装pymysql库连接到MySQL建立连接执行S

MySQL双主搭建+keepalived高可用的实现

《MySQL双主搭建+keepalived高可用的实现》本文主要介绍了MySQL双主搭建+keepalived高可用的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、测试环境准备二、主从搭建1.创建复制用户2.创建复制关系3.开启复制,确认复制是否成功4.同

MyBatis 动态 SQL 优化之标签的实战与技巧(常见用法)

《MyBatis动态SQL优化之标签的实战与技巧(常见用法)》本文通过详细的示例和实际应用场景,介绍了如何有效利用这些标签来优化MyBatis配置,提升开发效率,确保SQL的高效执行和安全性,感... 目录动态SQL详解一、动态SQL的核心概念1.1 什么是动态SQL?1.2 动态SQL的优点1.3 动态S

Mysql表的简单操作(基本技能)

《Mysql表的简单操作(基本技能)》在数据库中,表的操作主要包括表的创建、查看、修改、删除等,了解如何操作这些表是数据库管理和开发的基本技能,本文给大家介绍Mysql表的简单操作,感兴趣的朋友一起看... 目录3.1 创建表 3.2 查看表结构3.3 修改表3.4 实践案例:修改表在数据库中,表的操作主要

C# WinForms存储过程操作数据库的实例讲解

《C#WinForms存储过程操作数据库的实例讲解》:本文主要介绍C#WinForms存储过程操作数据库的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、存储过程基础二、C# 调用流程1. 数据库连接配置2. 执行存储过程(增删改)3. 查询数据三、事务处