MySQL之聚合查询和联合查询

news2024/11/25 16:51:35

一、聚合查询(行与行之间的计算)

1.常见的聚合函数有

函数

说明

count

查询到的数据的数量

sum

查询到的数据的总和(针对数值,否则无意义)

avg

查询到的数据的平均值(针对数值,否则无意义)

max

查询到的数据的最大值(针对数值,否则无意义)

min

查询到的数据的最小值(针对数值,否则无意义)

Select count(*) from student(统计行数)
Select count(1) from student(统计第一列数据的行数,如果有null则不算行数)
Select sum(math) from student(数学成绩总分)
Select sum(math) from student where math > 60(数学大于60的总分)
Select avg(math+chinese+english) from student(统计平均总分)
Select max(math) from student(数学最高分)
Select min(math) from student where math >60(数学大于60的最低分)

 

2.group by

select 中使用 group by 子句可以对指定列进行分组查询。使用  group by 进行分组查询时,select 指定的字段必须是“分组依据字段”,其他字段若想出现在select 中则必须包含在聚合函数中。

select column1, sum(column2), .. from table group by column1,column3;
//示例:查询每个角色的最高工资、最低工资和平均工资 
Select role,max(salary),min(salary),avg(salary) from emp group by role;

3.having

group by 子句进行分组以后,需要对分组结果再进行条件过滤时,不能使用 WHERE 语句,而需要用Having

//示例:显示平均工资低于1500的角色和它的平均工资
select role,avg(salary) from emp group by role having avg(salary)<1500; 

关于分组查询指定条件有三种情况:

1.分组之前,指定条件(先筛选,再分组)用where

2.分组之后,指定条件(先分组,再筛选)用having

3.分组之前和分组之后都指定条件(先where后having)

关于执行顺序:

59d38a8657c14fcaaef9bdd1f1eb570d.png

 

二、联合查询(多表查询)

多表查询是对多张表的数据取笛卡尔积,笛卡尔积是通过排列组合算出来的,因此包含了很多无效数据,因此需要加上连接条件,用来筛选有效的数据。

1.进行联合查询的步骤:

1.首先计算笛卡尔积

2.引入连接条件(如:where student.id = score.student_id)

3.再根据需求,加入必要的条件(where where student.id = score.student_id and student.name=’xxx’)

4.去掉多余的列,只保留需要关注的列(select student.name,score.score from student,score where where student.id = score.student_id and student.name=’xxx’)

2.内连接(from,join on)

语法:

select 字段 from 表1 (as)别名1 [inner] join 表2 (as)别名2 on 连接条件 and 其他条件;

select 字段 from 表1 (as)别名1,表2 (as)别名2 where 连接条件 and 其他条件;

示例:查询“张三”同学的成绩

select sco.score from student as stu inner join score as sco on stu.id=sco.student_id

and stu.name='张三';

或者

select sco.score from student as stu, score as sco where stu.id=sco.student_id and

stu.name='张三';

3.外连接(left/right join on)

外连接分为左外连接和右外连接。如果联合查询,左侧的表完全显示我们就说是左外连接;右侧的表完全显示我们就说是右外连接。

语法:

左外连接,表1完全显示

select 字段名  from 表名1 left join 表名2 on 连接条件;

右外连接,表2完全显示

select 字段 from 表名1 right join 表名2 on 连接条件;

4.自连接

自连接是指在同一张表中连接自身进行查询。

示例:显示所有“数学”成绩比“语文”成绩高的学生成绩信息

先查询“数学”和“语文”课程的id

select id,name from course where name='数学' or name='语文';

数学id=1;

语文id=2;

再查询成绩表中,“数学”成绩比“语文”成绩 好的信息

select s1.* from score s1,score s2 where s1.student_id = s2.student_id and s1.score > s2.score and s1.course_id = 1 and s2.course_id = 2;

5.子查询

子查询是指嵌入在其他sql语句中的select语句,也叫嵌套查询。

单行子查询:返回一行记录的子查询

select * from student where classes_id=(select classes_id from student where name=’张三’);

多行子查询:返回多行记录的子查询

1.使用(not) in 关键字

使用 in 

select * from score where course_id in (select id from course where

name='语文' or name='英文');

使用not in

select * from score where course_id not in (select id from course where

name!='语文' and name!='英文');

1.使用(not) exists 关键字

使用 exists 

select * from score sco where exists (select sco.id from course cou

where (name='语文' or name='英文') and cou.id = sco.course_id);

