当前位置: 首页 > news >正文

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

注意:这个操作慎用

  1. 只能对整表操作,不能像 DELETE 一样针对部分数据操作;
  2. 实际上 MySQL 不对数据操作,所以比 DELETE 更快,但是TRUNCATE在删除数据的时候,并不经过真正的事物,所以无法回滚
  3. 会重置 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高的薪水

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

相关文章:

  • TypeScript 设计模式之【观察者模式】
  • 照片压缩方法分享,掌握这些小技巧轻松压缩
  • Python中的数据处理与分析:从基础到高级
  • django开发流程1
  • 图像生成大模型 Imagen:AI创作新纪元
  • 9_23_QT窗口
  • 【C/C++】【基础数论】33、算数基本定理
  • 选择租用徐州存储服务器有什么作用?
  • 数据库系列(1)常见的四种非关系型数据库(NoSQL)
  • 前端Vue学习笔记02
  • go的结构体、方法、接口
  • 【1分钟学会】实用的Git工作流程
  • 初学51单片机之I2C总线与E2PROM
  • 追随 HarmonyOS NEXT,Solon v3.0 将在10月8日发布
  • 基于饥饿游戏搜索优化随机森林的数据回归预测 MATLAB 程序 HGS-RF
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • eclipse的离线汉化
  • Java多态
  • Leetcode 27 Remove Element
  • React-flux杂记
  • Swift 中的尾递归和蹦床
  • Tornado学习笔记(1)
  • 对象管理器(defineProperty)学习笔记
  • 后端_MYSQL
  • 入手阿里云新服务器的部署NODE
  • 使用agvtool更改app version/build
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 一起参Ember.js讨论、问答社区。
  • 原生 js 实现移动端 Touch 滑动反弹
  • # 计算机视觉入门
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • (1)Jupyter Notebook 下载及安装
  • (LeetCode) T14. Longest Common Prefix
  • (Redis使用系列) Springboot 在redis中使用BloomFilter布隆过滤器机制 六
  • (补充):java各种进制、原码、反码、补码和文本、图像、音频在计算机中的存储方式
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • (一)VirtualBox安装增强功能
  • (转)负载均衡,回话保持,cookie
  • (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版
  • (转)原始图像数据和PDF中的图像数据
  • ./和../以及/和~之间的区别
  • .env.development、.env.production、.env.staging
  • .gitignore文件_Git:.gitignore
  • .NET / MSBuild 扩展编译时什么时候用 BeforeTargets / AfterTargets 什么时候用 DependsOnTargets?
  • .net core 客户端缓存、服务器端响应缓存、服务器内存缓存
  • .net core 控制台应用程序读取配置文件app.config
  • .Net多线程Threading相关详解
  • .NET文档生成工具ADB使用图文教程
  • [ vulhub漏洞复现篇 ] Celery <4.0 Redis未授权访问+Pickle反序列化利用
  • [240727] Qt Creator 14 发布 | AMD 推迟 Ryzen 9000芯片发布
  • [AI aider] 打造终端AI搭档:Aider让编程更智能更有趣!