MySQL增删查改(进阶2)

news2024/9/20 18:26:51

一、查询

1.聚合查询

1.1聚合函数:

(1)count()  获取整个结果集的行数(数据的数量)

count(某个字段)=count(*)=count(常量值)

(2)sum(某个字段)   将结果集这个字段求和计算

(3)avg(某个字段)   将结果集这个字段求平均值计算

(4)max(某个字段)   将结果集这个字段取最大值

(5)min(某个字段)   将结果集这个字段取最小值

2-5会将结果集进行聚合操作,只返回一条数据

聚合是在 查询返回结果集后再进行聚合的

1.2 group by:分组

语法:select 查询字段 from 表 where 条件 group by 分组字段1,分组字段2

 表数据如下:

分组查询操作:

查询字段必须是

(1)分组字段

(2)如果分组会造成聚合,非分组字段必须写在聚合函数中;分组不会造成聚合,非分组字段就可以直接写

(3) id是主键,分组不会有聚合操作,非分组字段还是具有真实含义:

  • 对多个字段分组

业务:一个学生,一个课程,在多个学期可以考试

一个学生,考多个课程的考试成绩

学生-->成绩=1:m

学生+课程-->成绩=1:n

此时多个分组字段就有意义

1.3 having:分组后的条件过滤

语法:select 查询字段 from 表 where 条件 group by 分组字段1,分组字段2 having 分组后的条件

因为having是在分组后执行,having中需要使用字段,和分组查询字段,是三个相同的条件

 查询字段其实可以包含count(0)

  • group by+having操作:
  • 查询学生表,学生姓名,班级id重复的就是重复数据

 

一般来说业务上真实存在的一些bug 特别是一些高并发的场景,就会插入一些重复数据,主键是不同,但是业务上某些字段相同,就可以判定是重复数据

2.联合查询

 

  • 多张表之间逗号间隔,返回的就是笛卡尔积

上面两张表的笛卡尔积:

(classes.*,student.*)

但是观察可以知道,上面笛卡尔积的结果有部分数据没有意义(2,4,5条数据没有意义) 

(1)遍历第一张表的数据

(2)每条数据与第二张表的所有数据相关联

(3)遍历第二张表的数据

笛卡尔积的结果:就是两张表的每条数据相连接,产生的一个结果集(虚拟表)

结果集的行数=第一张表的行数*第二张表的行数

联合查询:单纯的笛卡尔积返回的结果集进行过滤(把不符合真实业务的数据过滤掉)剩下的就是有意义的。

where条件过滤之后:(表名.字段名来判断是否相同--->可能比较麻烦,那么可以使用表的别名)

使用别名:(别名.字段名)

 结果集字段可能有重复,建议:若只是简单查询数据则写--->*;写项目把查询字段写全(如下)

2.1内连接

语法:

(1)select 查询字段 from 表1,表2 where 连接条件 and 其他条件

(2)select 查询字段 from 表1 [inner] join 表2 on 连接条件 and 其他条件

连接条件和其他条件没有区别;[inner]表示可写可不写

多张表也可以进行关联,比如:

查询所有班级在id=1的课程的平均分:

(1)查询所有学生,班级,考试成绩的信息

 (2)where查询条件 课程id=1

(3)对班级id字段进行分组,取score的聚合avg

扩展: 

(1)查询语文课程所有班的平均分:

(2) 所有班级所有课程的平均分:

  • classes <=>student  一对多
  • student <=> exam_score 一对多
  • course <=>exam_score 一对多
  • student <=> course 多对多

班级表(classes)通过学生表(student),就可以和考试成绩表(exam_score)建立关系

 

2.2外连接

只能使用join on的写法,且left join表示左外连接;right join表示右外连接

语法:

select 查询字段 from 左表 left join 右表 on 连接条件 where 其他条件

select 查询字段 from 左表 right join 右表 on 连接条件 where 其他条件

观察外连接和内连接查询结果的区别 :

  • 内连接:关联学生和班级班级中没有学生的就无法显示;
  • 外连接:班级表作为外表,即使班级没有学生,也可以显示;

 连接条件不满足的时候,外表的数据存在,关联的另一张表没有关联数据,还是会返回;

外连接,是否返回这条数据=连接条件满足 | 外表存在;

其他条件,就必须满足

内连接VS外连接:

内连接必须满足连接条件+其他条件才会返回;

外连接满足连接条件+其他条件或者满足其他条件但外表存在(即使不满足连接条件)也可以返回;

2.3自连接

一张表,自己连接自己。

这里是同一张表,不同行,不同字段进行比较

(1)先取笛卡尔积观察结果

