高级查询(一)

解决需求:Excel都可以轻松搞定

分组查询原理: 

语法: SELECT …<列名>

FROM <表名>

[WHERE<条件表达式> ] 

GROUP BY

参与分组的列 可以与 聚合函数作用的列 一块显示

注意 SELECT列表中只能包含:

1、被分组的列

2、其它返回一个值的表达式,如聚合函数


一、单列分组
-- 统计各年级的人数
select * from Student
select count(*) from student where GradeId=1;
select count(*) from student where GradeId=2;
select count(*) from student where GradeId=3;
select count(*) from student where GradeId=4; -- 之前的方式
-- 使用GROUP BY进行分组查询
select COUNT(StudentNo) as 人数, Gradeid 班级 from Student as 学生表 GROUP BY
Gradeid;
where 子句
sql 语句中使用 group by 这个子句实现分组,用 where 子句实现查询数据的过滤,在分组中需要过滤数据那么group by 跟在 where 子句后面。
--1 2 3 年级分别的平均成绩(带数据过滤的分组)
select * from result;
select AVG(StudentResult) 平均分,Subjectid as 年级 from Result where Subjectid
in(1,2,3)
group by Subjectid;
order by 子句
-- 123年级平均分 按平均成绩高低显示
-- 依然可以用order by 对我们的分组结果进行排序
-- (带数据过滤的分组 并排序)
select AVG(StudentResult) 平均分,Subjectid as 班级 from Result where Subjectid
in(1,2,3)
group by Subjectid order by AVG(StudentResult) desc;
having 子句
-- 筛选分组结果显示 having
-- 各班的所有学生平均成绩 良好 按低到高排列
select AVG(StudentResult) 平均分,Subjectid as 班级 from Result group by
Subjectid
having AVG(StudentResult)>=70 order by AVG(StudentResult);
书写顺序及说明:
select..... from...where( 过滤操作的数据 )
group by (分组操作)
having ( 筛选显示分组后的结果 )
....order by ( 对最后的分组结果进行排序 )
WHEREHAVING对比
WHERE 子句:用来筛选 FROM 子句中指定条件的数据行 , GROUP BY 子句:用来分组 WHERE 子句的
输出数据
HAVING 子句:用来从分组的结果中筛选数据

二、多列分组
解决需求: 对各年级学生再次进行分组,计算每组学生的总人数
--对多列进行分组 group by 后多列之间用,号就可了
--查询1 2 3班级 男 女 人数
select COUNT(StudentNo) as 人数,Sex 性别,Gradeld 班级 from Student where
Gradeld in(1,2,3)
group by Gradeld, Sex order by Gradeld

完整查询语法:
SELECT …… FROM < 表名 >
[WHERE] ……
[GROUP BY] ……
[HAVING].....
[ORDER BY]...

三、多表查询

解决需求:
--查分数 查询名字 需要多张表查询操作
select * from Student;
select * from Result;
select StudentResult 分数 from Result;
select StudentName 名字 from Student;

1、内联接
左右两张表联合查询,根据联合条件两张表都满足条件的数据被查询显示
A 、简单写法
语法
SELECT ……
FROM 1 ,表 2
WHERE …… 1.xxx= 2.xxxx( 连接条件必写 )
select a.* ,b.GradeName from Subject a,Grade b
where a.GradeId = b.GradeId;
select r.StudentResult 分数,s.* from Result r,Student s
where s.StudentNo=r.StudentNo;
B、关键字写法
语法:
SELECT ……
FROM 1
INNER JOIN 2
ON …… 连接条件
select a.* ,b.GradeName from Subject a inner join Grade b
on a.GradeId = b.GradeId;
select r.StudentResult 分数,s.* from Result r inner join Student s
on r.StudentNo=s.StudentNo;
三表联接
--三表查询 在上面的基础上请查询出相应科目的名字
select a.*,b.StudentName 名字,c.SubjectName 科目 from
Result a,Student b,Subject c
where a.StudentNo = b.StudentNo and a.SubjectId =c.SubjectId;
select r.*, s.SubjectName 科目名,c.StudentName from result as r inner join
`subject` as s inner join student c on r.SubjectId= s.SubjectId and
r.StudentNo = c.StudentNo;
2、外联接
A、左外联接
左外联接是以左表为基础的,左表的记录将会全部表示出来,而右表只会显示符合搜索条件的记录,右表记录不足的地方均为null
语法
SELECT ……
FROM 1
left JOIN 2
ON …… 连接条件
-- left join on
select * from Subject;
select * from Result;
-- 查询学号科目 成绩
select a.StudentNo 学号,a.SubjectId 科目号,a.StudentResult 成绩 ,b.SubjectName
from Result a left join Subject b
on a.SubjectId = b.SubjectId;
select a.*,b.GradeName 年级名称 from Student a left join Grade b
on a.GradeId = b.GradeId;
B、右外联接
右外联接是以右表为基础的,右表的记录将会全部表示出来,而左表只会显示符合搜索条件的记录,左表记录不足的地方均为null
语法
SELECT ……
FROM 1
right JOIN 2
ON …… 连接条件
-- 右外连接 right join on
select a.StudentNo 学号,a.StudentResult 成绩,b.StudentName 姓名
from Student b right join Result a
on a.StudentNo = b.StudentNo;
select a.* ,b.GradeName 年级名称 from Subject a right join Grade b
on a.GradeId = b.GradeId;

