mysql语句 聚合+分组+内外链接

1.聚合函数

1.count 记数

2.sum 求和

3.avg

*语法:select avg(列名) from 表名;

4.max

求最大值

5.min

求最小值

求一个班级数学平均分?

select avg(ifnull(math,0))from stu;

求一个班级总分平均分

select avg(ifnull(math,0))+english+chinese) from stu;

求班级英语最高分和最低分

select max(english)from stu

select min(english) from stu

补充:

isnull,ifnull以及nullif是什么,有什么区别??

1.isnull(参数1),isnull接受1个参数,如果参数是null,返回布尔值

2.fnull(参数1,参数2),ifnull接受2个参数,如果参数1是null,返回参数2的值,如3.ifnull(math,0)如果math是null,则返回值为0

nullif(参数1,参数2),nullif也接受两个参数,如果参数1和参数2相等,则返回null值(1

2.分组(重要)

1.使用group by字段进行分组的

首先创建一个orders表

create table orders(id int,product varchar(20),price float);

插入我们要用到的数据

insert into orders(id,product,price) values(1,"电视",900)
INSERT into orders(id,product,price) values(2,"洗衣机",100)
INSERT into orders(id,product,price) values(3,"电视",1000)
INSERT into orders(id,product,price) VALUES(4,"空调",800)
insert into orders(id,product,price) values(5,"电脑",2000)
insert into orders(id,product,price) values(6,"空调",1000)

练习: 

对订单表中的商品归类后,显示每一类商品的总价

select product,sum(price),count(*) from orders group by product

   select product,sum(price),count(*) from orders group by product

 查询购买了几类商品,并且每类总价大于1000的商品

select product from orders group by product having sum(price)>1000;

总结:Having和where均可实现过滤,但在having可以使用聚合函数,where不能使用聚合函数,having通常跟在group by后,它作用于分组

select...from...where...group by...having...order by....

*固定的顺序:如果没有上述的条件,把关键字去掉就ok

3.多表查询

我们直接查询一下试试

select * from emp,dept

直接查询不加条件会有重复的内容出现,原因(笛卡尔积) 

1.多表查询之内连接:
   

  1. 前提条件:两个表有联系,通过外键关联。
  2. 普通内链接
    • 语法:关键字 ... inner join ... on 条件;
    • 注意:
      • inner join关键字之前写表1
      • inner join关键字之后写表2
      • on的后面写条件:(表1dept,表2empdept.did = emp.dno
    • 语句:       select * from dept inner join emp on dept.did = emp.dno; 2.隐式内链接(用的最多的)
    • 语法:select ... from 1,2 where 1.字段 = 2.字段;
    • 语句:select * from dept,emp where dept.did = emp.dno;
    • 别名:select * from dept d,emp e where d.did = e.dno;

指定字段: select d.dname,e.ename,e.sal from dept d,emp e where d.did = e.dno

2.多表查询之外连接 

 

1.左外连接

*语法:... 1 left outer join 2 on 1.字段 = 2.字段

*语句:       select * from dept left outer join emp on dept.did = emp.dno;

​​​​​​​*特点:看左表,默认把左表中的全部数据都查询出来,再查询出有关联的数据。

2.右外链接

*语法:... 1 right outer join 2 on 1.字段 = 2.字段

* 特点:看右表,默认把右表中的全部数据都查询出来,再查询出有关联的数据。

deptemp表中插入一些数据

insert into dept values (null,'牛宝宝部');

insert into dept values (null,'扯淡部');

insert into emp values (null,'陈冠希',100,null);

insert into emp values (null,'张柏芝',200,null);

* 测试

* 内链接测试:select * from dept d,emp e where d.did = e.dno;

* 左链接测试:select * from dept left join emp on dept.did = emp.dno;

* 右链接测试:select * from dept right join emp on dept.did = emp.dno;

 语句: select * from dept right outer join emp on dept.did = emp.dno;

* 特点:看右表,默认把右表中的全部数据都查询出来,再查询出有关联的数据。

deptemp表中插入一些数据

insert into dept values (null,'牛宝宝部');

insert into dept values (null,'扯淡部');

insert into emp values (null,'陈冠希',100,null);

insert into emp values (null,'张柏芝',200,null);

* 测试

* 内链接测试:select * from dept d,emp e where d.did = e.dno;

* 左链接测试:select * from dept left join emp on dept.did = emp.dno;

* 右链接测试:select * from dept right join emp on dept.did = emp.dno;

4.多表查询的总结

如果两张表中的数据没有多余的数据,下面这些个查询的结果都是一样的。

1.普通内链接查询

* inner join .. on 条件;

2.隐式内链接查询

* select * from A,B where 条件;

3.左外链接查询

* left outer join ... on

4.右外链接查询

* right outer join ... on

* 如果两个表中有多余的数据,使用左链接,查询出的结果先把左表所有的数据全部都查询出来,再把两个表中有关联

的数据查询出。

* 如果两个表中有多余的数据,使用右链接,查询出的结果先把右表所有的数据全部都查询出来,再把两个表中有关联

的数据查询出。

1.你可能一个查询语句不能查出你想要的结果,你可以把多个查询结合到一起使用。

2.你编写的一个语句中包含多个select关键字。

3.问题:查询出英语的成绩大于英语的平均分的同学?

1.查询英语的平均分 select avg(english) from stu;

2.查询的学生的信息,条件,英语的成绩需要大于平均分。

* select * from stu where english > (select avg(english) from stu);

4.子查询的特点

* select * from where 条件 > 子查询

* select * from (子查询会先产出结果)

select * from (select english from stu);

5.where条件的后面使用运算符号

< > <= >= <>

all 所有 >all

* >all (5,6,7)

any 任意

>anyany 任意 >any

* >any (5,6,7)

dept emp

想要查询什么?

几张表

条件

查看聪聪所属的部门名称和员工名称?

* 查询什么?部门的名称 员工的名称

* 表:部门表和员工表

* 条件:聪聪所属的部门(去除笛卡尔积),只想查聪聪 name='聪聪'

select d.dname,e.ename from dept d,emp e where d.did = e.dno and e.ename = '聪聪';

统计每个部门的人数(按照部门名称统计)

* 查询:部门的名称和人数

* 表:部门和员工(人数)

* 条件:where d.did = e.dno 分组(部门分组)

select d.dname,count(*) from dept d,emp e where d.did = e.dno group by d.dname;

统计部门的平均工资(按部门名称统计)

* 查询:平均工资

* 表:部门 员工属性是工资

* 条件:where d.did = e.dno 分组(部门分组)

select d.dname,avg(e.sal) from dept d,emp e where d.did = e.dno group by d.dname;

统计部门的平均工资大于公司平均工资的部门

* 查询:部门

* 表:部门和员工

* 条件:部门的平均工资 > 公司的平均工资

select d.dname,avg(e.sal) from dept d,emp e where d.did = e.dno group by d.dname having

avg(e.sal) > (select avg(sal) from emp);

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WPF 与 C# 融合开发:从基础到高级应用(一)

WPF 与 C# 融合开发&#xff1a;从基础到高级应用 一、C# 语言基础回顾 1.1 C# 语言概述 C# 是微软开发的一种现代、面向对象的编程语言&#xff0c;它融合了 C、C 和 Java 等语言的优点&#xff0c;具有简洁、安全、高效等特点。C# 广泛应用于 Windows 平台的应用开发&…

【Linux】IP协议

目录 一、IP协议的概念 二、IP协议的报头 &#xff08;一&#xff09;IP协议报文的封装、解包和分用 &#xff08;二&#xff09;8位生存时间 &#xff08;三&#xff09;IP分片 三、IP协议的网段划分 &#xff08;一&#xff09;为什么需要网段划分 &#xff08;二&am…

如何快速下载并安装 Postman?

从下载、安装、启动 Postman 这三个方面为大家详细讲解下载安装 Postman 每一步操作&#xff0c;帮助初学者快速上手。 Postman 下载及安装教程(2025最新)

计算机网络高频(三)UDP基础

计算机网络高频(三)UDP基础 1.UDP的头部格式是什么样的?⭐ UDP 头部具有以下字段: 源端口(Source Port):16 位字段,表示发送方的端口号。目标端口(Destination Port):16 位字段,表示接收方的端口号。长度(Length):16 位字段,表示 UDP 数据报(包括头部和数据部…

2024年MathorCup数学建模B题甲骨文智能识别中原始拓片单字自动分割与识别研究解题全过程文档加程序

2024年第十四届MathorCup高校数学建模挑战赛 B题 甲骨文智能识别中原始拓片单字自动分割与识别研究 原题再现&#xff1a; 甲骨文是我国目前已知的最早成熟的文字系统&#xff0c;它是一种刻在龟甲或兽骨上的古老文字。甲骨文具有极其重要的研究价值&#xff0c;不仅对中国文…

【深度学习的数学】导数

导数的定义。好像是从极限开始的。比如说&#xff0c;函数f(x)在点xa处的导数&#xff0c;就是当h趋近于0时&#xff0c;[f(ah) - f(a)]除以h的极限&#xff0c;对吧&#xff1f;公式应该是这样的&#xff1a;f’(a) lim_{h→0} [f(ah) - f(a)] / h。这个极限如果存在的话&…

word文件转换为Markdown格式

目录 一、前言1.1、poi-ooxml、docx4j、aspose-words对比二、poi-ooxml技术实现一、前言 顺应时代技术的变更及高效协同理念的影响,非结构化信息展示、存储、应用等也由传统文档向在线协同文档的演变,类似腾讯在线文档。   目前大多数在线文档支持的是Markdown格式,因此这…

【Hugging Face 开源库】Diffusers 库 —— 扩散模型

Diffusers 的三个主要组件1. DiffusionPipeline&#xff1a;端到端推理工具__call__ 函数callback_on_step_end 管道回调函数 2. 预训练模型架构和模块UNetVAE&#xff08;Variational AutoEncoder&#xff09;图像尺寸与 UNet 和 VAE 的关系EMA&#xff08;Exponential Moving…

langserve搭建方法

文章目录 安装 langserver安装 langchain-cli创建langserve脚手架使用poetry管理包 安装 langserver pip install langserve安装 langchain-cli pip install langchain-cli创建langserve脚手架 langchain app new 项目名后续交互界面全回车&#xff0c;接着cd到 项目名 目录…

网络基础-路由器和交换机工作配置

三、路由器和交换机的工作原理配置以及华为体系下的小型网络的搭建 3.1路由基础 3.1.1数据转发 通过链路层交换机和网络层路由器进行数据转发 交换机&#xff08;链路层&#xff09;mac地址表的数据转发路由器&#xff08;网络层&#xff09; ip路由表的数据转发 隔离广播域…

mysql高级,mysql体系结构,mysql引擎,存储过程,索引,锁

1.mysql体系结构 1&#xff09; 连接层 主要完成一些类似于连接处理、授权认证、及相关的安全方案。在该层上引入了线程池的概念&#xff0c;为通过认证安全接入的客户端提供线程。同样在该层上可以实现基于SSL的安全链接。服务器也会为安全接入的每个客户端验证它所具有的操作…

Unity高清渲染管线

Unity高清渲染管线——1 unity高清渲染管线是渲染管线的一种&#xff0c;在看完《创造高清3D虚拟世界》这本书的前两章以及第三张第二小节后终于对unity的高清渲染管线也是有了一个初步的认知&#xff0c;以下是我个人理解仅作参考&#xff1a; unity高清渲染管线项目模板比起…

Python基础语法元素(学习笔记)

实例1&#xff1a;温度转换 # TempConvert.py #为单行注释 多行注释为: 这里写内容 TempStr input("请输入带有符号的温度值&#xff1a;") if TempStr[-1] in [F,f] :C (eval(TempStr[0:-1])-32)/1.8print("转换后的温度是{:.2f}C".format(C)) e…

C++20 中的std::c8rtomb和 std::mbrtoc8

文章目录 1. 引言2. std::c8rtomb 函数详解3. std::mbrtoc8 函数详解4. 使用示例5. 注意事项6. 总结 1. 引言 C20 标准引入了对 UTF-8 编码的更好支持&#xff0c;其中包括两个重要的函数&#xff1a;std::c8rtomb 和 std::mbrtoc8。这两个函数分别用于将 UTF-8 编码的字符转换…

数据可视化TensorboardX和tensorBoard安装及使用

tensorBoard 和TensorboardX 安装及使用指南 tensorBoard 和 TensorBoardX 是用于可视化机器学习实验和模型训练过程的工具。TensorBoard 是 TensorFlow 官方提供的可视化工具&#xff0c;而 TensorBoardX 是其社区驱动的替代品&#xff0c;支持 PyTorch 等其他框架。以下是它…

flutter-实现瀑布流布局及下拉刷新上拉加载更多

文章目录 1. 效果预览2. 结构分析3. 完整代码4. 总结 1. 效果预览 在 Flutter 应用开发中&#xff0c;瀑布流布局常用于展示图片、商品列表等需要以不规则但整齐排列的内容。同时&#xff0c;下拉刷新和上拉加载更多功能&#xff0c;能够极大提升用户体验&#xff0c;让用户方…

【day2】数据结构刷题 栈

一 有效的括号 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有一个对应的…

YAML是什么?

YAML&#xff08;YAML Ain’t Markup Language&#xff09;是一种以数据为中心、高度可读的序列化语言&#xff0c;广泛应用于配置文件、数据交换和自动化工具中。以下从多个维度对其进行全面解析&#xff1a; 1. 定义与历史演变 全称与定位&#xff1a; YAML的全称最初为“Yet…

熔断降级(Sentinel解决)

问题概述 在微服务架构中一定要预防微服务雪崩问题&#xff0c;微服务雪崩问题就是指在微服务架构中&#xff0c;当一个服务出现故障时&#xff0c;由于服务之间的依赖关系&#xff0c;故障可能会传播到其他服务&#xff0c;从而导致了大规模的服务失败&#xff0c;系统无法正…

反序列化漏洞

前提概要 本文章主要用于分享反序列化漏洞基础学习&#xff0c;以下是对反序列化漏洞的一些个人解析&#xff0c;请大家结合参考其他文章中的相关信息进行归纳和补充。 反序列化漏洞描述 反序列化漏洞是指程序在对输入的字节流进行反序列化时&#xff0c;因缺乏充分的验证和过…