【MYSQL】聚合函数和单表/多表查询练习、子查询、内外连接

news2024/9/20 16:44:49

目录

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 连接条件

案例表:

查询所有人的成绩没有成绩也要显示信息: 

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

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

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

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

相关文章

WPF MVVM基础教程(五)RelativeSource属性绑定

RelativeSource属性绑定 介绍RelativeSource属性介绍RelativeSource的Mode属性有四种模式: 四种模式用法Self模式FindAncestor模式使用规则: TemplatedParent模式PreviousData模式 特殊用法绑定到其他ViewModel上的命令 介绍 RelativeSource 是一个标记…

前端HTML学习(二)

1、列表标签 列表标签概述:能够使用无序列表、有序列表、自定义列表标签,实现网页中列表结构的搭建。列表应用在网页中按照行展示关联性的内容,如:新闻列表、排行榜、账单等。 特点:按照行的方式,整齐显示内容 种类&a…

大模型遭泄两月后 Meta意外变赢家

一份被意外泄露的谷歌内部文件,将Meta的LLaMA大模型“非故意开源”事件再次推到聚光灯前。 “泄密文件”的作者据悉是谷歌内部的一位研究员,他大胆指出,开源力量正在填平OpenAI与谷歌等大模型巨头们数年来筑起的护城河,而最大的受…

Ae:摄像机命令

Ae 中提供了一些摄像机命令,可帮助更好地运用摄像机,比如实现跟焦、切换对焦对象(图层)、展现指定图层内容等等。 Ae菜单:图层/摄像机 Camera 这些命令也可在摄像机图层的右键菜单中选择。 基于 3D 视图生成摄像机 Cre…

MySQL基础-数据库介绍

本文介绍MySQL基础,包括什么是数据库,什么是关系型数据库,数据库和实例区别,数据库分类 文章目录 前言什么是数据库?什么是数据库管理系统(DBMS)?什么是关系型数据库管理系统&#x…

Springboot +Flowable,设置流程变量的方式(一)

一.简介 为什么需要流程变量。 举个例子,假设有如下一个流程,截图如下: 这是一个请假流程,那么谁请假、请几天、起始时间、请假理由等等,这些都需要说明,不然领导审批的依据是啥?那么如何传递…

HTML + CSS (包含移动Web) 笔记

前言 主要还是比较的一些html css&#xff1b;当然也有一些css样式时平时开发中经常用到的&#xff0c;但是我不晓得的&#xff0c;所以还是记录一下吧&#xff1b;给孩子点点关注吧&#xff01;&#x1f62d; 壹、HTML 一、标签 1.1 标题标签 块级元素 <h1> 好好…

go-micro框架-01-启动微服务及微服务间的调用

文章目录 1. 环境准备1.1 安装protoc1.2 安装 go-micro 2. 创建微服务项目2.1 创建第一个服务2.2 初始化2.3 同法再创建2个服务2.4 初始化项目 3. 微服务间调用4. 使用 consul4.1 启动consul4.2 修改代码 1. 环境准备 1.1 安装protoc https://github.com/protocolbuffers/pro…

webpack: 5 报错,错误

webpack-报错&#xff1a;Uncaught ReferenceError: $ is not defined (webpack) webpack打包jquery的插件&#xff08;EasyLazyLoad&#xff09;时&#xff0c;报错 方法一&#xff1a; //多个js文件用到jquery&#xff0c;用这种方法 在jquery.min.js的做最后写上下面的代码…

中交路桥科技浅谈:边坡稳定的影响因素及边坡主要监测内容

边坡稳定的影响因素 岩&#xff08;土&#xff09;性质的影响&#xff1a;包括岩石的坚硬程度、抗风化能力、抗软化能力、强度、组成、透水性等&#xff1b; 岩土结构的影响&#xff1a;表现为节理裂缝的发育程度及其分布规律、结构面的胶结情况、软弱面和破碎带的分布与边坡…

