00:00
来,我们把刚才这个子查询里边的主大问题做一下。先看前五个吧。好,第一个这里边有的题目稍微难一点,有的还行啊,有的不难,第一个查询工资最低的员工的信息,这个不难吧,Select工资最低的员工的信息,你看最低工资是多少。这作为一个内查询的一个结果返回给外层,那我就是select lastname salary from employees,大家刚开始写的时候啊,你不要太着急,你看我现在写的话是直接从外层写的,就是select last name salary from这然后where,你看看这个salary等于多少,这怎么写?不就是你看看谁的这个这不是谁的,就是你看一下最低工资是多少,然后看看谁的工资等于这个最低工资吧,就是我们那会儿写过类似的了,所以我们现在写起来要快一点了,希拉的。
01:22
最低工资外啊,不用外了,就这个返回的就是公司当中的员工中的最低工资,然后看看谁的工资等于这个最低的这个人的一个信息。对吧,我们看下这个结果。就是这个人,我们那会儿已经做了他了。看这个题。查询平均工资最低的部门信息。平均工资最低的工人信息,你如果做一道题,我们说了两种方式,一种呢从内到外,一种从外到内,根据这个题目具体情况来选择一个合适的。
02:06
我们假设从内到外的话,平均工资最低的部门信息,最终是让求部门信息,这肯定是外层啊,我是不是得要想得到部门信息,你这个条件是什么呀?就是平均工资最低,那第一步我是不是应该先。求出来,或者叫查询公司的平均工资是多少工资平均工资是多少,这个是不是应该按照你结合外边是不是按照部门来啊,查询公司中。各部门的。平均工资是多少,这一步查到以后,下一步呢,我是不是从这个各部门的平均工资里边有好多嘛,我们看看谁的那个是最少的。找到各部门平均工资中最少的那个。
03:05
也就是最少的平均工资是多少?然后你再看看是不是哪个部门的平均工资是这个最少的呀,那就是我们第三步要查的谁的我叫哪个部门的平均工资。等于哎,上一步这个第二步的结果,我这里简写了。大家想一想,是这个意思吧,我先查询公司的平均工资是多少,然后找里边最少的,看看谁的平均工资等于这个最少的,不就是让求这个部门信息吗?是吧,好了,来,我们先做第一步。第一步不难,查询一下各部门的平均工资,按照部门来查查平均工资。
04:05
按照他查找到平均工资,然后找平均工资里边最少的吧,CTRLX,我直接一步往下放CTRLV。找这里边最少的,那我只需要这是不是加一个min呢。现在求出的就是各个部门中的最少的,那平均工资是多少?3475,然后呢。我看看哪个部门的平均工资跟你这个是一样的,哪个部门的平均工资跟这个是一样的,那你是不是就找要找这个部门啊。找这个部门,找这个部门,那你就相当于是我select一下哪个部门的平均工资。我假设我需要找到那个ID吧,From employees,然后where,看看哪个部门的avg salary,等于就是刚才算出来的这个呀。
05:09
哪部门等于他那相当于哪个部门对应该是department啊。Depend from,这里a salary,这是不是又有一个group by,你有一个分组嘛,按照部门来分,你看看谁的平均工资等于刚才我们计算出来的这个吧。所以把它整出X拿过来。你看这个题目我们就做完了,你看看我先求出来,它让求。平均工资最低的部门信息。平均工资最低的部门信息,我先找到最低的平均工资是多少?
06:02
这是最低的平均工资吧,我看谁哪个部门的平均工资是不是等于你这个最低的平均工资,然后这个结果。那这里有个错啊说。此处不允许使用分组函数。我们这是不是这错了。我应该改成having,我们说了,只要是你在过滤条件当中,如果出现了avg的话。就是出现了主函数的话,要给它改成heavy来表示过滤。这时候我们再运行这就对了,50号部门对吧,然后他想让你查询一下这个部门的信息,比如说你的部门的,嗯,位置在哪啊,或者说你的这个部门的名字叫什么呀,这是不是就相当于使用了另一个表啊。哪个部门的,那这个相当于我们还得再做一步,对吧,第四步叫,诶这个这个此部门的,这个叫查询是部门的。
07:08
部门信息,好,这是我们第四步要查询的部门信息的话,那你就得是select,我们就这样写吧,Select星from departments where department ID是不是等于我们刚才查询到的52部门了,所以你还得把它整个给到这吧,人说X给扔进来。格式。这样吧,我们看一下这个信息,这52部门名字叫他,哎,Many ID location ID,这是我们这个题目最终得到了解决。
08:05
相当于我们通过四步查询。对吧,分了四步,就是这个题目,如果说它太复杂的话,我们可以考虑从内到外。一点点给他算出来,合在一起。你看第三问啊,第三第43题,他说查询平均工资最低的部门信息和该部门的平均工资跟这个题目有点像。但是呢,还有点不同,这个是不是除了让你查部门信息,还让你找一下这个部门的平均工资吧。那这个平均工资应该怎么求,至少这个题目啊,跟这个是有点儿像的,所以说也得有这样几步,我这个就在。这个题目的基础之上,我们来改一改。现在呢,我这个查询的效果仅仅是把这个部门给列出来了。他除了让你找这个部门信息,还让你找这个部门的平均工资要求你这是不是输出这个星还得来一个AG这个这个这个这个东西是吧,输出这个部门的平均工资。
09:08
这个部门的平均工资,我们这儿应该怎么去操作呀。我现在是不是已经知道这个部门,是啊,这从最后结果来看是50号部门,相当于这是不是找50号部门的平均工资。这个要是假设就让大家输出52部门的平均工资的话,大家能不能操作?这个题目稍微有点难度的,这里我直接在这写了,我们这里再加入一个S拉,S拉的什么呀,AVG。就是平均工资啊,From,当然还是employee这个表。这个表呢,你得有个条件吧,什么条件啊,就是要求你查询的这个部门,相当于是department ID得是50是吧,这个语句整个表示的意思是不是就是52部门的。
10:05
平均工资吧,他查询的是50号部门的平均工资,然后呢,这是这个部门信息,但是这个时候这个50号部门是不是还不知道呢,最后我查询一下才知道是50,所以呢,我们不能这样写,我这呢写一个D。这写个DCTRLC,这是不是相当于是哎,D点我用盘来替代一下。哎,你要查询的这个ID跟我这个外层的这个D它是一样的。有个连接,然后这个星呢,实际上是不是就是地点星啊。来,我们看一下。这个题目我们就这样操作成这儿是有一些难度的啊,大家需要注意了,因为这里边相当于是后边这个信息是用的是employees表,前面这个信息呢,用的是departments这个表。那你要想他们两个能够在一个结果当中,这个这个给它出现了,我们可以考虑使用两个啊,它这个相当于也是一个子查询,我们这样来理解好吧。
11:11
行,这个是43题,我们看后边的44题。查询平均工资最高的job的信息。平均工资最高的照的信息,那第一步捋一下,是不是应该先查询一下平均工资里边最高的是多少吧,就是啊,照我来分类或者叫分组。查询最高的平均工资是多少?这是第一步,那第二步。第二步,我们得看一下哪个job ID的平均工资等于这个最高的吧,就是查询。
12:07
得到哪个照顾?ID的平均工资等于上问等于一得到的。是。哪个照白D平均公司等于一,得到这个最高的,这是不是这个兆白D找到了,Job白D找到了,那就好办了,我再根据另一个表就是jobs表是吧?从jobs表中返回这个job白ID,它的对应的。哎,对应项的这个信息,大家是不是你可以试着来写写这个问题了,那我们先看第一步按照不来分组。
13:05
这个查询到最高的平均工资select,先找到平均工资得分组吧,有时办知道不ID按它来分组,我们找到各个照ID的平均,从里边来找这个最大的。就是它这是最大的平均工资,然后呢,你看看哪个照白地的平均工资等于这个最大的,那就是select,我要找到你这个ID。嗯,然后呢,BY照白底。那么这个条件还得写在这儿,Where,我想看一下这个avg salary,看看谁等于,是不是刚才我们得到的这个叫所谓的最大值啊?
14:11
那就是相当于把这个结果。作为一个。值返回给我们这个外层的过滤条件,这。那么谁的平均工资等于这个最大的,现在找到这个job ID了,Job ID找到了,然后。我看看是它的具体信息,Select星from jobs where job ID等于等于是不是得到的这个呀。等一个这个。这个里边大家你可能需要有一点需要注意的是啥呀,就是你看我们这里边儿这没问题,肯定是一个值,所以呢叫单行的,那么有可能是不是这个job ID平均工资等于这个的。
15:08
有可能是有多个,就恰好有两个是一样的,那你这个在用等号的时候有可能出问题是吧。我们先给它拿过来先演示一下,看一下啊说X。尽量呢,给他把格式稍微对齐一下,我们看一下这个结果。大家看到这个问题了吧?他说此处不允许使用主函数。啊是这错了,这个是哈,先给它改成开,因为这是一个组函数嘛。对吧。再看照过,又有一个错,是语法的错误。这个结果出来了,那就是因为那就是恰好这个里边返回的是不是就就一个部门,那个最大的就是他自己是吧,假设要有多个的话,那这大家是不是应该给它改成in呢。
16:12
改成in还是它就是in肯定是没错的,对吧,就是你等号有的时候是会出问题的。这是我们讲的这个题目。行这个题目,通过这几个题目,大家你越来越应该熟悉怎么去写这个词查询,尤其你这个题目比较复杂的时候,那你建议大家你从内到外来写。来,我们看这个题。查询平均工资高于公司平均工资的部门有哪些?我就得到部门ID就行,平均工资高于公司平均工资,哎,我们就直接来写吧,他不是要想查查一下这个他的ID吧,我顺便给你列一下你的平均工资是多少,From po,然后因为有一个。
17:04
C组函数,所以必须要写在轴Y当中。然后需要注意你是不是要看一下你各个部门的这个average salary。比公司的平均工资高的是吧,那就是大于是不是公司的平均工资吧,那就是拉的不用Y了,这是不是就搞定了。平均工资高于公司的平均工资的,高于公司的平均工资的。有哪些部门?就这样呗。有这样几个部门啊。行,这是我们的前五个题目,我们再看看后四个。
18:00
这块题目啊。比较绕,大家呢,你做的时候。亲自去写一写,先看这个。查询出公司中所有manager的详细信息。所有manager的详细信息,那你就是把manager,你看那manager ID是多少,然后manager ID又是个employd,把对应的这个信息给他输出出来,对吧。嗯,是不是就这样。嗯,希拉克的强信,那我就希拉克的星吧,不好意思,Where。嗯。所有manager的详细信息,那就是employed,恰好等于我这里边要查询到了。他们就得得返回慢点地吧,那你这样写的话,这就得写。
19:05
硬了是吧。因为你不止一个employ吧,Direct manager I from么意思,这查询到是所有是老板,不能叫老板,所以是管理者的。ID都是哪些,然后你看看他们这些人本身不是也是个employee吗?你看这个employed等于这个的。就是那些manager把他们的信息都给输出出来。我们用的是in啊。有这样18个人,你看你这要改,改成是一个等号的话,肯定是不是不合适的,因为这是一个多行的,多行呢是没法返回给你这一行的,这就出错了。好了,这个题我们就说完了下一个。咚咚。
20:03
各个部门中最高工资中最低的那个部门的最低工资是多少?这个题目看完以后简直就想死是吧?来,我们一点点来捋一下这个题哈,他说各个部门当中最高工资中。就是各个部门肯定都有一个最高工资嘛。从最高工资里边找最低的那个部门,你看谁的工资,各个部门里边谁的最高工资等于刚才对比出来最低的,然后看看那个部门里边的最低工资。有些同学可能还是绕,你看我举个例子啊,他这个是这个意思,我们这各个部门,我们就以这个。行,我们就以这个部门来说。假设我这有四个公分。ABCD4个部门,然后这四个部门是不是都有一个。
21:02
公司里边员工这个各个部门工资里的,公司各个部门的员工有最低的工资,也有最高的工资,还有其他的乱七八糟是吧,然后你把最高的工资都拿出来。咱四个部门都把自己部门里边的最高工资晾一晾,然后这个部门发现6500。这个7500。嗯。这是8500。这个呢,就写一半吧。这几个数分别是这各个部门里边的最高工资,然后这几个最高工资里边最低的,最低的是不是就六千五啊好,我找你六千五这个部门里边的。最低工资就是你这个部门里边的最高是6500,我找你这个部门里边你的最低的,最低的是不是可能就2000呀。我就想把你这个2000给找到。这个题目现在大家看懂了吗?
22:01
题目看懂以后,我们再想一想怎么来实现这个题目。我得先找到,是不是各个部门的最高工资啊?最高工资里边看哪个最低吧,是吧,所以希拉的最高max pro膜。Employees得加上一个组合BY,按照department ID来进行一个分组,分组以后我看看最高工资是多少,这肯定是不是多个呀。是多个,然后呢,我看看这里边儿中最小的那个。最小的这个4400,现在四千四找到了,然后我得看看是不是谁的这个最高工资等于这个四千四了。谁的最高工资等于这个四千四来,我想查询一下这个是不是部门啊,Department ID from。
23:09
意思,Where。Where什么?Where不能where having吗?Having,你的最高工资等于我们刚才得到的这个值。然后呢,因为你这用的叫勾,嗯,这个这个这个用到分组了,所以我们还得给你勾一下。中入外,它通过R分组,然后呢这个信息拿过来,所以把它乘出X剪切放在这。现在我是不是就找到这个ID了。我就看谁哪个部门这个是是这么做。那你可以也你要想想看的话,你可以在这先暂时给他加上一个行吧。
24:05
你看是不是这个十号部门啊,十号部门它的最高工资是4400。而且是这里边最少的这个,然后我看你十号部门的是不是最低工资啊,把它删了,十号部门的最低工资那就好说了,Select in salary from employees where department ID等于12部门呗,只不过这个时候我是通过此查询的方式得到的,那你只需要把这个CTRLX扔进来。就是最低功诶。
25:00
啊,还是四千四是吧。12部门的最高工资是4400,最低工资还是4400?我们写的没啥问题,说明一个问题,我们看一下select星from employees where这个工这个这个部门是不是就一个人啊,等于十。还真是。这些部门就一个人,所以最高工资跟最低工资都是他自己好吧。嗯。47后边的。48。查询平均工资最高的部门的manager的信息。
26:03
平均工资最高的部门,我得先找到平均工资最高的是多少,然后看哪个部门的平均工资等于这个最高的,然后这个部门的manager有哪些是这意思吧?来,我们先找到平均工资,最高的工资是多少,跟上面这个题目都类似了,这是求平均工资。按部门来,然后呢,找这里边儿最大的。这是最高的平均工资部门对吧。嗯,然后我们要看看谁的工资是不是等于这个最高的呀。
27:01
我们先看这个最高是多少,最高是这么多,谁的工资等于这个这么多的,我想查询一下这个部门ID。走by department,然后呢,Having,看看哪个部门的平均工资是不是等于。我们刚才算出来这个这个19000多啊,把它乘出X放在这。哪个部门的平均工资?是不是大于等于你得到的这个值。这个括号没问题啊。
28:01
对着哈,哪个等于这个值,然后呢,得到这个department ID。就是看看这个。Having having I。的好是吧,92部门这个部门找着了,我看这个部门的manager的信息。嗯,部门的manager信息,那这个就是。嗯,这个还是稍微复杂一点,我得先看这个部门里边这个manager ID有哪些是吧?Manager ID where department ID等于。
29:00
刚才得到的90,那你给加个括号,把这一块给它登进去呗。哎,这个越写越长,现在呢,我是得到92部门的manager ID有哪些,我们看一下。ID。两个,这两个都是100,相当于这里边儿这个有两个员工,两个员工的manage ID都是他,那你可以再加上一个叫第这的吧。这是不是就一个,我现在呢,就想看这个人他的这些信息,那就是再加一层,看看他的刚才说的人家要求的这几个信息。我直接给他粘过来了,请说C。From employees where。
30:02
叫employee ID,因为你manage ID是100,是不是这个100它也是一个员工的employd啊。所以说它这呢,我们实际上写100就行,然后呢,我们给它整合在一起,就这样呗。这个大家你一定要一层一层的写,每一层你写完以后,你最好都验证一下,运行一下,你看他这个成不成功,你别最后都写完以后再去验证,可能这个代码太多了,放在一块儿难免会出错。现在呢,我看看这个人。还真有错。他说单行子查询返回多行的值。那就说这的问题呗,那个distinct的有可能是返回多个值的,那我把这个等号改成in。
31:00
行。这个盘92部门就这个人。这是这个人的详细信息。好,我们这个题就搞定了,所以说大家你呃,我们刚才你也看到了啊,我们如果你真的是等号的话,如果真的是等号,因为除了单行子加,除了等号,还有大于小于不等于等等,如果是等号的话,你不妨都给它改成in比较保险对吧。因为把不准里边它返回的就是多行记录。这是我们的这个题,大家看最后一个。查询1999年来公司的人。所有员工来公司的人来公司的。啊,就是1999年来公司的人当中,嗯,所有员工的最高工资的,那最所有员工当中,这样有点别扭,查询1999年来公司的。
32:01
员工。的员工中,这个题目讲的这个语言表达有点别扭啊,查询1999年来公司的员工当中最高工资的那个员工的信息。就是来公司的人各个年的都有,我找到九九年来公司的那一拨人,这一拨人里边肯定有工资最高的,对吧,我找到工资最高的那个人的信息。行。这个我们怎么写啊,他想查询这个人的信息是吧,Select。我写个星吧,我们这样从外层到内层去考虑其他的星,From employees。你从内到外其实也行啊。Employees,然后呢?有一个限制条件是他首先要求,或者说你这样他的工资是不是应该等于某一个值啊。
33:05
公司等于某个值的可能有很多,同时还得有要求,这个人是不是应该是九九年来公司的呀,那就意味着叫,嗯,这个九九年来的,我们前面已经有这个经验了,我得把这个higher data转成一个号。转成以后,它是1999。是这样吧,这个题目你先这样来看的话,就是我想查询一下这个信息,什么信息,哎,工资等于某个值,并且呢,是九九年来公司的。九年来公司的公司等于某个值的公司等于多少啊?这里边儿就是我们内层需要做的事了。内层需要做事,这个你要返回给外层一个什么结果,就是九九年来公司的员工里边找那个最高工资。
34:08
对吧,找最高工资,那你就是select最高工资max salary呗,From employees,这成了员工当中所有的最高工资了,你得只能找是不是九九年来的呀,也就是where。是不是还是这个。你看看这里边是不是我们所想要的啊,九九年来公司的员工当中的最高工资。谁的工资等于这个最高工资,并且也是九九年来的。搞定了。啊,运行一下,那就是这个人,你看下这个信息是九九年来的最高工,呃,这个工资他们是最高的,他是最高的11000。那这个我们就搞定了哈,大家你自己写的时候尤其需要注意,最后这个别给丢了,很多同学你自己从从内层往外层写的时候啊。
35:07
哎,我说一下,很多同学从内层往外层写的时候,哎,就这样操作就写完。就就得了,这个是错的,你要这样写的话,因为你内层这个是九九年来的,它返回给外层的,只返回一个工资的值。这个九九年来的这个信息并没有同步的反馈出去,所以要求我们还必须得显示的再加上一个它你看你要是不加的话,你看这个结果就是多个了,看一下他们这个时间,其中有两个明显是错值。对吧,所以你一定要给它加上,这也是我们讲此查询你比较容易出错的一点。行,关于这里边儿的这些练习,我们就写说完了,还有一个word版的,大家呢,一会儿大家先做一做,然后我们来说。
我来说两句