(2)取同一个学生,语文成绩比数学成绩高:按学生id作为连接条件

 (3)第一张表取语文成绩,第二张表取数学成绩

 (4)取出来后进行比较

查询语文成绩大于数学成绩:

 e1与e2自连接(自身对成绩进行比较),e1与c1连接(取语文成绩),e2与c2连接取数学成绩

2.4子查询

又叫嵌套查询

select 语句,用()包起来,用在其他的地方:如常量、表、in

(1)子查询返回一行一列的时候,可以当作常量

查询张三同学的同班同学:

(2)[not] in(多个常量值,逗号间隔)--->子查询:返回多行数据

①一个字段in(子查询)--->返回多行数据,一个字段

②(多行数据)in(子查询)--->返回多行数据,查询字段和in前面的字段数量、顺序一致

(3)not exists

 (4)子查询作为临时表

2.5合并查询

2.5.1union

取两个结果集的并集,并去重(按结果集所有查询字段去重)

单表的结果集取并集其实是可以使用or实现的,但是union是使用两个结果集(不一定是一张表)

2.5.2union all

取两个结果集的并集

 两个结果集的查询字段,顺序和数量要一致;

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

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

相关文章

华为云云耀云服务器L实例评测|华为云耀云服务器L实例评测用例(五)

六、华为云耀云服务器L实例评测用例&#xff1a; “兵马未动&#xff0c;粮草先行”&#xff0c;随着企业业务的快速发展&#xff0c;服务器在数字化建设体系至关重要&#xff0c;为了保证服务器的稳定性、可靠性&#xff0c;需要对服务器进行评测&#xff0c;以确保服务器能够…

用“和美”丈量中国丨走进酒博物馆系列⑨

五粮液酒文化博览馆始建于1988年&#xff0c;是中国酒业最早的酒文化博览馆&#xff0c;于2020年启动升级改造。 现在我们看到的五粮液酒文化博览馆&#xff0c;采用了当今博览馆最前沿的展陈方式&#xff0c;展陈设计与空间布局更具灵动性和多元性&#xff0c;蕴含传统文化氛围…

Python的就业前景及薪资收入

作为近几年来特别受欢迎的编程语言之一&#xff0c;Python一直以来被众多行业内人士寄予厚望&#xff0c;今后有可能替代老牌霸主Java&#xff0c;成为新一代编程语言榜首。 与其他语言相比&#xff0c;Python中的语言语法特别简单&#xff0c;并且代码具有可读性&#xff0c;多…

ip https证书怎么更换ip地址

ip证书是一种基于互联网的数字证书&#xff0c;用于证明持有证书的单位或个人具有合法的身份和授权。它由权威的第三方机构颁发&#xff0c;具有安全、可靠、保密的特点。ip https证书是https证书中比较特殊的一种数字证书&#xff0c;它主要保护的就是只拥有公网ip地址的站点。…

【Python爬虫 js渲染思路一】

Python爬虫 破解js渲染思路一 当我们在谈论网页js渲染的时候&#xff0c;我们在谈论什么 js渲染网页&#xff0c;从某种程度来说&#xff0c;是指单纯的http请求&#xff0c;返回的文本数据&#xff0c;与我们在浏览器看到的内容&#xff0c;相距甚远.其可包括为以下几点&…

How To Improve Your LISTENING SKILLS( 如何提升你的听力技能) 学习

目录 如何提升你的听力技能 三个大问题 1.你有没有 fake listening 2.selective listening 3.critical listening 六个解决方案 1&#xff0c;awareness 请主动打破这个循环 2.在身体和精神上做好倾听的准备 3.set a goal 4.sit front /center listening is a s…

阶段六-Day03-MyBatis

一、框架介绍 1. 框架的作用 将许多项目封装起来,形成了框架 2. 框架的优缺点 1. 优点 1.1 更好用 框架都是对Java原生内容进行的封装&#xff0c;对于企业级项目开发来说&#xff0c;使用框架比使用原生Java更好用&#xff0c;写起来更简单。 1.2 更强大 框架封装过程…

LaunchView/启动页 的实现

1. 创建启动画板&#xff0c;LaunchScreen.storyboard 添加组件如图: 2. 项目中设置只支持竖屏&#xff0c;添加启动画板&#xff0c;如图: 3. 创建启动画面动画视图&#xff0c;LaunchView.swift import SwiftUI/// 启动视图 struct LaunchView: View {/// 字符串转换为字符串…

第二章——古典密码学及算法实现

凯撒加密 凯撒加密算法实现&#xff1a; # 凯撒密码加密函数 def caesar_encrypt():string [a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u,v, w, x, y, z]# 密文列表cipher_text_list []cipher int(input("请输入你的密钥:"))plain_text in…