使用 not exists

select * from score sco where not exists (select sco.id from course cou

where (name!='语文' and name!='英文') and cou.id = sco.course_id);

在from子句中使用子查询,把一个子查询当做一个临时表使用。(not)in是放在内存中的,如果查询的数据太大,内存中放不下,此时就需要使用(not)exists。exists本质上就是让数据库执行多个查询操作,并把结果放在磁盘中,因此对于exists来说,执行效率大大低于in,而且可读性也不是很好,这种比较适合处理一些特殊的场景。

6.合并查询

合并查询本质上就是把两个查询结果集合并成一个,但是要求这两个结果集的列一样,才能合并。即:

为了合并多个select的执行结果,可以使用集合操作符 union,union all。使用union和union all时,前后查询的结果集中,字段需要一致。

1.union关键字

用于取得两个结果集的并集。当使用该操作符时,会自动去掉结果集中的重复行。

示例:

select * from course where id<3 union select * from course where name='英文';

或者使用or来实现

select * from course where id<3 or name='英文’;

2.union all关键字

用于取得两个结果集的并集。当使用该操作符时,不会去掉结果集中的重复行。

示例:

可以看到结果集中出现重复数据

select * from course where id<3 union all select * from course where name='英文’;

 

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

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

相关文章

北京智和信通 | 无人值守的IDC机房动环综合监控运维

随着信息技术的发展和全面应用&#xff0c;数据中心机房已成为各大企事业单位维持业务正常运营的重要组成部分&#xff0c;网络设备、系统、业务应用数量与日俱增&#xff0c;规模逐渐扩大&#xff0c;一旦机房内的设备出现故障&#xff0c;将对数据处理、传输、存储以及整个业…

极光笔记 | 以静制动:行为触发营销助力用户转化

01、营销人&#xff0c;你是否饱受困扰&#xff1f; 作为营销人的你&#xff0c;从996到007&#xff0c;每天从早忙到晚&#xff0c;但还是没办法把访客转化成客户&#xff1f; 作为营销人的你&#xff0c;想通过APP通知、短信、邮件、公众号消息等方式&#xff0c;把所有能想…

牛客题霸sql入门篇之条件查询(二)

牛客题霸sql入门篇之条件查询(二) 2 基础操作符 2.1 查找学生是北大的学生信息 2.1.1 题目内容 2.1.2 示例代码 SELECT device_id,university FROM user_profile WHERE university北京大学2.1.3 运行结果 2.1.4 考察知识点 WHERE子句中可以写查询的条件,用于筛选出符合的…

java SPI机制的使用及原理

本片文章是针对dubbo SPI机制深入分析的平滑过渡的作用。当然咱们主要是学习优秀的思想&#xff0c;SPI就是一种解耦非常优秀的思想&#xff0c;我们可以思考在我们项目开发中是否可以使用、是否可以帮助我们解决某些问题、或者能够更加提升项目的框架等 一、SPI是什么 SPI&a…

新冠病毒:KN95(GB2626类型口罩)是否有效阻挡?

点击上方“青年码农”关注回复“源码”可获取各种资料​今天刷新闻&#xff0c;看到很多官方账号发布&#xff0c;只有五种编码口罩能防疫&#xff0c;分别是医用防护口罩&#xff08;GB19083-2010&#xff09;医用外科口罩&#xff08;YY0469-2011&#xff09;一次性使用医用口…

华纳音乐集团 Game Jam 来啦!

为了给 2022 年画上一个完美的句点&#xff0c;The Sandbox 与华纳音乐集团合作&#xff0c;为你们带来本年度的最后一次 Game Jam&#xff01; 我们邀请 The Sandbox 用户以音乐为题创建游戏体验。你们可以自由地创造社交体验&#xff0c;但也可以创造具有故事情节的游戏。请给…

云原生|kubernetes|CKA模拟测试-2022(1---10题)(一)

第一题&#xff1a; Task weight: 1% You have access to multiple clusters from your main terminal through kubectl contexts. Write all those context names into /opt/course/1/contexts. Next write a command to display the current context into /opt/course/1/c…

【反外挂】内存加密与监视

前言 手游防破解防外挂技术方案&#xff08;一&#xff09;客户端篇 各种作弊方案中&#xff0c;其中一种是直接修改内存数据&#xff0c;如下。 若要修改玩家当前的金币数&#xff0c;先用工具在内存中搜索当前的金币数值&#xff0c;会搜出来很多内存地址。然后消耗一些金币…

