当前课程知识点:数据库技术应用 > 学习情境三、银行存取款机数据操纵 > 模块5、银行存取款机分类汇总与排序 > 3.5分类汇总与排序
大家好
欢迎来到数据库技术应用在线开放课程
今天的任务是BankDB数据库分类汇总与排序
我们要完成三个子任务
第一按照cardinfo表余额大小升序排列
第二查询每个客户的银行卡个数
第三查询银行卡超过一张的客户的姓名
那么本节课的目标就是通过掌握分类汇总的方法
掌握排序的方法去实现我们前面的子任务
我们一起进入知识技能学习
首先我们来看第一个问题排序
说到排序大家并不陌生
说到排序大家肯定想到的不就两种情况嘛
要么是升序要么是降序
升序就是从小到大的排列
降序就是从大到小的排列
那我们在查询的过程当中也可以控制它的排列顺序
怎么来控制
通过一个子句来控制叫order by后面跟上列名
那你如果控制排序方式的话
可以借助ASC升序
或者是DESC降序来表示你现在的一个需求
第二个叫分组 什么叫分组
就是用于根据字段进行的分组
让他的语法格式是group by后面加上一列名
我们就可以达到分组这样一个目标
分组经常和聚合函数一起使用
比如说我想查询一下
每个学生选了几门课
每门课有多少个学生选
在这一个班级当中
每一种政治面貌有多少人
每一种民族又有多少人
每一种性别
又有多少人
这些问题实际上都用到了分组
我来举个例子
比如说我想知道男女生各有多少人
实际上换一种说法
就是每一种性别有多少人
那大家实际生活当中怎么数
是不是把男生放在一堆女生放在一堆
然后我在数个数
那所谓的男生放在一堆女生放在一堆
实际上就是按照性别进行了分组
同样的道理
比如说我想看每种政治面貌有多少人
那我就可以把团员放在一堆
党员放在一堆群众放在一堆
那么每种政治面貌就出来了
实际上按政治面貌进行了分组
那刚才我说了
我想查询一下每个学生选了多少门课
每个学生选了多少门课
那我按学生分组呗
那学生的什么分组
肯定是按学生的学号进行分组
那每门课有多少人选
我们已经找到规律了是什么
按照课号进行分组
那刚才我说的这些描述
都用到了一个字叫每
所以分组看起来有一点难度
但是我们可以找到规律
以后再碰到问题解决的时候
只要想到每个各个
我们首先想到能不能用分组来解决
如果能我们就用group by
好那分组之后可能还有需求
比如说我想查一下
男生超过三人的学生这个班级的情况
我想查一下选课门数超过五人的这个课程的情况
在分组之后又有一个附加条件
那是涉及附加条件的时候
我们就用到一个子句叫having后面跟上条件
那说到条件这个词
前面我们加where子句当中也用到了条件
他们俩有什么区别
Where子句里面所涉及到的条件是基础条件
而having这个条件的是附加条件
再简单来说
where子句是配合在select from 后面来用的
而having子句是配合在group by 后面来用的
也就是说你要用having那前面一定是有group by的
所以大家要注意having是跟group by一起使用的
好我们来看第一个子任务
按照cardinfo表余额大小升序排列
实际上他就是cardinfo表当中所有信息的一个查询
那我大家都会做select * from cardinfo
但是在这个基础上加了一个问题
叫余额大小升序排列
那么我们刚刚学过了排序的子句
叫order by余额是balance
balance后面
他说是升序排列
升序我的关键字是ASC
但是大家来看我的代码并没有ASC
那大家猜到了什么情况
是默认情况下他就是升序
所以我把ASC省略掉了
那相反如果这道问题变成是降序排列
那么order by balance后面就得加上DESC这个关键字
他是不能省的
因为默认情况下就是升序
所以如果你要解决排序的问题是比较简单的
接下来我们看第二个任务
查询每个客户的银行卡个数
拿到这个问题的时候
想想我刚才总结的经验
我说看到每个
看到各个我们首先想到的是分组
那怎么分组
一个group by就分组了
group by后面要加的是分组字段
那怎么来选择这个分组字段
我们需要看每个各个后面说的是什么
对于这个问题来说
每个后面说的是客户
那对于客户来说唯一标识是什么 是customerID
所以group by后面我就加customerID
那让查的是什么银行卡个数
而且是每个客户的银行卡个数
那我是不是需要把客户的ID显示出来
所以select后面先是customerID逗号
这里面是银行卡个数 个数
前面我们已经做了很多问题了
涉及到数数12345数数
我们想到一个聚合函数叫count
括号参数是什么
对银行卡数数参数就是cardID
from哪个表
Cardinfo表group by customerID
那这个问题也解决了
所以当题目当中真的出现每个个个的时候
其实对我们来说难度就已经降低了
但是如果说没有个个
没有每个
那我们就需要分析一下
我们接下来看第三个子任务
查询银行卡超过一张的客户姓名
这里面又加大了难度
什么难度统计完还不行
还要求你超过一张
也就是说
在分组的情况下又加了一个附加条件
那么这个问题我选择加一个having子句
所以代码变成了
select customerID count cardID,
from cardifo group by customerID
然后 having count cardID>1
那如果差超过两张
就是大于二
我把这个问题解决了
但是大家有没有发现问题
如果按照这样一个查询得到的结果是什么
查询的是每个客户的银行卡个数
但是这个客户将来在显示的时候
显示的可不是客户名字
显示的是客户的编号
那怎么办客户名字在哪
客户名字是在我们的userinfo里的
所以说如果你要实现第三个子任务
其实这样做还是不行的
我们需要再把userinfo表加进来
也就是from后面是cardinfo逗号userinfo
然后还得加一个
where条件cardinfo和我们的userinfo要做一个链接
找到公共字段做连接啊
然后select后面
你才可以加你的username
也就是我们的客户姓名
叫什么customer那么还是username
那么大家下去可以核实一下
那么需要用到了我们的多表连接查询
所以要完成第三个子任务
真的要实现客户姓名的查询
那么大家需要我们用到连接查询
大家下去可以在我们的环境当中进行一个测试
好今天的拓展任务是员工管理数据库表的分类汇总练习
感谢大家的聆听
-模块1、数据库的基础知识
--数据库的基础知识
-模块2、MYSQL介绍与安装
--MYSQL介绍与安装
-模块3、银行存取款机数据库的创建与维护
--银行存取款机数据库的创建与维护
-模块4、银行存取款机数据库的设计
--银行存取款机数据库的设计
-模块1、表的创建
--2.1表的创建
--表的创建
-模块2、表的管理
--2.2表的管理
--表的管理
-模块3、索引
--2.3索引
--索引
-实践小课堂:宠物电商管理平台数据库和表的创建
-模块1、银行存取款机数据插入、修改和删除
--银行存取款机数据插入、修改和删除
-模块2、银行存取款机简单查询
--银行存取款机简单查询和统计查询
-模块3、银行存取款机连接查询
--3.3连接查询
--银行存取款机连接查询
-模块4、银行存取款机子查询
--3.4子查询
--银行存取款机子查询
-模块5、银行存取款机分类汇总与排序
--银行存取款机分类汇总与排序
-模块6、银行存取款机视图
--银行存取款机视图
-模块1、银行存取款机存储过程
--4.1.2事务
--银行存取款机存储过程
-模块2、银行存取款机触发器
--银行存取款机触发器
-模块1、MYSQL用户管理
--MYSQL用户管理
-模块2、MYSQL权限管理
--MYSQL权限管理
-模块3、MYSQL数据库的锁机制
--MYSQL数据库的锁机制
-模块4、MYSQL备份和恢复
--MYSQL备份和恢复