基于ChatGPT+词向量/词嵌入实现相似商品推荐系统

最近一个项目有个业务场景是相似商品推荐&#xff0c;给一个商品描述(比如 WIENER A/B 7IN 5/LB FZN )&#xff0c;系统给出商品库中最相似的TOP 5种商品&#xff0c;这种单纯的推荐系统用词向量就可以实现&#xff0c;不过&#xff0c;这个项目特点是商品库巨大&#xff0c;有…

SQL中for xml path 的用法

1. 用法 是一种将查询结果转换为 XML 格式的方法。它可以将查询结果中的每一行转换为一个 XML 元素&#xff0c;并且可以指定元素的名称和属性。 2. 应用示例 有一张学生选修课程的表&#xff0c;如下图所示 希望整合成下图所示效果 --建表 if object_id(StudentInfo,u) is…

webrtc用clang编译支持h264,支持msvc调用库

webrtc遇到困扰&#xff1a; 如果msvc编译&#xff0c;ffmpeg编译失败&#xff0c;需要替换ffmpeg库。如果用clang编译&#xff0c;vs或qt调用dll又存在崩溃。 经过反复尝试找到解决方法&#xff1a; 一、编译 1、编译参数 //我得环境配置 set DEPOT_TOOLS_UPDATE0 set DEP…

解决linux终端启动后不能自动加载环境变量配置(个人配置文件)详解

文章目录 设备环境问题阐述解决方法 设备环境 WSL2 Ubuntu-20.04 本教程适配所有linux&#xff0c;不管你是虚拟机还是WSL或者其他的平台。 问题阐述 由于专业课的要求&#xff0c;需要在Linux中新建一个用户&#xff0c;然后转到这个用户来完成专业课的各种实践要求。有可…

HttpServletRequest对象与RequestDispatcher对象

一、HttpServletRequest对象 1.介绍 在Servlet API中&#xff0c;定义了一个HttpServletRequest接口&#xff0c;它继承自ServletRequest接口&#xff0c;专门用来封装HTTP请求消息。由于HTTP请求消息分为请求行、请求消息头和请求消息体三部分&#xff0c;因此&#xff0c;在…

Android免杀小结

目录 msfvenom 自动生成 自带免杀 工具免杀 Thefatrat backdoor-apk old-fatrat msfVenom嵌入式方法 venom 工具小记 加壳 源码免杀 加壳 源码混淆 数据通信 启动和运行方式修改 对抗反编译 反编译工具崩溃 ZIP文件格式对抗 ZIP通用位伪加密 AndroidManife…

暴涨100万粉仅用一个月,B站内容趋势前线洞察

- 导语 在这个9月&#xff0c;B站涌现多位黑马UP主&#xff0c;有的UP主自入驻B站以来&#xff0c;一个月的时间就涨粉百万晋升为头部UP主&#xff0c;有的UP主因内容受到B站百万年轻人的追捧&#xff0c;展现账号爆发力。 接下来&#xff0c;飞瓜数据&#xff08;B站版&…

智慧工地:助力数字建造、智慧建造、安全建造、绿色建造

智慧工地管理系统融合计算机技术、物联网、视频处理、大数据、云计算等&#xff0c;为工程项目管理提供先进的技术手段&#xff0c;构建施工现场智能监控系统&#xff0c;有效弥补传统监理中的缺陷&#xff0c;对人、机、料、法、环境的管理由原来的被动监督变成全方位的主动管…

将 mysql 数据迁移到 clickhouse (最新版)

一、前驱知识 已经在mysql中插入了海量的数据了&#xff0c;这个时候mysql 承载不了这么大的数据&#xff0c;并且数据只需要查询&#xff0c;修改和删除非常少&#xff0c;并且不需要支持事务&#xff0c;这个时候需要换一个底层存储&#xff0c;这里选用的是 clickhouse 来进…

智能视频分析系统AI智能分析网关V3触发告警图片不显示该如何解决?

AI智能分析网关V3包含有20多种算法&#xff0c;包括人脸、人体、车辆、车牌、行为分析、烟火、入侵、聚集、安全帽、反光衣等等&#xff0c;可应用在安全生产、通用园区、智慧食安、智慧城管、智慧煤矿等场景中。将网关硬件结合我们的视频监控系统EasyCVR一起使用&#xff0c;可…

vue3插件——vue-web-screen-shot——实现页面截图功能

最近在看前同事发我的vue3框架时&#xff0c;发现他们有个功能是要实现页面截图功能。 vue3插件——vue-web-screen-shot——实现页面截图功能 效果图如下&#xff1a;1.操作步骤1.1在项目中添加vvue-web-screen-shot组件1.2在项目入口文件导入组件——main.ts1.3在需要使用的页…