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

数据库造神计划第八天---增删改查(CRUD)(4)

      🔥个人主页:寻星探路

🎬作者简介:Java研发方向学习者

📖个人专栏:《从青铜到王者,就差这讲数据结构!!!》、 《JAVA(SE)----如此简单!!!》、《数据库那些事!!!》

⭐️人生格言:没有人生来就会编程,但我生来倔强!!!


目录

 一、插入查询结果

1、语法

2、示例

 二、聚合函数

1、常用函数

2、示例

2.1COUTN(有多少记录)

2.2SUM(和)

2.3AVG(平均)

2.4MAX(最大)

2.5MIN(最小)

三、group by分组查询

1、语法

2、示例

3、having子句

4、Having与Where的区别


续接上一话:

 一、插入查询结果

        把一个查询语句的结果,作为另一个插入语句的插入的数据

1、语法

 INSERT INTO table_name [(column [, column ...])] SELECT ...

2、示例

        删除表中的重复记录,重复的数据只能有⼀份

# 创建测试表,并构造数据
CREATE TABLE t_recored (id int, name varchar(20));
# 插⼊测试数据
INSERT INTO t_recored VALUES(100, 'aaa'),(100, 'aaa'),(200, 'bbb'),(200, 'bbb'),(200, 'bbb'),(300, 'ccc');
# 查看结果
select * from t_recored;

        实现思路:原始表中的数据⼀般不会主动删除,但是真正查询时不需要重复的数据,如果每次查询都使用DISTINCT进行去重操作,会严重效率。可以创建⼀张与 t_recored 表结构相同的表,把去重的记录写⼊到新表中,以后查询都从新表中查,这样真实的数据不丢失,同时又能保证查询效率

# 创建⼀张新表,表结构与t_recored相同
create table t_recored_new like t_recored;
# 新表中没有记录
selec * from t_recored_new;
# 原表中的记录去重后写⼊到新表
insert into t_recored_new select distinct * from t_recored;
# 查询新表中的记录,实现去重
select * from t_recored_new;

# 新表与原来重命名
rename table t_recored to t_recored_old, t_recored_new to t_recored;
# 查询重命名后表中的记录,实现需求且原来中的记录不受影响
select * from t_recored;

select * from t_recored_old;

 二、聚合函数

        针对查询结果进行一些行级别的"统计"!!!

        先查询,再聚合!!!

1、常用函数

2、示例

#创建表结构
CREATE TABLE exam (id BIGINT,name VARCHAR(20) COMMENT '同学姓名',chinese float COMMENT '语⽂成绩',math float COMMENT '数学成绩',english float COMMENT '英语成绩'
);#插⼊测试数据 
INSERT INTO exam (name, chinese, math, english) VALUES(1, '唐三藏', 134, 98, 56),(3, '猪悟能', 176, 98, 90),(4, '曹孟德', 140, 90, 67),(5, '刘⽞德', 110, 115, 45),(6, '孙权', 140, 73, 78),(7, '宋公明', 150, 95, 30),(8, '张飞', 54 ,0 ,NULL);

2.1COUTN(有多少记录)

(1)统计exam表中有多少记录

# 使⽤ * 做统计
select count(*) from exam;

# 使⽤常量做统计
select count(1) from exam;

(2)统计有多少学生参加数学考试

# 使⽤指定列做统计
select count(math) from exam;

(3)统计有多少学生参加英语考试

# 查看表中的记录
select * from exam;

                (张飞没参加英语考试)

# NULL 的数据不会计⼊结果
select count(english) from exam;

(4)统计语文成绩小于50分的学生个数

# 加⼊where条件
select count(chinese) from exam where chinese < 10;

 一个 sq| 中有条件,有 order by,有 limit 有聚合函数执行顺序如何的??
        1)遍历表的每一行
        2)执行 where,把每一行代入条件
        3)获取到列, 表达式求值,定义别名操作,
        4)执行 order by 对结果排序
        5)执行 limit 进行限制长度
        6)再进行聚合

2.2SUM(和)

#注:sum 操作会直接排除 null 值!!!

(1)统计所有学生数学成绩总分

 select sum(math) from exam;

(2)统计所有学生英语成绩总分

# 值为NULL的列不参与统计
select sum(english) from exam;

(3)不能统计非数值的列

select sum(name) from exam;

2.3AVG(平均)

(1)统计英语成绩的平均分

# NULL值不参与统计
select avg(english) from exam;

(2)统计平均总分

select avg(chinese + math + english) as 总分 from exam;

2.4MAX(最大)

(1)查询英语最高分

select max(english) from exam;

2.5MIN(最小)

(1)查询>70分以上的数学最低分

select min(math) from exam where math > 70;

(2)查询数据成绩的最高分与英语成绩的最低分

# 可以使⽤多个聚合函数
select max(math), min(english) from exam;

三、group by分组查询

        group by子句的作用是通过⼀定的规则将⼀个数据集划分成若干个小的分组,然后针对若干个分组进行数据处理,比如使用聚合函数对分组进行统计。

1、语法

SELECT {col_name | expr} ,... , aggregate_function (aggregate_expr)FROM table_referencesGROUP BY { col_name | expr}, ...[H AVING where_condition]

        col_name|expr:要查询的列或表达式,可以有多个,必须在 据 GROUP BY 子句中作为分组的依

        aggregate_function:聚合函数,比如COUNT(),SUM(),AVG(),MAX(),MIN()

        aggregate_expr:聚合函数传入的列或表达式,如果列或表达式不在 GOURP BY 子句中,必须包含中聚合函数中