左表不符合条件的地方 填充 null
C 、全外联接(很遗憾 mysql 不支持,其它数据库有)
执行规则:返回左表和右表中的所有行,当某行在另一表中没有匹配行,则另一表中的列返回空值

 语法:

SELECT ……

FROM 表1

FULL OUT JOIN 表2

ON ……连接条件

select a.StudentNo 学号,a.SubjectId 科目号,a.StudentResult 成绩 ,b.SubjectName
from Result a full OUT join Subject b
on a.SubjectId = b.SubjectId
select a.* ,b.GradeName from Subject a full OUT join Grade b
on a.GradeId = b.GradeId

感谢大家的阅读,如有不对的地方,可以私信我,感谢大家!

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

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

相关文章

算法-卡尔曼滤波之卡尔曼滤波的其他三个方程

一维不带噪声的卡尔曼滤波方程有五个&#xff0c;下面分析剩余的三个方程&#xff1a; 分析第一个例子&#xff0c;其中测量值和真实值之间的误差属于测量误差&#xff08;使用准确性来描述&#xff09;&#xff0c;由于测量误差是随机的&#xff0c;我们可以使用方差来描述&am…

Nginx 代理 MySQL 实现通过域名连接数据库

文章目录 Nginx 模块介绍Stream 模块配置远程连接 MySQLDataGrip 连接 MySQL Nginx 安装这里不做介绍。域名默认已经解析到服务器公网IP。 Nginx 模块介绍 HTTP 模块&#xff1a; HTTP模块提供了处理HTTP请求的功能&#xff0c;包括反向代理、负载均衡、缓存、HTTP代理等。 例…

搜索整个文件夹的所有日志

grep request * 这里的*就是全部文件 grep -e A -e b" * grep -rine "关键字"

遇到难题 暗区突围掉宝Twitch绑定关联账号显示404

Twitch作为一个广受欢迎的直播平台&#xff0c;经常会举办各种与游戏相关的互动活动&#xff0c;如“掉宝活动”&#xff0c;其中就包括了与《暗区突围》的合作。这类活动允许观众在观看指定的Twitch直播时&#xff0c;通过将他们的Twitch账号与《暗区突围》游戏账号绑定&#…

(二刷)代码随想录第6天|242.有效的字母异位词、349.两个数组的交集

242.有效的字母异位词 242. 有效的字母异位词 - 力扣&#xff08;LeetCode&#xff09; 代码随想录 (programmercarl.com) 学透哈希表&#xff0c;数组使用有技巧&#xff01;Leetcode&#xff1a;242.有效的字母异位词_哔哩哔哩_bilibili 给定两个字符串 s 和 t &#xff…

使用Pyramid、Mako和PyJade生成 HTML

Pyramid 是一个流行的 Python Web 框架&#xff0c;而 Mako 和 PyJade 是用于模板引擎的工具&#xff0c;它们可以与 Pyramid 配合使用来生成 HTML 内容。但是在实际使用中还是有些差别的&#xff0c;尤其会遇到各种各样的问题&#xff0c;下面我将利用我所学的知识一一为大家解…

Vue3组件库开发项目实战——03封装Button组件/输出vitePress文档

Vue3组件库开发项目实战——01组件开发必备知识导学-CSDN博客 Vue3组件库开发项目实战——02项目搭建&#xff08;配置Eslint/Prettier/Sass/Tailwind CSS/VitePress/Vitest&#xff09;-CSDN博客 在前面两篇博客中&#xff0c;我分别介绍了组件库开发必学知识&#xff0c;以及…

免费pr相册模板mogrt|手机壁纸AI绘画摄影作品照片展示模板视频素材

pr相册模板mogrt&#xff0c;手机壁纸、电脑桌面壁纸、AI绘画、摄影作品、照片展示模板视频素材。 Premiere Pro 2023及以上版本。 全高清&#xff08;19201080&#xff09;分辨率/30fps。 通用表达式&#xff08;适用于所有特效语言&#xff09;。 免费下载&#xff1a;https…

自动删除 PC 端微信缓存数据,包括从所有聊天中自动下载的大量文件、视频、图片等数据内容,解放你的空间。

