00:00
我们看一下数据处理这一章的题目。我们先看看这个TST这一块的。哎,数据梳理,我发现这里边儿的题目啊,第一个。要更改108号员工的信息,使其工资变为所在部门的最高工资。Job呢?变为公司中平均工资最低的job。这有这等好事是吧,给他工资往上调,然后部门的往下调。嗯。来,我们做一下这个题目。这里边儿呢,结合了我们之前讲的词查询了,所以说这个整合在一起了,你看应该怎么去做这个题目。来看哈,更改它的信息,那肯定是update了吧,Update employees这个表使其公司变成那就是set公司,Salary等于什么什么?
01:09
Job变为,那就是不光改了一个salary,还有一个哎,Job ID等于什么什么的,是这个意思吧,然后这呢,就相当于是一个子查询。相当于我们整个这个题目,这个框架应该是这样来写的。嗯,我先给给它注掉,那我们现在看看这个括号里边这个子查询应该怎么去写。工资,工资变成什么呀?变成其所在部门的最高工资。他部门的最高工资,这个部门你得看看108号员工在哪个部门,然后这个部门的是不是最高工资呀。再说一遍,我得先知道108号员工在哪个部门,然后这个部门的你再去找最高工资是吧,所以说那就得又得分两步了,嗯,我需要select一下这个salary from employee,然后where。
02:09
这个这个salary是max salary,然后是哪个部门的,这个部门呢,又作为一个变量,或者说我们得使用到一个自查询,等于这里边你是不是应该填入108号员工的他的部门啊,所以叫select department ID from。Employees where,这个叫employee ID等于108,相当于108号这个员工的部门。然后呢,这个部门的最高的工资,这个工资是不是让这个这个人有,那这个相当于下边我们还少一句呢,是吧,啊where。
03:00
Lo ID等于幺零吧,这个人的是吧,这个人的这个salary等于它,这是查询到了salary。然后呢,我们是不是还得查这个赵白地呀,这样我先在这给它注意掉,然后注掉,然后我们给它合在一起。下边呢,我们写这个赵白丽,赵白丽。变为公司中平均工资最低的。赵宝。变成公司中平均工资最低的job,你看看这点是不是相当于是我用job ID进行一个分组,然后呢,看看哪一个job ID平均工资是最低的,是这意思吧。哎,然后把那个平均工资最低的那个赵白地还得找出来,这这又是涉及到这个多层次查询呢,那一点点来啊,我们先看看一下,我用组,用job ID进行分组以后各个公司的经济公司,那就是s select的avg。
04:14
Salary from employees group by,涉及到分组吗?我用照白ID进行分,按照它分组以后,我看看各个公司的平均工资,平均工资里边我找这个最低的。这儿呢,我找到了员工最低的,然后我是不是还得看一下谁的这个哪个工作的这个照白率恰好等于这个最低的是吧。那就是select job ID from employee where。
05:00
嗯,AG。你用到Abt了,是不是相当于一个总函数,这就得改成排是吧?排前的话你先给它读一下轴入BY知道不?ID having avg salary,平均工资等于我们刚才算出来这个最低的。大家看是不是这个意思,我先找到按照ID进行分组以后的平均工资中的最低的,然后看看谁的平均工资恰好是这个最低的,找到这个招牌地,然后这个是不是就是我们要调整的这个值啊。哎,这个呢,我们现在实际上已经搞定了,那我只需要现在把它打开。
06:00
然后呢,把salary跟赵白丽分别给它填充上。大家看这个题目是不是就这样就搞定了呀,108号员工的这个信息是吧,OK,好了,这我就调整好了,这个题目就这样来写。就这样写,大家你务必不要忘了最后这个语句,我们说你进行删除也好,修改也好,你如果最后忘了这个忽略条件了,那么进行修改的就是所有人的,那删除的话就是删除所有人的了。大家要格外的注意。然后呢?这个相应的这用到avg了,那就是得用heavy好吧,嗯,你看这个人挺幸福的是吧,当你说你要是去公司工作的时候,嗯,一般呢,就是你这个工作的价值有多高,然后公司给你,公司给你开相应的工资,现在呢,把工资变成最高的了,然后照我变成勤工资最低的,现当于是干的活特别轻,这个这个还不累,然后工资呢,还是最高的是吧,这是就是最高的一个追求了。
07:23
行,这个题目完了以后,我们看后边这还有一个题目。哎,这个题就这就完了啊,我们看这个题目怎么写。大家你下来呢,把这个题目自己再去做一做。删除108号员工所在部门中工资最低的那个员工,主要是我是不是得把这个员工给找到,找到呀,找到以后把它给它删了是吧?删除的话,那就是我们从这个大框上来看啊,是delete from employees。
08:01
给它删,删除它,然后呢,是不是得where where加上一个条件。嗯,平均工资最低的那个员工,把那个员工给他找着,嗯,外,你看这怎么写外平均工工资最低的,那就是应该是工资等于什么什么的是吧?加一个括号工资等于这个,但工资等于这个的是不是有可能是多个,而且不在同一个部门,人家说得是删除这个部门的,那就要求where salary等于它,然后and department ID得等于这个,相当于这呢,必须得是108号员工所在的部门的。而且是这个部门里边工资最低的,你看最低的工资是多少对吧,好了,那我们下边需要做的啊,把这个这是我们整个这个框架是这样的,现在我先考虑这两个,先考虑谁呀。
09:00
这都行。先考虑谁都行,那我比如说先考虑个salary,我看一下108号员工所在的部门的最低工资是多少。对吧?好,那我们就来写从外层到内层或从内层到外层都可以,那假如从外到内的话,就是select salary。这个salary它是一个。就是最低的呀,In salary。From employees,然后呢?哎,这个部门那不对,得这样写是where department ID等于什么什么是吧,哪个部门的最低工资,这个部门呢,又是一个自查群了。
10:02
Select department ID意思where条以ID等于108这个人他的部门,然后这个部门的最低工资,然后把这个最低工资付到这就相当于工资等于这个最低的,并且depend ID等于这个,然后我们看这个depend ID应该怎么写啊?那那那是不是就是。就就就这个吧。这个部门是吧,就他呗,行,那这个我们相当于就能写了。
11:12
这个部门的,然后等于这个工资的这个人给他delete了是吧。行,这就删除了。然后呢,我再commit一下,这就给提交了,现在就给写死了啊,这就是我们这个题的这个写法啊,然后呢,大家看一下这个题,实际上我还可以给它稍微优化一下,这就涉及到这个叫SQ优化了,这个题目当中我说呀,存在一些勇于。存在一些冗余,或者叫做冗余是吧,怎么叫冗余了呀,你看你这个salary这块跟这个depend ID他俩呢,在这个题目当中本身是有关系的,这个公这个部门的这个工资,然后这个部门呢,你在这儿是不是又给重新查询了一遍,这就有一些勇于,因为刚才我们是不是看到是复制过来的呀,那我怎么给它优化一下呀。
12:07
你看这个salary找的时候,是不是找的就是这个部门啊,就是108号员工的这个部门是吧,所以说我们这个查询我觉得有点多余,怎么给他优化,你看我这样是写这儿呢,我给他写个E。这你不写当然也没事啊,就恰好你这where department ID,这个ID等于谁,是不是就是你查询的这个效果呀,所以就是这个E点你拍的那个ID。就是他这个ID这样呢,因为我们是不是把这个人给他删了,你现在在执行的时候,他就是。哎,这个现在还有数据啊。这个为什么能执行成功,是不是你这个刚才删了这个人是最低工资,你现在删是不是删除最低的,现在又有一个次低的,现在成最低了,所以又给删除成功是吧?那这个题目现在我们就是一个优化的形式,这涉及到了一个内容叫circle优化,那是不是就意味着我们这个程序就跟Java程序一样,你要实现同样的功能,我们也会有一些算法是最优的。
13:16
是吧,时间复杂度啊或空间复杂度啊,他们都不一样,然后找到一个最优的。没有最没有最好,只有更好,Circleq呢也是存在一些优化的,行,这个呢,就是我们这里边儿的这个题目。然后呢,我们看一下这个word版的。来,我们把这个题目一块来做一下。第一个创建以下脚本,运行以下脚本创建表,这个已经给写好了,这是我们在上一节当中讲到的,如何去创建一个表,对吧。嗯,来,我们直接就在这这里边写吧,创建这个表大家都会吧。
14:03
创建完以后显示这个表的结构,这个不难d my employees,是这样吧。或者你要给他写那个大写也行,项表中插入下列数据,12345,插了五条数据。大家回忆一下插入怎么写insert into是吧?而且呢,如果你要是不是依托于已有的表的话,就是自己干插入,那你就得只能一条一条写了。这个呢,这样一条条写,写五个,那我就以一个为例写了,其他类似你需要注意的是,你看我们这个表里边的元素顺序,ID firstname nothing user ID salary就跟这个顺序是一样的,所以我就顺序给它insert就可以了。
15:04
My employee,然后呢?Values加上一个小括号1FIRST name,后边这几个都是叫。误差型,所以说你得给它加一对单引号。这个你得用这个英文格式下的,嗯。最后一个salary是一个number类型的895。那么这样呢?我就向这个表当中插入一条数据,然后提交commit,将三号员工的lastname修改为他修改操作,我们使用的叫update。
16:09
Employees。然后where不是where set修改吗?Lastname等于改成它。Last name,然后呢,叫where。ID等于三,就是这样写是吧。然后下一个将所有工资小于900的员工的工资改成1000,这是一个修改,而且修改的不止一条数据,Update my employees set。
17:01
低于这么多的修改为1000SET salary等于1000。这个是叫salary salary等于1000,然后呢,Where本身你这个salary是小于900的,把小于900的改成1000,就这样。检查所做的修正,那你就查询一下呗,Select from my employees,看看有没有低于900的了。或者说你再加上一个Y条件也行,Y这个salary小于900,你看这个输出结果是否为空,如果为空的话,那就是修改成功,修改成功以后,这个时候我还得需要进行一个提交,结束我当前的这个事务,或者另一方面来讲,你要不提交的话,这个事事,这个事务是有可能随时再被回滚回去的,是吧,我一提交的话就给写死了。
18:06
下一个删除所有的数据,删除delete from delete from my employees,这就删除了所有的了,检查所做的修正,Select from my。不好意思,看看这个结果是我现在是空的。然后呢,回滚roll back,回滚的话,那你这个删除的数据,因为你在这提交过是吧,那就回滚到这个位置,就是删除的数据又给回来了,回来以后这里叫清空表,叫tet tnket table,有这个table这个词大家要注意。
19:06
星空my employ。My employee是吧,这个这个没有S补,给他补上一个S吧。把这个表清空,这个清空以后你要再给他去roll back的话也不好使,因为这个操作属于DDL。他们的这个操作是会自动提交的,所以你再回滚就没有用,行,我们这一节就讲到这儿。
我来说两句