2、示例

        准备测试表及数据职员表emp,列分别为:id(编号),name(姓名),role(角色),salary(薪水)

 drop table if exists emp;create table emp (id bigint primary key auto_increment,name varchar(20) not null,role varchar(20) not null,salary decimal(10, 2) not null);insert into emp values (1, '⻢云', '⽼板', 1500000.00);insert into emp values (2, '⻢化腾', '⽼板', 1800000.00);insert into emp values (3, '张三', '程序员', 10000.00);insert into emp values (4, '李四', '程序员', 12000.00);insert into emp values (5, '王五', '程序员', 9000.00);insert into emp values (6, '赵六', '程序员', 8000.00);insert into emp values (7, '孙悟空', '游戏⻆⾊', 956.8);insert into emp values (8, '猪悟能', '游戏⻆⾊', 700.5);insert into emp values (9, '沙和尚', '游戏⻆⾊', 333.3);select * from emp;

        统计每个角色的人数

select role, count(*) from emp group by role;

        统计每个角色的平均工资,最高工资,最低工资

select role, ROUND(avg(salary),2) as 平均⼯资, ROUND(max(salary),2) as 最⾼⼯资, ROUND(min(salary),2) as 最低⼯资 from emp group by role;

3、having子句

        使用GROUPBY对结果进行分组处理之后,对分组的结果进行过滤时,不能使用WHERE 子句,而要使用 HAVING 子句

        显示平均工资低于1500的角色和它的平均工资

select role, avg(salary) from emp group by role having avg(salary) < 1500;

        where  同样可以使用
        where  的条件是在聚合之前使用的条件
        having  的条件是在聚合之后使用的条件

4、Having与Where的区别

(1)Having用于对分组结果的条件过滤

(2)Where用于对表中真实数据的条件过滤

        由于内容较多,会分为多篇讲解,预知后续内容,请看后续博客!!!


文章转载自:

http://iUv0lSVN.wnpps.cn
http://nE00ydbv.wnpps.cn
http://jCcm1ViZ.wnpps.cn
http://e3N48hFE.wnpps.cn
http://fTc1VAnS.wnpps.cn
http://WZ0CuY8B.wnpps.cn
http://stofmpQd.wnpps.cn
http://DhU1KOUH.wnpps.cn
http://S6G5mber.wnpps.cn
http://8HxJfRwd.wnpps.cn
http://UsPrJe9m.wnpps.cn
http://CN8J9bKB.wnpps.cn
http://KTeRKqhd.wnpps.cn
http://ZPJhTCd3.wnpps.cn
http://q1mHBzuW.wnpps.cn
http://kmpBJZgI.wnpps.cn
http://zXMsW42j.wnpps.cn
http://wV5WOTkQ.wnpps.cn
http://9x95Ftzp.wnpps.cn
http://AbJyFJ9f.wnpps.cn
http://jNyNooMC.wnpps.cn
http://VFapoZi0.wnpps.cn
http://mzxT33hV.wnpps.cn
http://MvgiBxDK.wnpps.cn
http://OVg6aZtc.wnpps.cn
http://vh7kZdPy.wnpps.cn
http://atkKUwKw.wnpps.cn
http://ndY9FFJv.wnpps.cn
http://QMGXIKm8.wnpps.cn
http://ksR98zIU.wnpps.cn
http://www.dtcms.com/a/382927.html

相关文章:

  • Spark专题-第一部分:Spark 核心概述(2)-Spark 应用核心组件剖析
  • LLM大模型-大模型微调(常见微调方法、LoRA原理与实战、LLaMA-Factory工具部署与训练、模型量化QLoRA)
  • 使用Docker轻松部署Neo4j图数据库
  • 【Docker+Nginx】前后端分离式项目部署(传统打包方式)
  • 基于Grafana Loki与Prometheus的日志与指标一体化监控平台实战经验分享
  • SQL 数据库简介
  • Grafana自定义dashboard与监控主流中间件
  • LabVIEW 中的振动分析与信号处理
  • 简单UDP网络程序
  • RCE绕过技术:取反与异或的深入解析与实践
  • 算法题(207):最长上升子序列(经典线性dp题)
  • 【Nginx开荒攻略】Nginx主配置文件结构与核心模块详解:从0到1掌握nginx.conf:
  • 操作系统(二) :CPU调度
  • Knockout.js DOM 数据存储模块详解
  • js趣味游戏 贪吃蛇
  • Ajax-day2(图书管理)-弹框显示和隐藏
  • 低代码平台-开发SDK设计
  • Java 线程池面试高频问题全解析
  • 【HarmonyOS】MVVM与三层架构
  • 算法—双指针1.2
  • hcl ac ap 本地转发学习篇
  • Velox:数据界的超级发动机
  • 嵌入式系统启动流程
  • TRAE通用6A规则+敏捷开发5S规则
  • 【Java后端】Spring Boot 集成雪花算法唯一 ID
  • 【知识管理】【科普】新概念的学习路径
  • flask入门(五)WSGI及其Python实现
  • 第17课:自适应学习与优化
  • 详解安卓开发andorid中重要的agp和gradle的关系以及版本不匹配不兼容问题的处理方法-优雅草卓伊凡
  • Linux应用开发(君正T23):三网智能切换及配网功能