00:00
还是添加筛选条件,那就是添加相对来说比较复杂的筛选条件。好,那么我们做几个案例感受一下。案例一。假如说呢,我现在想去查询一下我们每个或者说哪个部门吧,哪个部门的员工个数大于二,这个应该怎么去查。想一想。好,那你像这个我们就可以呢,分步讨论,如果一下子看不出来。那我应该先去查询是不是每个部门的员工个数呀,对吧,我应该先去查询每个部门的员工个数。接下来呢,我再去查询,哎,第二步哈,哎,我们根据第一个的结果,那叫做根据一的结果进行是不是筛选呀,进行筛选啊,然后这个查询啊。
01:05
查询我们哪个部门的是不是员工个数大于二,大于二好,我们试一下,首先呢,我们查询每个部门的员工个数,那就是select个数,是不是count星号啊,这个就闭着眼睛也能够写上了哈,只要涉及到个数,我们就用count型号就行了,每个部门那应该是按谁分组,对了,每个部门嘛,那就涉及到部门的东西,部门编号。然后再去from我们的员工表,Group by我们的谁呀?Department ID行,那么这个时候呢,我们先看一下结果哈。哎,出来了。哎,那么这个是对应的部门号,当然有一个部门是为no的啊,然后这个对应的就是个数,那其实根据这个结果,我们其实就可以去知道说那到底哪个部门的原工个数大于二了吧,啊,你比如说像这个的,比如说像这个这个的对不对,还有像它的啊这些。
02:10
那么根据这个结果,其实我是能够知道二的,但是假如说我们没有这个结果。那么我们光是根据我员工表里边的原始数据。这个时候你能知道我们哪个部门员工各数大于二吗?能看出来吗?是不是看不出来呀,所以说像这种题的话呢,它根据原始表示筛选不出来的,你必须是根据我们一个是不是新的结果集呀,我们才能筛选出来,或者说根据我们分组分组查询之后的一个结果集才能筛选出来。那么这个时候的话呢,我们再去添加筛选,就不能像刚才那样去添加了。你像刚才那样,我们是,哎,我的员工表里边就能找到筛选的条件,能找到筛选的字段,但是现在不行,我们要,我们要的这个筛选条件应该是,哎,能看出来,那就是在这个结果集上,我们用看的星号是不是大于二啊。
03:08
而看的信号大于二,假如说我还像以前那样去写,那就是where,它对不对,对吧?那我如果这样写,大家看是不是报错了呀。说什么哎,这个错误要看一下哈,说无效的使用啊,就是对分组函数无效的使用啊,也就是不允许这样用,因为这个时候啊,它是指在针对于我的员工表进行筛选,而你的员工表里边是没有count信号这个字段的啊。所以说是出错了,那应该怎么放呢?啊,那这个时候呢,你是根据分组后再筛选。是执行完葛如和把子句之后的结果,我再筛选,应该在它的后面,我们再去追加,哎,我们的这个条件,但是你这个条件用什么来连接呢?你要是用外能行吗?啊,这个就不能用where了哈,In where的话,它是放在我们group bag前面,要要连着我们的,是不是from表的呀啊。
04:07
那这个地方它用了一个新的关键词叫做谁呀,还行了,那这样的话才能去实现我们分组后的筛选,是不是正好就是我们想要的一个结果呀。对吧,那这个就出来了哈。好,这个呢,其实就是实现了我们什么呢?就叫做分组后的筛选,添加分组后的筛选哈。跟刚才不一样,刚才的话我们可以认为叫做添加分组前的这样的一个筛选。行了,那么我们把这个。来,我们再做几个案例呢,进行一下巩固,呃,这个是案例二,那么假如说呢,我想去查询每个工种有奖金的员工的最高工资。而且呢,最高工资是大于一万二啊,那这写错了哈。
05:02
查询每个工种有奖金的员工。的最高工资大于一万二的工种编号和其最高工资。和最高工资吧,啊行了,我们看一下这个应该怎么去做啊,我们进行一个分析,首先我们第一步应该要查谁。哎,你像要是做这种题啊,它涉及到的子句比较多,我们一眼看不出来,那这个时候的话,我们可以分步来去做啊,那么我们先去查询的应该是每个工种有奖金的。员工的是不是最高工资啊,然后再去进行一个筛选,那那这的话应该是说我们去查询每个工种有奖金的员工的是不是最高工资,好那么我们做一下啊,那这个应该是select的最高工资max是不是salary啊。
06:08
啊,然后再去逗号,嗯,我们应该是按工种进行分组,那所以工种我可以在这个地方是不是给查询出来呀,然后再去from我们的员工表。然后呢,你再去加上一个group by啊group by后面呢,再去加我们的分组的字段job ID没毛病吧,那这样去写哈,那当然这儿的话还有一个筛选条件,嗯,你刚开始做的时候,如果说啊,一下子看不准这个筛选条件是放在group by前还是后面。那么建议大家呢,先把我这个呢,就是非常模板模板性质的哈,就是比较死的这些代码呢,先写上,写上之后再去加筛选。那你看这个筛选条件是有奖金的,其实也就是说奖金率commission pack is是不是not now呀,那这个筛选条件涉及到的字段的话是叫commission part,他在我们的员工表里边是不是就有啊,所以说我们是不是根据它来筛选就行了。
07:13
如果说根据我的原始表就可以筛选,那么我就可以放在from子句后面啊,使用where条件,使用where关键字去连接,是不是加上筛选呀,哎,这个就是一个分组前的筛选哈,那这个可以做出来,我们去执行。哎,我们发现呢,这个就是满足条件的呢,或者分完组之后呢,啊,是这样的一个效果,那么接下来我们再继续第二步。第二步,那么根据我们一的结果啊,继续筛选,筛选什么呢?就是我们的最高工资是否大于是不是一万二啊,那其实我们能看出来,我们是看这看出来的,还是看这看出来的,是不看这个结果几呀。那这个的话很显然是用must salary这个字段,我们再让它去判断是否大于UR,所以这个筛选它肯定是分组后的筛选吧,那也就是在刚才的这个基础之上,我们再去加谁,对了,是不是再去加having having,我们的max salary max salary大于是不是一万二啊,哎,这样的话就能做出来了哈,我们再去执行,你看是不是正好是我们想要的。
08:28
这是关于一个筛选,所以说在做这种题的时候呢,建议大家先把就是分组,也就是葛如何班后面放谁查谁原始表给找出来,那么也就是涉及到的有啊拉句,From子句和group bus句,因为这个的话就是基本上是死的。写完之后呢,你再去追加筛选条件,看是分组前还是分组后,放在合适的位置就可以了,来我们再去试一个案例啊,看一下大家掌握的怎么样。案例三,比方说我要查询一下领导编号大于102的每个。
09:08
呃,领导吧,每个领导手下的最低工资还得大于5000的啊,这个领导编号是哪个啊,以及啊,其最低工资啊,当然这个最低工资你查不查都行啊,我就查出来看一眼啊。好,给大家几秒钟思考,看一下这个应该怎么去查。我们呢,怎么样先去查询,应该先查询谁查询一下领导编号大于102的,每个领导手下的是不是最低工资啊,我们应该先查他哈,每个领导手下的员工的最低工资吧,好或者说你再把它分两步,那也就是先把这个筛选是不是给剔除掉了。啊,那我要是先剔除掉的话,那就是这样查询一下我们。
10:03
每个领导手下员工的是不是最低工资?那怎么去写?Select的最低工资是me salary,对吧?每个领导那就是manager ID from我的employees group by领导的话是manager ID,对吧?然后呢,我们再去加筛选条件,我这样去写哈,第二步添加筛选条件,筛选条件的话呢,就是刚才说到的编号大于102。啊,那我们把这个给粘过来,那编号的话,领导的编号的话在哪,是不是manager ID呀,这个是不是在原始表就有,所以它应该放哪里?对了,是不是应该放在from子句后面,用where连接我们的employee,呃,错了,应该是manager ID manager ID大于是不是102号呀,哎,这个就出来了,我们看一下对不对啊。
11:04
没毛病,15行了,然后呢,我们再继续再看一下,最低工资大于5000的。那么你是从这个地方能看出最低工资大于5000呢?还是说在这个地方能看出来啊,很显然是在这个地方能看出,这不是最低工资嘛,名salary,然后你再去找看谁大于5000对吧?那所以说我们继续哈,那就是第三步。在这个地方呢,我们继续再去添加我们的筛选条件,那这个筛选条件呢,就是。呃,我们的最低工资大于5000,是这样吧,好,那么现在呢,我们再去试。嗯,然后在这个基础之上,那么我们在这呢,嗯,再去加having,最低工资是me salary大于5000好了,那么最终的结果出来了,我们看一下,嗯,像这些都是小于5000的,就可以过滤掉了,我们再执行出来了吧。
12:08
好了,那到现在呢,我们就把关于我们的呃,分组加筛选这个事情给大家说完了,我们可以做一个小的总结,写到这个地方。
我来说两句