高级查询(一)

解决需求: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.hqwc.cn/news/700094.html

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

相关文章

勒索软件漏洞?在不支付赎金的情况下解密文件

概述 在上一篇文章中&#xff0c;笔者对BianLian勒索软件进行了研究剖析&#xff0c;并且尝试模拟构建了一款针对BianLian勒索软件的解密工具&#xff0c;研究分析过程中&#xff0c;笔者感觉构建勒索软件的解密工具还挺有成就感&#xff0c;因此&#xff0c;笔者准备再找一款…

gin框架学习笔记(三) ——路由请求与相关参数

参数种类与参数处理 查询参数 在讲解查询参数的定义之前&#xff0c;我们先来看一个例子&#xff0c;当我打开了CSDN&#xff0c;我现在想查看我的博客浏览量&#xff0c;那么我就需要点击我的头像来打开我的个人主页,像下面这样: 我们现在把浏览器的网址取下来&#xff0c;…

uniapp编译H5解决ios的border-radius失效问题,以及ios满屏显示不全的问题

1.解决方案 .card-itemA {width: 650rpx;height: 326rpx;box-shadow: 0rpx 0rpx 30rpx 14rpx rgba(236, 235, 236, 0.25);background: linear-gradient(180deg, #FFFFFF 0%, rgba(255, 255, 255, 0) 100%);border-radius: 60rpx;overflow: hidden;// 兼容ios的圆角问题transfor…

web入门练手案例(一)

下面是一下web入门案例和实现的代码&#xff0c;带有部分注释&#xff0c;倘若代码中有任何问题或疑问&#xff0c;欢迎留言交流~ 新闻页面 案例描述&#xff1a; 互联网的发展使信息的传递变得方便、快捷&#xff0c;浏览新闻称为用户获取信息的重要渠道。下面将实现一个简…

OrangePi Zero2 全志H616开发学习文档、基础IO蜂鸣器、超声波测距、舵机PWM基础开发

一.平台介绍 OrangePi开发板不仅仅是一款消费品&#xff0c;同时也是给任何想用技术来进行创作创新的人设计的。它是一款简单、有趣、实用的工具&#xff0c;你可以用它去打造你身边的世界。 特性 CPU 全志H616四核64位1.5GHz高性能Cortex-A53处理器GPU MaliG31MP2 Supports…

Nginx解决跨域问题

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 W3C标准&#xff1…

PostgreSQL 用户及授权管理 04:授予及回收权限

PostgreSQL 是一个坚如磐石的数据库&#xff0c;它非常注重安全性&#xff0c;提供了非常丰富的基础设施来处理权限、特权和安全策略。在前面的章节中以我们介绍的基本概念为基础&#xff0c;重新审视角色概念&#xff0c;特别关注授予角色的安全性和权限&#xff08;角色可以是…

2024年前一季度,国内医疗器械营收TOP10出炉!

随着国内医疗器械市场的不断发展&#xff0c;各大医疗器械公司的财报数据成为了投资者和行业观察者关注的焦点。近日&#xff0c;根据2024年第一季度财报数据&#xff0c;我们梳理出了中国医疗器械第一财季营收排名前十的械企&#xff0c;为大家带来深入的分析和解读。 一、营…

达梦数据库 报错 数据类型不匹配

达梦数据库 报错 数据类型不匹配 背景描述问题分析问题处理方案1&#xff1a;方案2&#xff1a;TO_CHAR(str)CAST(value AS type)CONVERT(type,value)DBMS_LOB 包TEXT_EQUAL(n1,n2) 写在最后 背景描述 本文写于初接触到达梦(DM)数据库&#xff0c;之前没有用过&#xff0c;因此…

《四》系统模块整体功能关联与实现

在上一篇里&#xff0c;我们完成了动作的创建&#xff0c;那么这一次&#xff0c;我们把它加载到界面上&#xff0c;把需要是实现的动作都加上。 MyWord::MyWord(QWidget *parent): QMainWindow(parent) {mdiAreanew QMdiArea;mdiArea->setHorizontalScrollBarPolicy(Qt::S…

Python爬虫逆向——某公开数据网站实例小记(二)

注意&#xff01;&#xff01;&#xff01;&#xff01;某XX网站逆向实例仅作为学习案例&#xff0c;禁止其他个人以及团体做谋利用途&#xff01;&#xff01;&#xff01; 第一步&#xff1a;分析页面和请求方式 aHR0cHM6Ly95Z3AuZ2R6d2Z3Lmdvdi5jbi8jLzQ0L2p5Z2c 此网站经…

ORACLE ODA一体机存储节点电源故障的分析处理

近期&#xff0c;某用户的ORACLE ODA一体机在例行机房巡检时出现亮黄灯告警&#xff1b;用户反馈次问题后我们立刻通过远程方式&#xff0c;登陆ODA的控制台进行查看&#xff1b; 对于ODA一体机&#xff08;2个计算节点1个存储节点&#xff09;&#xff0c;计算节点可以通过il…