MySQL —— 表的增删改查(二)

news2025/3/13 21:03:30

目录

表的增删改查(二)

一、聚合函数 

1. 统计班级有多少学生

2. 统计班级收集的qq号有多少

3. 统计本次考试的数学成绩分数个数(去重)

4. 统计数学成绩总分

5. 统计平均总分

6. 返回英语最高分

7. 返回 >70 分以上的数学最低分

二、分组查询(group by子句)

1. 创建一个雇员信息表(准备工作)

2. 显示每个部门的平均工资和最高工资

3. 显示每个部门的每种岗位的平均工资和最低工资

4. HAVING条件

1. 显示平均工资低于2000的部门和它的平均工资


表的增删改查(二)

一、聚合函数 

聚合函数对一组值执行计算并返回单一的值,常用的聚合函数如下: 

函数说明
COUNT([DISTINCT] expr)
返回查询到的数据的数量
SUM([DISTINCT] expr)
返回查询到的数据的总和,不是数字没有意义
AVG([DISTINCT] expr)
返回查询到的数据的平均值,不是数字没有意义
MAX([DISTINCT] expr)
返回查询到的数据的最大值,不是数字没有意义
MIN([DISTINCT] expr)
返回查询到的数据的最小值,不是数字没有意义

聚合函数可以在select语句中使用,此时select每处理一条记录时都会将对应的参数传递给这些聚合函数。

我们这里使用之前创建过的students表,来进行测试:

1. 统计班级有多少学生

使用 * 做统计

在select语句中使用count函数,并将*作为参数传递给count函数,这时便能统计出表中的记录条数。如下:

使用表达式做统计  

2. 统计班级收集的qq号有多少

3. 统计本次考试的数学成绩分数个数(去重)

4. 统计数学成绩总分

统计不及格的数学成绩总分

5. 统计平均总分

6. 返回英语最高分

7. 返回 >70 分以上的数学最低分

二、分组查询(group by子句)

语法如下: 

SELECT column1 [, column2], ... FROM table_name [WHERE ...] 
GROUP BY column [, ...] [order by ...] [LIMIT ...];

 说明一下:

  • 查询SQL中各语句的执行顺序为:where、group by、select、order by、limit。
  • group by后面的列名,表示按照指定列进行分组查询。

1. 创建一个雇员信息表(准备工作)

雇员信息表中包含三张表,分别是员工表(emp)、部门表(dept)和工资等级表(salgrade)。

员工表(emp)中包含如下字段:

  • 雇员编号(empno)。
  • 雇员姓名(ename)。
  • 雇员职位(job)。
  • 雇员领导编号(mgr)。
  • 雇佣时间(hiredate)。
  • 工资月薪(sal)。
  • 奖金(comm)。
  • 部门编号(deptno)。

部门表(dept)中包含如下字段:

  • 部门编号(deptno)。
  • 部门名称(dname)。
  • 部门所在地点(loc)。

工资等级表(salgrade)中包含如下字段:

  • 等级(grade)。
  • 此等级最低工资(losal)。
  • 此等级最高工资(hisal)。
     

雇员信息表的SQL如下:

DROP database IF EXISTS `scott`;
CREATE database IF NOT EXISTS `scott` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

USE `scott`;

DROP TABLE IF EXISTS `dept`;
CREATE TABLE `dept` (
  `deptno` int(2) unsigned zerofill NOT NULL COMMENT '部门编号',
  `dname` varchar(14) DEFAULT NULL COMMENT '部门名称',
  `loc` varchar(13) DEFAULT NULL COMMENT '部门所在地点'
);


DROP TABLE IF EXISTS `emp`;
CREATE TABLE `emp` (
  `empno` int(6) unsigned zerofill NOT NULL COMMENT '雇员编号',
  `ename` varchar(10) DEFAULT NULL COMMENT '雇员姓名',
  `job` varchar(9) DEFAULT NULL COMMENT '雇员职位',
  `mgr` int(4) unsigned zerofill DEFAULT NULL COMMENT '雇员领导编号',
  `hiredate` datetime DEFAULT NULL COMMENT '雇佣时间',
  `sal` decimal(7,2) DEFAULT NULL COMMENT '工资月薪',
  `comm` decimal(7,2) DEFAULT NULL COMMENT '奖金',
  `deptno` int(2) unsigned zerofill DEFAULT NULL COMMENT '部门编号'
);