记录--ThreeJs手搓一个罗盘特效

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 先上效果 前言 最近在学Three.js.,对着文档看了一周多&#xff0c;正好赶上码上掘金的活动&#xff0c;就顺便写了一个小demo&#xff0c;手搓一个罗盘特效。 太极 先来看一下太极的实现方式&#xff…

教你一招轻松搞定大量视频滚动字幕

如果你也想批量快速的给大量视频画面添加上滚动字幕的话&#xff0c;那你一定要看这个教程&#xff0c;今天小编要给大家分享一个可以批量给大量视频添加滚动字幕的简单方法&#xff0c;有需要的小伙伴们可以一起来看看具体的操作步骤&#xff01; 首先我们来看看用这个工具添加…

c语言-指针

指针详解 ​ 这段时间在看 Linux内核&#xff0c;深觉C语言功底不扎实&#xff0c;很多代码都看不太懂&#xff0c;深入学习巩固C语言的知识很有必要。先从指针开始。 什么是指针 ​ C语言里&#xff0c;变量存放在内存中&#xff0c;而内存其实就是一组有序字节组成的数组&…

跨域时怎么处理 cookie?

前言 一个请求从发出到返回&#xff0c;需要浏览器和服务端的协调配合。浏览器要把自己的请求参数带给服务端&#xff0c;服务端校验参数之后&#xff0c;除了返回数据&#xff0c;也可能会顺便把请求是否缓存&#xff0c;cookie等信息告诉浏览器。当请求是跨域请求的时候&…

uniapp仿淘宝购物车demo

项目是基于uview2.0的ui组件&#xff0c;并且在一定程度上修改过原本组件的代码&#xff08;app-navbar是使用u-navbar在进行二次封装的组件&#xff1b;u-number-box也进行了修改&#xff09;&#xff0c;符合项目需求&#xff08;这个看个人项目需求在进行修改&#xff09; u…

【 在线音乐平台(onlinemusic) 】

文章目录 一、核心功能二、效果演示三、创建项目四、数据库设计及配置数据库4.1 数据库和表设计4.2 配置连接数据库 五、创建配置类六、具体功能实现6.1 注册模块6.2 登录模块拓展&#xff1a;登录注册加密(MD5&#xff0c;BCrypt) 6.3 退出模块6.4 上传音乐模块知识拓展1&…

RabbitMQ详解(六):RabbitMQ集群搭建

集群 官方参考文档&#xff1a;https://www.rabbitmq.com/clustering.html RabbitMQ这款消息队列中间件产品本身是基于Erlang编写&#xff0c;Erlang语言天生具备分布式特性&#xff08;通过同步Erlang集群各节点的magic cookie来实现&#xff09;。因此&#xff0c;RabbitMQ天…

什么是柔性玻璃?

柔性玻璃(Flexible glass)是一种新型薄膜玻璃基板(Thin film glass substrate)材料&#xff0c;厚度极薄可以弯曲。 柔性玻璃定义有广义和狭义之分&#xff1a; 广义柔性玻璃泛指所有制成微米尺寸具有可弯曲特性的玻璃材料&#xff0c;如玻璃纤维、光纤、玻璃棉、玻璃布等。这些…

第10课【STM32 USB通讯协议实战】HID键盘+CDC虚拟串口组合设备

目录 前言USB设备类别未定义设备设备描述符/配置描述符分析如何配置从机类型如何配置设备专用的描述符如何配置从机端点 HID设备特点设备描述符/配置描述符分析HID报文描述符短条目前缀可选数据表现形式 层次结构实例分析总结 CDC设备特点设备描述符/配置描述符分析设备类特定请…

【LED子系统】四、核心层详解(一)

个人主页&#xff1a;董哥聊技术 我是董哥&#xff0c;嵌入式领域新星创作者 创作理念&#xff1a;专注分享高质量嵌入式文章&#xff0c;让大家读有所得&#xff01; 文章目录 1、前言2、leds_init分析2.1 相关数据结构2.1.1 class 2.2 实现流程 3、leds_class_dev_pm_ops分析…