Clean My PC Wechat 自动删除 PC 端微信自动下载的大量文件、视频、图片等数据内容&#xff0c;解放一年几十 G 的空间占用。 该工具不会删除文字的聊天记录&#xff0c;请放心使用。请给个 Star 吧&#xff0c;非常感谢&#xff01; 现已经支持 Windows 系统中的所有微信版本…

整合Tess4J图文识别技术

仓库地址&#xff1a;https://gitee.com/z3inc/tess4j-demo.git 1. OCR图文识别介绍 OCR&#xff08;全称 Optical Character Recognition&#xff0c;直译为光学字符识别&#xff09;用于图片文字识别&#xff0c;例如 提取图片中车牌号等等。 Java中实现OCR的技术方案有&…

DGC-GNN 配置运行

算法 DGC-GNN&#xff0c;这是一种全局到局部的图神经网络&#xff0c;用于提高图像中2D关键点与场景的稀疏3D点云的匹配精度。与依赖视觉描述符的方法相比&#xff0c;这种方法具有较低的内存需求&#xff0c;更好的隐私保护&#xff0c;并减少了对昂贵3D模型维护的需求。DGC-…

基于51单片机的时钟万年历—可农历显示

基于51单片机的时钟万年历 &#xff08;仿真&#xff0b;程序&#xff0b;原理图&#xff0b;设计报告&#xff09; 功能介绍 具体功能&#xff1a; 1、可以显示年、月、日、时、分、秒、星期、农历&#xff1b; 2、按键可以设置闹钟及报警&#xff1b; 3、按键可以调整时…

[Java EE] 文件IO (二):文件内容读写-----数据流

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏:&#x1f355; Collection与数据结构 (91平均质量分)https://blog.csdn.net/2301_80050796/category_12621348.html?spm1001.2014.3001.5482 &#x1f9c0;Java …

(2024,MambaOut,Mamba 适合长序列,区分指标,不适合分类,适合检测和分割)视觉真的需要 Mamba 吗?

MambaOut: Do We Really Need Mamba for Vision? 公和众和号&#xff1a;EDPJ&#xff08;进 Q 交流群&#xff1a;922230617 或加 VX&#xff1a;CV_EDPJ 进 V 交流群&#xff09; 目录 0. 摘要 1. 简介 3. 概念讨论 3.1 Mamba 适合哪些任务&#xff1f; 3.2 视觉识别任…

echarts实现金价可视化大屏(项目实战)

前言 最近由于某种原因参加了一个比赛&#xff0c;三天时间肝出来一个可视化大屏项目&#xff08;无后端&#xff09;&#xff0c;代码已开源&#xff0c;但是还在比赛期间不知道会不会影响到 技术使用&#xff1a;html&#xff0c;css&#xff0c;js&#xff0c;echarts&#…

Jmeter+Grafana+Prometheus搭建压测监控平台

本文不介绍压测的规范与技术指标&#xff0c;本文是演示针对Jmeter如何将压测过程中的数据指标&#xff0c;通过Prometheus采集存储&#xff0c;并在Granfan平台进行仪表盘展示; 介绍 系统压测属于日常项目开发中的一个测试环节&#xff0c;使用测试工具模拟真实用户行为&…

Springboot+MybatisPlus如何实现分页和模糊查询

实现分页查询的时候我们需要创建一个config配置类 1、创建MybatisPlusConfig类 Configuration //表明这是一个配置类 ConditionalOnClass(Value{PaginationInterceptor.class} //ConditionalOnClass:当指定的类存在时&#xff0c;才会创建对应的Bean // 这里当PaginationInt…

Go-Zero定义API实战:探索API语法规范与最佳实践(五)

前言 上一篇文章带你实现了Go-Zero模板定制化&#xff0c;本文将继续分享如何使用GO-ZERO进行业务开发。 通过编写API层&#xff0c;我们能够对外进行接口的暴露&#xff0c;因此学习规范的API层编写姿势是很重要的。 通过本文的分享&#xff0c;你将能够学习到Go-Zero的API…

测试项目实战--安享理财2(Jmeter接口测试)

说明&#xff1a; 1.访问地址&#xff1a; 本项目实战使用的是传智播客的安享理财项目&#xff08;找了半天这个项目能免费用且能够满足测试实战需求&#xff09; 前台&#xff1a;http://121.43.169.97:8081/ 后台&#xff1a;http://121.43.169.97:8082/ &#xff08;点赞收藏…

前端工程化 - 快速通关 - vue

目录 npm 2.1环境 2.2命令 2.3使用流程 Vite 3.1简介 3.2实战 Vue3 4.1组件化 4.2SFC 4.3Vue工程 4.4基础使用 4.5进阶用法 4.6总结 npm npm 是 nodejs 中进行 包管理 的工具&#xff1b; 下载&#xff1a;Node.js — Run JavaScript Everywhere 2.1环境 ●安…