DROP TABLE IF EXISTS `salgrade`;
CREATE TABLE `salgrade` (
  `grade` int(11) DEFAULT NULL COMMENT '等级',
  `losal` int(11) DEFAULT NULL COMMENT '此等级最低工资',
  `hisal` int(11) DEFAULT NULL COMMENT '此等级最高工资'
);


insert into dept (deptno, dname, loc)
values (10, 'ACCOUNTING', 'NEW YORK');
insert into dept (deptno, dname, loc)
values (20, 'RESEARCH', 'DALLAS');
insert into dept (deptno, dname, loc)
values (30, 'SALES', 'CHICAGO');
insert into dept (deptno, dname, loc)
values (40, 'OPERATIONS', 'BOSTON');

insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7369, 'SMITH', 'CLERK', 7902, '1980-12-17', 800, null, 20);

insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7499, 'ALLEN', 'SALESMAN', 7698, '1981-02-20', 1600, 300, 30);

insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7521, 'WARD', 'SALESMAN', 7698, '1981-02-22', 1250, 500, 30);

insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7566, 'JONES', 'MANAGER', 7839, '1981-04-02', 2975, null, 20);

insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7654, 'MARTIN', 'SALESMAN', 7698, '1981-09-28', 1250, 1400, 30);

insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7698, 'BLAKE', 'MANAGER', 7839, '1981-05-01', 2850, null, 30);

insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7782, 'CLARK', 'MANAGER', 7839, '1981-06-09', 2450, null, 10);

insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7788, 'SCOTT', 'ANALYST', 7566, '1987-04-19', 3000, null, 20);

insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7839, 'KING', 'PRESIDENT', null, '1981-11-17', 5000, null, 10);

insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7844, 'TURNER', 'SALESMAN', 7698,'1981-09-08', 1500, 0, 30);

insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7876, 'ADAMS', 'CLERK', 7788, '1987-05-23', 1100, null, 20);

insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7900, 'JAMES', 'CLERK', 7698, '1981-12-03', 950, null, 30);

insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7902, 'FORD', 'ANALYST', 7566, '1981-12-03', 3000, null, 20);

insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7934, 'MILLER', 'CLERK', 7782, '1982-01-23', 1300, null, 10);

insert into salgrade (grade, losal, hisal) values (1, 700, 1200);
insert into salgrade (grade, losal, hisal) values (2, 1201, 1400);
insert into salgrade (grade, losal, hisal) values (3, 1401, 2000);
insert into salgrade (grade, losal, hisal) values (4, 2001, 3000);
insert into salgrade (grade, losal, hisal) values (5, 3001, 9999);

上述SQL中创建了一个名为scott的数据库,在该数据库中分别创建了部门表(dept)、员工表(emp)和工资等级表(salgrade),并分别向三张表中插入了一些数据用于查询。

将上述SQL保存到文件中,然后在MySQL中使用source命令依次执行文件中的SQL。如下: 

执行完文件中的SQL后查看数据库,就能看到多了一个名为scott的数据库。如下:

进入该数据库,在该数据库中就可以看到雇员信息表中的三张表。如下:

部门表(dept)的表结构和表中的内容如下:

员工表(emp)的表结构和表中的内容如下:

工资等级表(salgrade)的表结构和表中的内容如下:

2. 显示每个部门的平均工资和最高工资

在group by子句中指明按照部门号进行分组,在select语句中使用avg函数和max函数,分别查询每个部门的平均工资和最高工资。如下: 

上述SQL会先将表中的数据按照部门号进行分组,然后各自在组内做聚合查询得到每个组的平均工资和最高工资。 

3. 显示每个部门的每种岗位的平均工资和最低工资

在group by子句中指明依次按照部门号和岗位进行分组,在select语句中使用avg函数和min函数,分别查询每个部门的每种岗位的平均工资和最低工资。如下: 

说明一下:

  • group by子句中可以指明按照多个字段进行分组,各个字段之间使用逗号隔开,分组优先级与书写顺序相同。
  • 比如上述SQL中,当两条记录的部门号相同时,将会继续按照岗位进行分组。 

4. HAVING条件

语法如下: 

SELECT ... FROM table_name [WHERE ...] [GROUP BY ...] 
[HAVING ...] [order by ...] [LIMIT ...];

说明一下:

  • SQL中各语句的执行顺序为:where、group by、select、having、order by、limit。
  • having子句中可以指明一个或多个筛选条件。

