MySQL --基本查询(下)
文章目录
- 3.Update
- 3.1将孙悟空同学的数学成绩变更为 80 分
- 3.2将曹孟德同学的数学成绩变更为 60 分,语文成绩变更为 70 分
- 3.3将总成绩倒数前三的 3 位同学的数学成绩加上 30 分
- 3.4将所有同学的语文成绩更新为原来的 2 倍
- 4.Delete
- 4.1删除数据
- 4.1.1删除孙悟空同学的考试成绩
- 4.1.2删除整张表数据
- 4.2 截断表
- 5.插入查询结果
- 6.聚合函数
- 6.1统计班级共有多少同学
- 6.2 统计班级收集的 qq 号有多少
- 6.3统计本次考试的数学成绩分数个数
- 6.4统计数学成绩总分
- 6.5统计平均总分
- 6.6 返回英语最高分
- 6.7返回 > 70 分以上的数学最低分
- 7.group by子句的使用
- 8.实战OJ
3.Update
语法:
UPDATE table_name SET column = expr [, column = expr ...]
[WHERE ...] [ORDER BY ...] [LIMIT ...]
对查询到的结果进行列值更新
示例:
3.1将孙悟空同学的数学成绩变更为 80 分
– 更新值为具体值
– 查看原数据
SELECT name, math FROM exam_result WHERE name = '孙悟空';
– 数据更新
UPDATE exam_result SET math = 80 WHERE name = '孙悟空';
SELECT name, math FROM exam_result WHERE name = '孙悟空';
3.2将曹孟德同学的数学成绩变更为 60 分,语文成绩变更为 70 分
– 查看原数据
SELECT name, math, chinese FROM exam_result WHERE name = '曹孟德';
– 数据更新
update exam_result set math=60, chinese =70 where name='曹孟德';
select name,math,chinese from exam_result where name='曹孟德';
3.3将总成绩倒数前三的 3 位同学的数学成绩加上 30 分
– 查看原数据
SELECT name, math, chinese + math + english 总分 FROM exam_result
ORDER BY 总分 LIMIT 3;
– 数据更新,不支持 math += 30 这种语法
UPDATE exam_result SET math = math + 30
ORDER BY chinese + math + english LIMIT 3;SELECT name, math, chinese + math + english 总分 FROM exam_result
ORDER BY 总分 LIMIT 3;
3.4将所有同学的语文成绩更新为原来的 2 倍
– 查看原数据
SELECT * FROM exam_result;
– 数据更新
UPDATE exam_result SET chinese = chinese * 2;
SELECT * FROM exam_result;
4.Delete
4.1删除数据
语法:
DELETE FROM table_name [WHERE ...] [ORDER BY ...] [LIMIT ...]
示例:
4.1.1删除孙悟空同学的考试成绩
– 查看原数据
SELECT * FROM exam_result WHERE name = '孙悟空';
– 删除数据
DELETE FROM exam_result WHERE name = '孙悟空';
SELECT * FROM exam_result WHERE name = '孙悟空';
4.1.2删除整张表数据
注意:删除整表操作要慎用!
语法:
delete from 表名;
4.2 截断表
在MySQL中,“截断表”(Truncate Table)是一个快速删除表中所有行数据的操作,但它不会删除表本身,也不会重置表的自增ID(这取决于表是否使用了AUTO_INCREMENT属性以及MySQL的版本和存储引擎)。与DELETE FROM table_name;相比,TRUNCATE TABLE语句通常执行得更快,因为它不记录每一行数据的删除操作到事务日志中,而是直接重新创建表(对于支持这种优化的存储引擎而言)。
语法:
TRUNCATE [TABLE] table_name
注意:这个操作慎用
- 只能对整表操作,不能像 DELETE 一样针对部分数据操作;
- 实际上 MySQL 不对数据操作,所以比 DELETE 更快,但是TRUNCATE在删除数据的时候,并不经过真正的事物,所以无法回滚
- 会重置 AUTO_INCREMENT 项
– 准备测试表
CREATE TABLE for_truncate (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(20)
);
– 插入测试数据
INSERT INTO for_truncate (name) VALUES ('A'), ('B'), ('C');
– 查看测试数据
SELECT * FROM for_truncate;
– 截断整表数据,注意影响行数是 0,所以实际上没有对数据真正操作
TRUNCATE for_truncate;
– 查看删除结果
SELECT * FROM for_truncate;
– 再插入一条数据,自增 id 在重新增长
INSERT INTO for_truncate (name) VALUES ('D');
– 查看数据
SELECT * FROM for_truncate;
– 查看表结构,会有 AUTO_INCREMENT=2 项
SHOW CREATE TABLE for_truncate\G
5.插入查询结果
语法:
INSERT INTO table_name [(column [, column ...])] SELECT...
示例:删除表中的的重复复记录,重复的数据只能有一份
– 创建原数据表
CREATE TABLE duplicate_table (id int, name varchar(20));
– 插入测试数据
INSERT INTO duplicate_table VALUES
(100, 'aaa'),
(100, 'aaa'),
(200, 'bbb'),
(200, 'bbb'),
(200, 'bbb'),
(300, 'ccc');
– 创建一张空表 no_duplicate_table,结构和 duplicate_table 一样
CREATE TABLE no_duplicate_table LIKE duplicate_table;
– 将 duplicate_table 的去重数据插入到 no_duplicate_table
INSERT INTO no_duplicate_table SELECT DISTINCT * FROM duplicate_table;
– 通过重命名表,实现原子的去重操作
RENAME TABLE duplicate_table TO old_duplicate_table,
no_duplicate_table TO duplicate_table;
– 查看最终结果
SELECT * FROM duplicate_table;
6.聚合函数
函数 | 说明 |
---|---|
COUNT([DISTINCT] expr) | 返回查询到的数据的 数量 |
SUM([DISTINCT] expr) | 返回查询到的数据的 总和,不是数字没有意义 |
AVG([DISTINCT] expr) | 返回查询到的数据的 平均值,不是数字没有意义 |
MAX([DISTINCT] expr) | 返回查询到的数据的 最大值,不是数字没有意义 |
MIN([DISTINCT] expr) | 返回查询到的数据的 最小值,不是数字没有意义 |
示例:
6.1统计班级共有多少同学
– 使用 * 做统计,不受 NULL 影响
SELECT COUNT(*) FROM students;
– 使用表达式做统计
SELECT COUNT(1) FROM students;
6.2 统计班级收集的 qq 号有多少
SELECT COUNT(qq) FROM students;
6.3统计本次考试的数学成绩分数个数
select count(math) from exam_result;
– COUNT(DISTINCT math) 统计的是去重成绩数量
select count(distinct math) from exam_result;
6.4统计数学成绩总分
SELECT SUM(math) FROM exam_result;
– 不及格 < 60 的总分,没有结果,返回 NULL
SELECT SUM(math) FROM exam_result WHERE math < 60;
6.5统计平均总分
SELECT AVG(chinese + math + english) 平均总分 FROM exam_result;
6.6 返回英语最高分
SELECT MAX(english) FROM exam_result;
6.7返回 > 70 分以上的数学最低分
SELECT MIN(math) FROM exam_result WHERE math >70;
7.group by子句的使用
在select中使用group by 子句可以对指定列进行分组查询
select column1, column2, .. from table group by column;
示例:
准备工作,创建一个雇员信息表(来自oracle 9i的经典测试表)
EMP员工表
DEPT部门表
SALGRADE工资等级表
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);
查看员工及部门:
如何显示每个部门的平均工资和最高工资
select deptno,avg(sal),max(sal) from emp group by deptno;
显示每个部门的每种岗位的平均工资和最低工资
select avg(sal),min(sal),job, deptno from emp group by deptno, job;
显示平均工资低于2000的部门和它的平均工资
统计各个部门的平均工资
select avg(sal) from emp group by deptno;
having和group by配合使用,对group by结果进行过滤
select avg(sal) as myavg from emp group by deptno having myavg<2000;
8.实战OJ
批量插入数据
查找薪水记录超过15条的员工号emp_no以及其对应的记录次数t
595. 大的国家
177. 第N高的薪水
相关文章:

MySQL --基本查询(下)
文章目录 3.Update3.1将孙悟空同学的数学成绩变更为 80 分3.2将曹孟德同学的数学成绩变更为 60 分,语文成绩变更为 70 分3.3将总成绩倒数前三的 3 位同学的数学成绩加上 30 分3.4将所有同学的语文成绩更新为原来的 2 倍 4.Delete4.1删除数据4.1.1删除孙悟空同学的考…...

vue3实现自定义主题色切换功能
目录 1.添加theme样式文件2.引入样式文件3.使用变量设置css样式4.设置主题样式5.切换方法 1.添加theme样式文件 文件内容如下: html[data-theme"light"]{--text-color: #000000;/* 写需要切换的样式 */ } html[data-theme"dark"]{--text-color…...

不懂性能测试,被面试官挂了...
性能测试旨在检查应用程序或软件在特定负载下工作时的响应性和稳定性,从而检测应用程序/软件在响应速度、可扩展性和稳定性方面是否达到预期的要求。 简而言之,性能测试目标就是为了识别并消除应用程序中的性能瓶颈。 本文将为大家详细介绍性能测试主要…...

JS逆向基础-谷歌浏览器调试技巧(详细)
概述 浏览器的调试工具在 JavaScript 逆向工程中,帮助开发者分析和理解代码执行流程、变量值及其变化,从而揭示隐藏逻辑和加密机制,为破解、修改或复现代码提供重要支持。 调试面板详解 谷歌浏览器的调试面板概览: 顶部操作栏 …...

那年我双手插兜,使用IPv6+DDNS动态域名解析访问NAS
估计有很多科技宅和我一样,会买一个NAS存储或者自己折腾刷一下黑群晖玩玩,由于运营商不给分配固定的公网IP,就导致我在外出的时候无法访问家里的NAS,于是远程访问常常受到IP地址频繁变动的困扰。为了解决这一问题,结合…...

CSS的弹性盒子模型(Flex box)
弹性盒子模型是CSS3的一种新的布局模式,弹性盒是一种当页面需要适应不同的屏幕大小以及设备类型时确保拥有合适的布局方式,引入弹性盒子模型的目的时提供更加有效的方式来对一个容器中的子元素进行排列,对齐和分配空白空间。 弹性盒子由弹性容…...

django drf 分页器
自定义分页器代码: from django.core.paginator import InvalidPage from django.core.paginator import Paginator as DjangoPaginator from django.utils.functional import cached_property from rest_framework.exceptions import NotFound from rest_framewor…...

SpringBoot整合JPA实现CRUD详解
SpringBoot版本是2.0以上(2.6.13) JDK是1.8 一、依赖 <dependencies><!-- jdbc --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jdbc</artifactId></dependency><!--…...

干部画像——精准辅助干部选拔的核心利器
干部画像,作为现代干部管理体系中的一项重要创新,已逐步成为精准辅助干部选拔的核心利器。通过综合运用多维度信息收集、系统化整理与科学化分析的方法,全面、客观、真实地勾勒出每位干部的综合素质与能力画像,为干部选拔工作提供…...

linux网络编程9
24.9.26学习目录 一.Web编程1.Javascript3.CGI 一.Web编程 1.Javascript 是一种基于对象并具有安全性能的脚本语言,是由浏览器内解释器翻译成可执行格式后执行; 即是网页与用户完成各种交互动作; 特点:基于对象的语言、简单性、…...

RabbitMQ应用
RabbitMQ 共提供了7种⼯作模式, 进⾏消息传递 一、七种模式的概述 1、Simple(简单模式) P:生产者,就是发送消息的程序 C:消费者,就是接收消息的程序 Queue:消息队列,类似⼀个邮箱, 可以缓存消息; ⽣产者…...

大数据Flink(一百二十四):案例实践——淘宝母婴数据加速查询
文章目录 案例实践——淘宝母婴数据加速查询 一、创建数据库表并导入数据 二、创建session集群 三、源表查询 四、指标计算 案例实践——淘宝母婴数据加速查询 随着…...

无限大薄板的电场
单块无限大薄板两端的电场 单块无限大的薄板,如果上面带有均匀分布的电荷,就会在薄板的两侧产生电场,电场大小与距离平板的位置无关,方向与平板垂直,如果平板带正电荷,则电场方向向外指向两侧,…...

外包干了1个多月,技术明显退步了。。。。。
回望过去,我是一名普通的本科生,2019年有幸通过校园招聘踏入了广州一家软件公司的大门,成为了一名功能测试工程师。岁月如梭,转眼间,我已在这个岗位上默默耕耘了近四年。起初,我对这份工作充满了热情与期待…...

芝法酱学习笔记(0.4)——SpringBoot多模块项目打包,resource分离,lib分离,启动脚本
前言 上期讲了如何在windows平台搭建Java后端的开发环境,并给出了一个简单的hello world级别的多模块代码示例。但上期仅仅是在IDEA中运行,和正式的生产环境完全不同。 本期将讲解,如何配置SpringBoot多模块项目的maven打包,并分…...

进程(一万字学习笔记)
------------------------本文为学习进程记录的学习笔记,如有问题欢迎指正 -------------------------- 目录 1.定义 2.进程的种类 2.进程的内存布局 3.进程控制块(PCB) 4.进程源语 fork() 写时复制 exec() execl函数 wait() #进…...

Docker实践与应用:深度探索与丰富案例
一、引言 在当今的软件开发和运维领域,Docker已经成为了一种不可或缺的技术。它以容器化的方式改变了软件的开发、部署和运行模式,为企业和开发者带来了前所未有的便利和效率提升。本文将深入探讨Docker的实践操作以及丰富的应用举例,带您全面…...

信息安全工程师(21)安全协议
前言 安全协议是建立在密码体制基础上的一种交互通信协议,它运用密码算法和协议逻辑来实现认证、密钥分配、数据机密性、完整性和抗否认性等安全目标。 一、定义与目的 安全协议旨在确保网络环境中信息交换的安全性,通过密码技术和协议逻辑来保护数据的机…...

Starrocks with 嵌套
在某些场景下需要进行 with 嵌套 需要以下进行处理,报如图错误 with abc as (select * from .. ) insert into xxx select * from abc尝试创建物化视图 CREATE MATERIALIZED VIEW IF NOT EXISTS ads_test.xxx_mv REFRESH DEFERRED MANUAL AS with abc as (select…...

ubuntu 安装neo4j
在Ubuntu上安装Neo4j的步骤如下: 1.更新包管理器的索引列表: sudo apt update 2.导入Neo4j的GPG密钥: wget -O - https://debian.neo4j.org/neotechnology.gpg.key | sudo apt-key add - 3.添加Neo4j的仓库到APT源列表: ech…...

云计算课程作业1
作业1 Xmanager连接 rhel连接 作业2 首先确认你的虚拟机设置的是NAT 1-3 然后打开这篇blog,并完成第一步和第二步 因为我们是NAT,所以不需要连接网桥,即跳过第三步,但是这里ping一下测试网络连接 2- 如果到这里你发现提示yum…...

建筑智能,推动智慧社区发展
建筑智能已经成为现代城市建设的热门词汇。它不仅是提高城市建筑现代化水平的必由之路,也是未来城市智能化的重要标志。其中,智能社区是建筑智能化的重要环节之一。 智能社区是指以信息技术为基础,通过信息技术实现社区设施设备网络化、监管…...

conda 虚拟环境安装GDAL
一. 背景 换了新电脑,要重新安装GDAL。从前是下了GDAL的.wheel文件用pip安装,但平时下轮子的网站现在都打不开,比如https://www.lfd.uci.edu/~gohlke/pythonlibs/#gdal,不晓得为什么。 后面看了这篇教程解决了问题(h…...

STM32转AT32代码转换
1. 引言 在嵌入式开发中,我们经常会遇到更换单片机芯片的事情,若芯片是同一厂家的还好说,若是不同厂家的则需要重新写,重新调,重新去学习其底层驱动程序,比较费时费力。如:ST32转AT32、ST32转G…...

vue中怎么覆盖 sytle中的样式
好的,下面是一个具体的例子,展示如何在 Vue 组件中覆盖样式。 示例:覆盖组件样式 假设我们有一个组件 MyComponent.vue,其中包含一些样式: <template><div class"my-component"><h1>标…...

php中打印函数
在PHP中,打印函数主要用于输出或显示数据。常用的打印函数包括: 1.echo- 可以输出一个或多个字符串。 echo "Hello, World!"; echo "Hello", " ", "World!"; 2.print - 功能与echo相似,但print只能…...

[单master节点k8s部署]23.构建EFK日志收集平台(二)
部署elasticsearch集群 已经完成的工作:创建存储。首先配置了nfs存储提供商(nfs-deployment.yaml),然后通过创建存储类(storageclass.yaml)来将nfs服务器与存储类绑定: [rootmaster 31efk]# c…...

C#的属性(Property)应用说明(二)
Property的应用说明补充: 一.自定义逻辑: 可以在 get 和 set 访问器中包含自定义的逻辑。 public class Person {private string name;public string Name{get { return name; }set{if (string.IsNullOrWhiteSpace(value))throw new ArgumentException…...

VUE.js笔记
1.介绍vue Vue 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建,并提供了一套声明式的、组件化的编程模型,帮助你高效地开发用户界面。无论是简单还是复杂的界面,Vue 都可以胜任。 Vue 应用程序的基本…...

SpringBoot--yml配置文件的时间/大小的单位转换
原文网址:SpringBoot--yml配置文件的时间/大小的单位转换_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍SpringBoot的yml(properties)配置文件的时间/大小的单位转换。 概述 SpringBoot可以将yml中的配置绑定到一个Java类的字段&#x…...