【MYSQL】聚合函数和单表/多表查询练习、子查询、内外连接
目录
1.聚合函数
1.1.group by子句
1.2.having语句
2.单表查询
2.2单表查询
3.多表查询
3.2.子查询
5.内链接
6.外连接
1.聚合函数
| 函数 | 说明 | 
| count | 返回查询到的数据的数量 | 
| sum | 返回查询到的数据的总和 | 
| avg | 返回查询到的数据的平均值 | 
| max | 返回查询到的数据的最大值 | 
| min | 返回查询到的数据的最小值 | 
创建一个表

count:

sum:

avg:

max:

min:

1.1.group by子句

查看不同的职业的最高/最低工资、平均工资:

1.2.having语句
- 通常和group by连用
使用上面的emp表,筛选平均工资大于1000的职业:

where和having的区别:
- 在上面的指令where是优先比group by 执行的,having 是晚于group by执行的;
- having和where的使用差不多,只是有优先级的差别;

2.单表查询
2.1.三个表
员工表
部门表
薪资表

2.2单表查询
1.查询工资高于500或岗位为MANAGER的雇员,同时还要满足他们的姓名首字母为大写的J
select ename, sal, job from emp where (sal>500 or job='manager') and ename like 'J%';
2.按照部门号升序而雇员的工资降序排序
select * from emp order by deptno asc, sal desc;
3.使用年薪进行降序排序
ifnull(val1, val2) 如果val1为null,返回val2,否则返回val1的值
select ename, sal*12+ifnull(comm,0) '年薪' from emp order by 年薪 desc;
4.显示工资最高的员工的名字和工作岗位
select ename, job, sal from emp where sal=(select max(sal) from emp);
5.显示工资高于平均工资的员工信息
select ename, sal from emp where sal>(select avg(sal) from emp);
6. 显示每个部门的平均工资和最高工资
select deptno, avg(sal), max(sal) from emp group by deptno;
7.显示平均工资低于2000的部门号和它的平均工资
select deptno, avg(sal) avg_sal from emp group by deptno having 2000>avg_sal;
8.显示每种岗位的雇员总数,平均工资
select job, count(job), avg(sal) job_avgsal from emp group by job;
3.多表查询
实际开发中往往数据来自不同的表,所以需要多表联合查询。多表查询是对多张表的数据取笛卡尔积:

1.显示部门号为10的部门名,员工名和工资
select emp.deptno, dname, ename, sal from emp,dept where (dept.deptno=emp.deptno) and (emp.deptno=10);
2.显示各个员工的姓名,工资,及工资级别
select ename,sal,grade,losal,hisal from emp,salgrade where sal between losal and hisal;
3.1.自连接:自连接是指在同一张表连接查询
显示员工FORD的上级领导的编号和姓名(mgr是员工领导的编号--empno)
select worker.ename,worker.mgr,leader.empno,leader.ename from emp worker,emp leader where worker.mgr=leader.empno and worker.ename='FORD';
3.2.子查询
- 子查询是指嵌入在其他sql语句中的select语句,也叫嵌套查询
1.单行子查询:
显示SMITH同一部门的员工:
select * from emp where deptno=(select deptno from emp where ename='smith');
2.多行子查询:
in关键字;
- 查询和10号部门的工作岗位相同的雇员的名字,岗位,工资,部门号,但是不包含10自己的
select ename,job,sal,deptno from emp where job in(select distinct job from emp where deptno=10) and deptno!=10;
all关键字;
- 显示工资比部门30的所有员工的工资高的员工的姓名、工资和部门号
select ename,sal,deptno from emp where sal > all(select sal from emp where deptno=30); 
any关键字;
- 显示工资比部门30的任意员工的工资高的员工的姓名、工资和部门号(包含自己部门的员工)
select ename,sal,deptno from emp where sal > any(select sal from emp where deptno=30);
3.多列子查询
查询和SMITH的部门和岗位完全相同的所有雇员,不含SMITH本人
select ename from emp where (job,deptno) = (select job,deptno from emp where ename='smith') and ename!='smith';
4.在from子句中使用子查询
1.显示每个高于自己部门平均工资的员工的姓名、部门、工资、平均工资
select ename,deptno,sal,asal from emp, (select avg(sal) asal, deptno dn from emp group by deptno) avgsal where sal > avgsal.asal and emp.deptno=avgsal.dn;
2.查找每个部门工资最高的人的姓名、工资、部门、最高工资
select ename, sal, deptno, ms from emp, (select max(sal) ms, deptno dn from emp group by dn) maxs where deptno=dn and sal=ms;
3.显示每个部门的信息(部门名,编号,地址)和人员数量
select dname, dept.deptno, loc,count_per  from dept, (select count(*) count_per, deptno from emp group by deptno) em where dept.deptno=em.deptno;
4.合并查询--union
- union 该操作符用于取得两个结果集的并集。当使用该操作符时,会自动去掉结果集中的重复行
- union all 该操作符用于取得两个结果集的并集。当使用该操作符时,不会去掉结果集中的重复行。
将工资大于2500或职位是MANAGER的人找出来
select ename, sal, job from emp where sal>2500 union select ename, sal, job from emp where job='MANAGER';
5.内链接
语法:select 字段 from 表1 inner join 表2 on 连接条件 and 其他条件;
- 和上面使用 from 表1,表2 where 筛选条件;是一样的只是语法不同
案例:显示SMITH的名字和部门名称
语法1:
select ename, dname from emp,dept where ename='SMITH' and emp.deptno=dept.deptno;
语法2:
select ename, dname from emp inner join dept on ename='SMITH' and emp.deptno=dept.deptno;6.外连接
格式:
外左连接:
select 字段名 from 表名1 left join 表名2 on 连接条件
外右连接:
select 字段名 from 表名1 right join 表名2 on 连接条件案例表:

查询所有人的成绩没有成绩也要显示信息:
外左连接:显示以两张表左边为主

外右连接:显示以两张表右边为主

相关文章:
 
【MYSQL】聚合函数和单表/多表查询练习、子查询、内外连接
目录 1.聚合函数 1.1.group by子句 1.2.having语句 2.单表查询 2.2单表查询 3.多表查询 3.2.子查询 5.内链接 6.外连接 1.聚合函数 函数说明count返回查询到的数据的数量sum返回查询到的数据的总和avg返回查询到的数据的平均值max返回查询到的数据的最大值min返回查询…...
 
分布式数据库集成解决方案
分布式数据库集成解决方案 分析访问部署扩展.1 以界面方式创建数据库(采用DBCA) # 背景 由于公司业务的发展,要求在其它三个城市设立货仓,处理发货业务。公司本部运行着一套用Sybase数据库的MIS系统可以实现发货,该系统…...
 
如何配置静态路由?这个实例详解交换机的静态路由配置
一、什么是静态路由 静态路由是一种路由的方式,它需要通过手动配置。静态路由与动态路由不同,静态路由是固定的,不会改变。一般来说,静态路由是由网络管理员逐项加入路由表,简单来说,就是需要手动添加的。…...
OpenCV教程——图像操作。读写像素值,与/或/非/异或操作,ROI
1.读取像素值 我们可以通过mat.ptr<uchar>()获取图像某一行像素数组的指针。因此如果想要读取点(x50,y0)(⚠️即(row0,col50))的像素值,可以这样做:mat.ptr<uchar>(0)[50]。 在本节将介绍另外几种直接读…...
 
Winforms不可见组件开发
Winforms不可见组件开发 首先介绍基本知识,有很多的朋友搞不清楚Component与Control之间的区别,比较简单形象的区别有下面两点: 1、Component在运行时不能呈现UI,而Control可以在运行时呈现UI。 2、Component是贴在容器Container上的,而Control则是贴…...
 