having子句和where子句的区别:

  • where子句放在表名后面,而having子句必须搭配group by子句使用,放在group by子句的后面。
  • where子句是对整表的数据进行筛选,having子句是对分组后的数据进行筛选
  • where子句中不能使用聚合函数和别名,而having子句中可以使用聚合函数和别名。

查询数据时,SQL中各语句的执行顺序如下:

  1. 根据where子句筛选出符合条件的记录。
  2. 根据group by子句对数据进行分组。
  3. 将分组后的数据依次执行select语句。
  4. 根据having子句对分组后的数据进行进一步筛选。
  5. 根据order by子句对数据进行排序。
  6. 根据limit子句筛选若干条记录进行显示。

1. 显示平均工资低于2000的部门和它的平均工资

把问题化繁为简:

  1. 显示部分和它的平均工资。
  2. 以上面的为基础在进行筛选出,平均工资低于200的部门。

以上的内容就是MySQL的基本的增删查改操作(这里是基于单表的操作,后续会有复合查询,也就是多表操作了),我们可以发现SQL语句从刚开始到现在,越来越难一些,这里我给大家一些编写SQL操作建议:

  1. 根据题目(要求),我们要知道从哪一张表拿数据,也就是from table_name;
  2. 看清楚需要查询的字段有哪些,需不需要起别名、需不需要聚合;
  3. 理清筛选条件;

对于上面的3个步骤还是可以进行细分的,你可以将题目化繁为简,先查询全部,再一步一步的进行添加筛选条件,最后达到效果;

 

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

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

相关文章

Vue3 更高效的构建工具——Vite

文章目录前言一、Vite简介1. Vite组成2.为什么选 Vite?二、Vite的优缺点vite优点vite缺点三、使用Vite创建Vue3项目1. 创建 vite 的项目2.项目的结构前言 本文讲解了构建工具 Vite,目前只有vue3才可以使用Vite,如果本文对你有所帮助请三连支持博主。 下…

落枕、肩颈酸痛,用磁疗就可缓解!

睡觉之前还是好好的,一觉醒来脖子莫名疼痛,转都转不了,有时候连肩膀和上肢都难受,很可能是“落枕”了。 落枕引起的肩颈疼痛与多种因素有关,如颈肩部肌肉的过度使用、不良的睡眠姿势或颈肩部受寒湿空气的侵袭&#xff…

基于RFID技术的数据中心资产智能管理系统

一、项目背景数据中心日常运维的工作核心是以合适的成本来保障业务系统不间断运行,充分利用资源,因此承载这些业务的IT资产的管理和容量(资源)的有效管理显得尤为重要。另一方面,容量的规划和管理也直接决定了数据中心的管理水平。然而&#…

分布式文件系统介绍与minio介绍与使用(附minio java client 使用)

🍀🍀🍀🍀分布式文件系统-minio: 第一章:分布式文件系统介绍与minio介绍与使用(附minio java client 使用) 文章目录1.分布式文件系统基本概念1.1 文件系统1.2 分布式文件系统1.3 分布…

hbuilderx云打包苹果证书的生成和应用上架流程

使用hbuilder或apicloud等开发工具,打包ios应用的时候,需要苹果证书,而这个苹果证书是需要在mac电脑创建的,然后再去苹果开发者中心生成。这里关键是需要mac电脑,但是mac电脑的价格要7000多,为了创建一个证…

空间剪枝:使用自适应滤波器来改进稀疏CNN的训练

论文作者 | Paul Wimmer,Jens Mehnert and Alexandru Paul Condurache论文来源 | CVPR2022文章解读 | William一、摘要非结构化的剪枝非常适合在训练和推理时减少卷积神经网络(CNN)的内存占用。标准的非结构化剪枝(Standard unstructured Pruning,SP)通过将滤波器元…

体验了一下 ChatGPT,连连竖大拇指

近段时间,ChatGPT 真的是太火了,我也忍不住的去体验一把。体验了之后,怪不得 ChatGPT 最近火爆全网了,看得我连连竖起了我的大拇指,惊艳到我了~ ChatGPT 是什么? ChatGPT 是一款由 OpenAl 开发的语言模型…

Linux命令大全,赶紧收藏!

新的一年 新的征程 新的课程开班 等你来学! 本文为Linux命令大全,从A到Z都有总结,建议大家收藏以便查用,或者查漏补缺! A 命令 描述 access 用于检查调用程序是否可以访问指定的文件,用于检查文件…

Java笔记-内部类