Java集合概述

集合概述 集合是一个容器,是一个载体,可以一次容纳多个对象。前面学习的数组其实就是一个集合。 集合不能直接存储基本数据类型&#xff0c;基本数据类型都是经过自动装箱后变成包装类型存放的&#xff1b; 集合也不能直接存储Java对象&#xff0c;集合中存储的是Java对象的内…

扫码点餐小程序源码 多商户外卖点餐自助扫码预约源码

智慧餐厅扫码点餐小程序系统源码&#xff0c;二维码点餐&#xff0c;微信支付宝点餐系统源码&#xff0c;外卖点餐源码 1. 开发语言&#xff1a;JAVA 2. 数据库&#xff1a;MySQL 3. 原生小程序 4. Sass 模式 5. 带调试视频 6. 可付费调试服务 私信了解更多&#xff01;…

VCS3 debug的基础

1、基础知识 使用命令行进行debug。 使用VCS进行debug的三种方式&#xff1a;专门做debug的工具目前最好的是Verdi 1、系统函数的调用 2、通过命令行的方式 3、使用DVE(GUI) debug需要注意的因素&#xff1a; 1、仿真速度&#xff08;开关选项&#xff08;command_time\ru…

超长距离CDN类视频直播延时估算

超长距离RTMP视频直播延时估算值。 摘录内容如下&#xff1a; 简单估算一下大概的网络延时。众所周知&#xff0c;光在真空中的速度约为300,000km/s&#xff0c;而在其他介质中光速会大大降低&#xff0c;所以在普通光纤中&#xff0c;工程上一般认为传输速度是200,000km/s。…

jsp+ssm计算机毕业设计ssm新冠疫苗预约接种信息管理【附源码】

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; JSPSSM mybatis Maven等等组成&#xff0c;B/S模式 Mave…

Pytest框架测试用例规则和运行方式

目录 一、默认的测试用例规则 二、测试用例执行顺序 三、测试用例运行方式 3.1.主函数模式 3.1.1.主函数模式&#xff1a;4种运行方式 3.1.2.文件框架如下图 3.2.命令行模式 3.2.1.命令行模式&#xff1a;4种运行方式 3.2.2.第2种运行方式框架 3.3.通过读取配置文…

【JAVA】抽象类和接口

&#x1f3c6;今日学习目标&#xff1a;抽象类和接口 &#x1f603;创作者&#xff1a;颜颜yan_ ✨个人主页&#xff1a;颜颜yan_的个人主页 ⏰本期期数&#xff1a;第二期 &#x1f389;专栏系列&#xff1a;JAVA 文章目录一、抽象类抽象类的定义规则示例二、接口接口定义与语…

Volatile关键字简述

Volatile关键字前言前置知识程序、进程、线程程序进程线程并发所涉及的一些特性线程安全原子性可见性Volatile案例环境代码展示可见性测试原子性测试前言 最近在看《Java并发编程实战》&#xff0c;期望对一些并发的知识点做一些总结。最好有一定的Java基础、并发的基础。 前…

Qt 一个信号对应多个槽,多个信号对应一个槽的执行顺序

前言&#xff1a; Qt独创的信号槽机制&#xff0c;不仅可以一个信号连接一个槽&#xff0c;而且可以一对多或多对一。 这其中存在两个最基本的问题&#xff1a; 1.一个信号对应多个槽时&#xff0c;槽函数的执行顺序是怎样的&#xff1f;&#xff1f;&#xff1f; 2.多个信号对…

【操作系统三】图解网络IO(bio\nio\slect\epoll)

【操作系统三】图解网络IO实战一、计算机组成二、系统中断三、晶振&#xff08;时间中断、分时复用&#xff09;四、事件中断1、DMA2、事件中断3、网卡也会产生中断&#xff1f;五、linux系统知识1、linux下一切皆文件&#xff1f;1.1、nc启动一个服务端,端口号80801.2、linux下…

vulnhub靶机:matrix:1

目录 查看靶机的ip 开放端口扫描 解密 字典生成爆破 ssh登录 rbash逃逸 下载地址&#xff1a;Matrix: 1 ~ VulnHub Kali地址&#xff1a;192.168.174.128 靶机地址&#xff1a;192.168.174.139 这个靶机是我在刷到的一个视频&#xff0c;讲解这个靶机的博主比较有趣&a…

web网页设计期末课程大作业:水果网站设计——HTML+CSS+JavaScript水果超市(带论文)

&#x1f380; 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…