静态链接库与动态链接库
静态链接库与动态链接库 一、从源程序到可执行文件二、编译、链接和装入三、静态链接库与动态链接库四、静态链接库与动态链接库的制作与使用1.静态库的制作及使用2.动态库的制作及使用 一、从源程序到可执行文件 由于计算机无法直接理解和执行高级语言(C、C、Java…...
ffmpeg 抓取一帧数据
FFmpeg功能比较强大,这里记录一条从摄像机抓拍的一条命令: ffmpeg.exe -i rtsp://admin:hisense2021192.168.1.64:554/live0.264 -r 1 -ss 00:00:00 -t 00:00:01 -f image2 image.jpg ; ---执行成功。 这是一条网络摄像机的抓图命令,其实就…...
 
学好数据结构的秘诀
学好数据结构的秘诀 作为计算机专业的一名“老兵”,笔者从事数据结构和算法的研究已经近20余年了,在学习的过程中,也会遇到一些问题,但在解决问题时,积累了一些经验,为了让读者在学习数据结构的过程中少走…...
 
IT知识百科:什么是下一代防火墙和IPS?
引言 随着网络攻击的日益增多,防火墙和入侵防御系统(Intrusion Prevention System, IPS)已成为企业网络安全的必备设备。然而,传统的防火墙和IPS已经无法满足复杂多变的网络安全威胁,因此,下一代防火墙和I…...
常量指针和指针常量, top-level const和low-level const
区分常量指针和指针常量,并且认识什么是top-level const和low-level const。 1.判别: 拿到一个指针(例如const int* a),就从左往右读,只看const和*。const读作常量,*读作指针,int类型这些不用管。 2.指针常量 int a…...
 
【iOS】-- GET和POST(NSURLSession)
文章目录 NSURLSessionGET和POST区别 GET方法GET请求步骤 POSTPOST请求步骤 NSURLSessionDataDelegate代理方法AFNetWorking添加头文件GETPOST第一种第二种 NSURLSession 使用NSURLSession,一般有两步操作:通过NSURLSession的实例创建task;执…...
 
@RequestBody,@RequestParam,@RequestPart应用场景和区别
ReqeustBody 使用此注解接收参数时,适用于请求体格式为 application/json,只能用对象接收 RequestParam 支持application/json,也同样支持multipart/form-data请求 RequestPart RequestPart这个注解用在multipart/form-data表单提交请求的方法…...
 
libevent高并发网络编程 - 02_libevent缓冲IO之bufferevent
文章目录 1. 为什么需要缓冲区?2. 水位3. bufferevent常用API3.1 evconnlistener_new_bind()3.2 evconnlistener_free()3.3 bufferevent_socket_new()3.4 bufferevent_enable()3.5 bufferevent_set_timeouts()3.6 bufferevent_setcb()3.7 bufferevent_setwatermark(…...
 
院内导航移动导诊服务体系,院内导航怎么实现?
院内导航怎么实现?经过多年发展,医院规模愈加庞大,尤其是综合性医院,院区面积较大,门诊、医技、住院等大楼及楼区内部设计复杂,科室、诊室数量众多,对于新患者犹如进入了迷宫,客观环…...
MCTP协议和NCSI
MCTP(Management Component Transport Protocol)是一种管理组件传输协议,用于在计算机系统中管理各种组件,例如固件、BIOS、操作系统等。MCTP 协议定义了一种传输格式,以便在各种总线上进行通信,例如 PCIe、…...
 
Jmeter接口测试流程详解
1、jmeter简介 Jmeter是由Apache公司开发的java开源项目,所以想要使用它必须基于java环境才可以; Jmeter采用多线程,允许通过多个线程并发取样或通过独立的线程对不同的功能同时取样。 2、jmeter安装 首先需要安装jdk(最好是最…...
 
怎样使用Web自动化测试减少手动劳动?以百度网站为例
从入门到精通!企业级接口自动化测试实战,详细教学!(自学必备视频) 目录 摘要 步骤1:安装和配置Selenium 步骤2:启动浏览器并访问百度网站 步骤3:关闭浏览器 总结 摘要 本指南将…...
 
union和位域的混合使用
1、union(共用体) 1.1、概述 C 语言中,union是一种数据类型,对比于结构体,结构体中的每个成员都占用独立的内存空间,而联合中所有的成员都共享同一个内存空间。 也就是说,union中的不同成员要…...
 
PMP 高项 07-项目质量管理
项目质量管理 概念 质量的基本概念 克劳斯比:符合要求 戴明:低成本条件下可预测的一致性和可靠度,适应市场需要 朱兰:适用性,满足客户需要 国际标准化组织:质量是反映实体(产品、过程或活动等…...
 
鸿蒙Hi3861学习十一-Huawei LiteOS-M(内存池)
一、简介 LiteOS将内核与内存管理分开实现,操作系统内核仅规定了必要的内存管理函数原型,而不关心这些内存管理函数是如何实现的。 LiteOS内存管理模块管理系统的内存资源,包括:初始化、分配、释放。 不采用C标准库中的内存管理函…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
 
对WWDC 2025 Keynote 内容的预测
借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...
 
NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...
 
招商蛇口 | 执笔CID,启幕低密生活新境
作为中国城市生长的力量,招商蛇口以“美好生活承载者”为使命,深耕全球111座城市,以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子,招商蛇口始终与城市发展同频共振,以建筑诠释对土地与生活的…...
Vite中定义@软链接
在webpack中可以直接通过符号表示src路径,但是vite中默认不可以。 如何实现: vite中提供了resolve.alias:通过别名在指向一个具体的路径 在vite.config.js中 import { join } from pathexport default defineConfig({plugins: [vue()],//…...
从面试角度回答Android中ContentProvider启动原理
Android中ContentProvider原理的面试角度解析,分为已启动和未启动两种场景: 一、ContentProvider已启动的情况 1. 核心流程 触发条件:当其他组件(如Activity、Service)通过ContentR…...
 
uniapp 小程序 学习(一)
利用Hbuilder 创建项目 运行到内置浏览器看效果 下载微信小程序 安装到Hbuilder 下载地址 :开发者工具默认安装 设置服务端口号 在Hbuilder中设置微信小程序 配置 找到运行设置,将微信开发者工具放入到Hbuilder中, 打开后出现 如下 bug 解…...
API网关Kong的鉴权与限流:高并发场景下的核心实践
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 引言 在微服务架构中,API网关承担着流量调度、安全防护和协议转换的核心职责。作为云原生时代的代表性网关,Kong凭借其插件化架构…...
 
Mysql故障排插与环境优化
前置知识点 最上层是一些客户端和连接服务,包含本 sock 通信和大多数jiyukehuduan/服务端工具实现的TCP/IP通信。主要完成一些简介处理、授权认证、及相关的安全方案等。在该层上引入了线程池的概念,为通过安全认证接入的客户端提供线程。同样在该层上可…...
Qt Quick Controls模块功能及架构
Qt Quick Controls是Qt Quick的一个附加模块,提供了一套用于构建完整用户界面的UI控件。在Qt 6.0中,这个模块经历了重大重构和改进。 一、主要功能和特点 1. 架构重构 完全重写了底层架构,与Qt Quick更紧密集成 移除了对Qt Widgets的依赖&…...