目录1.内部类介绍(1)为啥需要内部类(2)内部类有:(2.1)成员内部类(2.2)静态内部类(2.3)局部内部类(2.4)匿名内部类权限符修饰规则1.内部类介绍 A类…

Linux尚硅谷

Linuxlinuxlinux课程介绍Linux进阶之路Linux基础篇交互虚拟机网络连接三种形式配置网络vmtools安装介绍vmtaools安装与使用Linux目录结构总结一下Linux实操篇远程登陆Linux系统xftp的安装和配置解决xftp中文乱码情况vi和vim编译器vi和vim常见三种模式三种模式相互转换vi与vim快…

NoSQL数据库详细介绍

一、NoSQL发展历史 NoSQL 一词最早出现于 1998 年,是 Carlo Strozzi 开发的一个轻量、开源、不提供 SQL 功能的关系数据库。 2009 年,Last.fm 的 Johan Oskarsson 发起了一次关于分布式开源数据库的讨论,来自 Rackspace 的 Eric Evans 再次…

我也就是尝试了一下斗图的快乐

Hi,本章继续分享爬虫内容。上一章的内容在后续有做了更新,可以将指定的搜索内容一爬到底:https://gitee.com/qinganan_admin/reptile-case.git 欢迎来个⭐ 先来看看图 好家伙,如此一来斗图我都能一挑十。 本章分享内容来自每周学…

手动将jar包导入maven中,并通过maven坐标导入

目录标题一、获取需要的jar包二、将jar导入maven三、在maven项目中使用刚刚导入的jar一、获取需要的jar包 已有jar包忽略此步骤&#xff01;&#xff01;&#xff01; 去maven仓库下载获取。 这里先复制maven依赖坐标。 <!-- https://mvnrepository.com/artifact/org.sp…

Leetcode力扣秋招刷题路-0036

从0开始的秋招刷题路&#xff0c;记录下所刷每道题的题解&#xff0c;帮助自己回顾总结 36. 有效的数独 请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 &#xff0c;验证已经填入的数字是否有效即可。 数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现…

塔式太阳能热发电系统的防雷设计

太阳能能源是来自太阳的氢原子核在超高温时聚变释放的巨大能量&#xff0c;目前人类所需能量的绝大部分都直接或间接地来自太阳。太阳能将成为本世纪最主要的能源之一&#xff0c;这是因为太阳能既蕴藏丰富&#xff0c;又是安全、干净的&#xff0c;不会威胁人类和破坏环境。太…

互联网架构之 “高可用” 详解

一、什么是高可用 高可用HA&#xff08;High Availability&#xff09;是分布式系统架构设计中必须考虑的因素之一&#xff0c;它通常是指&#xff0c;通过设计减少系统不能提供服务的时间。 假设系统一直能够提供服务&#xff0c;我们说系统的可用性是100%。 如果系统每运行…

分布式新闻项目实战 - 10.Long类型精度丢失问题

怒发冲冠&#xff0c;凭阑处、潇潇雨歇。抬望眼&#xff0c;仰天长啸&#xff0c;壮怀激烈。三十功名尘与土&#xff0c;八千里路云和月。莫等闲、白了少年头&#xff0c;空悲切。 靖康耻&#xff0c;犹未雪。臣子恨&#xff0c;何时灭。驾长车&#xff0c;踏破贺兰山缺。壮志饥…

SpringBoot——Banner介绍

一、什么是BannerBanner即横幅标语&#xff0c;我们在启动SpringBoot项目时会将Banner信息打印至控制台。我们可以输出一些图形、SpringBoot版本信息等内容。默认情况下是通过实现类SpringBootBanner输出的Banner内容&#xff0c;默认的输出内容如下。二、自定义Banner如果不想…

肠道微生态失调了?可以这样调回来

我们的肠道寄生着大概10万亿个细菌&#xff0c;它们可以合成维生素、必需氨基酸&#xff0c;并参与糖类和蛋白质的代谢&#xff0c;同时还能促进铁、镁、锌等矿物元素的吸收&#xff0c;一直与人体保持着动态平衡。肠道微生态平衡时&#xff0c;人体可以保持正常的生理功能&…

PyQt5编程扩展 3.2 资源文件的使用

目录 本例运行效果&#xff1a; 设计Qt窗体 建立项目 放一个Group Box 放三个Label 放一个Horizontal Slider 放两个Line Edit 层次结构 布局 放一个Group Box 放两个Label 放两个Line Edit 放一个Push Button 层次结构 布局 放一个frame 层次结构 布局 窗体…