00:01
下面我们来讲一下,叫做多行子查询,多行查询呢,也称为呢叫集合比较子查询,这个大家听一下就行,有点绕口,因为我们叫多行的话呢,相较于单行来讲更容易理解,对吧?那什么叫多行子查询呢?顾名思义就是内查询,它返回了多行的数据。那你比如说我们刚才做这样的一个操作,我们一运行的时候呢,发现它报错了,原因呢,就是因为说它这个子查询,或者我们叫这个内查询呢,返回了多余一行的记录,那比如说我们定位到这个内查询这个位置,我们去做一个这个执行,那我们会发现呢,它返回的结果呢,就是多行数据,那我们此时呢,用这个等号来做连接啊,就不太合适了。对吧,你想我们是等于,那你等于是7000还是等于4400,还是等于6000,是货的关系还是且的关系,这个是不是就晕了?对吧,那所以说呢,我们这里边儿呢,就不能够用这个等号来做这个连接了,那这样的话呢,我们就得说那么多行子查询用的这个符号应该有什么呀,那这里边我们看到了有这样的四个对吧。
01:03
那分别呢,我们来进行一个说明,那第一个呢,叫做这个in in呢是等于列表中的任意一个值。诶,这个呢,跟咱们前面讲的那个运算符那个印啊,是不是差不太多啊,那其实呢,大家就可以理解成是一个意思,只不过原来我们印的时候呢,直接后边呢,就是具体的这些值了,而现在的话呢,我们这个数据呢,是不是需要通过一个查询去获取,对吧,就这个道理。OK,下一个呢,叫做any any呢就是需要和单行比较操作符呢一起使用和子查询返回的某一个值来进行比较,叫做any某一个值或者呢,你也可以来理解成叫任一,注意是任一,不是任意啊,任一一个值比较。All呢,O就是所有的意思,它也是需要和这个单行比较操作符呢去一起使用的,是和磁杀菌返回的所有的值来进行比较的。那就比如说我们这里边跟它所有的值,而我们的any呢,是跟他体里边其中里边的某一个值进行比较的,区别呢,就在这儿。
02:00
大家可能感觉上稍微理解这个差点意思是吧,那我给大家再换一个场景来去体会这个any,那我说完之后呢,我觉得你应该这个能有所印象啊,比如说啊,现在有五个女生呢来追你。五个女生这个呢,有这个有学识的是吧,有聪明才智的,有的呢,属于这个贤惠型的。洗衣服做饭都会是吧,还是说这种这个颜值很高的啊,身材很好的这个这个这个很时尚的是吧?哎,各个类型的都有好都追你了。哎,有同学说没有一个也没有是吧,你想象一下嘛,好,都追你娜娜你你你怎么选呀?那有同学说我就选any any的意思呢,就是说,哎,这个不挑啊,这个谁都行,挑一个就可以啊,牵手成功啊,这叫any,那all呢,就是所有的都要。所有的都要any呢,只选一个啊,看出来这个区别了是吧?好,那一会儿呢,我们看一看在代码层面的这any和all区别在哪里?下一个呢,这个叫做some some呢,我们说实际上就是any的一个别名,作用呢和any是一样的,这个呢,所以大家了解一下就行,就是我们自己写的时候呢,习惯上还是用这个any了,那这个some的话呢,如果你要看到别人写了,你知道呢,它其实就是any啊,就OK了。
03:10
行,那这个呢,我们就说清楚了,嗯,那咱们把这个呢,也简单的往笔记里边的稍微写一下,这是我们说的这个五叫做多行子查询,那首先呢,我们就提到了5.1叫多行子查询的操作符。哎,操作符,那我们刚才看到有这个in啊,有这个any,有这个A,还有这个呢,叫some是吧,它呢是同。同我们这个any,注意别写错了,是同any,不是同奥行,这个呢,就我们说清楚这个事了,然后接下来的话呢,我们就开始具体的来举例了啊5.1哎,5.2举例,那举例的话呢,我们首先说一下这个in的一个例子。那in列个例子的话呢,其实我们就比如说拿上边这个来说吧,CTRLC一下,咱们直接粘过来,那明显的发现了这个内查询是多行记录,那此时呢,就不能用等号了,就跟咱们前面一样,说你where sal6ary等于5000,那没问题,那你不能说5000逗号6000,那很显然的话呢,这块有俩数据的,你是不是就应该把这个in呢改成,哎,把等号呢改成是个in就可以了,是吧,这是同样的道理,那我们这个位置呢,你就改成是个in就可以了。
04:12
好,那么选中呢,我们去执行,那这时候呢,结果就正确了,这是什么意思呢?相当于我们查出来了这个各个部门的一个最低工资。然后呢,我们看一下这个公司当中啊,哪些员工的这个工资呢,恰好等于刚才提到的那些最低工资了,是吧,那就是这样一个题目的情况。那说到这儿的话呢,有同学呢,会想这个事儿,说那个老师啊,那如果说我们上边,嗯,我们举一个例子吧。我找一个例子。找这个例子啊,那大家可能会想,你看有同学说我没想到是吧,没想到你也跟着我这一块听一下,你比如说我们这个查询,这个查询的话呢,是一个内查询,我们查完以后呢,是不是就只有一个结果,那我们用的是一个等号对吧?那有同学想说,老师我要这个位置改成是个in可不可以啊。大家觉得呢?那in呢,我们说呢,是不是有多个结果,但是呢,我们这个查出来就只有一条结果,那这样用O不OK呢,是不是显然也是可以的呀。
05:06
只不过呢,这个时候我们没有必要用这个in了,因为你只有一个结果吧,所以我们就用等号来,哎,使用了是这个意思,好了,这个相当于大家呢,理解一下我们这个in,好,那这个in呢,我们就说到这儿,然后接下来呢,我们看一下这个叫这个any,这个any呢跟这个all呢,咱们就一起来测试了,这呢相当于是拿一个问题,这样我们两个不同的写法呢,大家有更好的这个理解了。好看一下我们这里边儿这个题目。把这个呢,CTRLC粘过来。这有点长,来,我们换一下行。分析一下,说返回其他赵白地中比赵白地为it pro这个部门当中任一,注意你看这个是个任一的字眼,工资低的员工的员工号姓名这个这个地方是吧,那你看有点长这块呢,还是单句返回什么什么什么什么的,那我现在选中的这个呢,属于定于可以理解成是我们这个物理条件了,说返回员工的员工号这个这个这个这个,所以我们就可以先上来就写select,我们想查询的呢,是这个员工号。
06:10
嗯,Lastname。还有它的job ID,还有salary OK from,我们看到呢,都是来自于我们这个员工表的,没问题,行,然后呢,我们下边是不是开始分析呢,中间这个所谓的定语该怎么去刻画了,首先呢说其他照白底当中,那杨I呢,你是不是把这个赵白D是ID pro这个给它去,这个去掉是吧,那我们既然读到这了,那咱们就先去了吧,叫job ID,首先呢,你得不等于这个it pro这个部门。先把它干掉,然后呢,还有其他的,那就来个and,怎么着呢,说赵白ID为it pro这个部门当中任一工资低,那是这个工种的有好多员工的工资比他们都低,那我们是不是要取出来这个工种的员工的工资啊?那咱们先独立的拿出来他们的一个salary from employees。
07:01
然后呢,Where job ID等于哎,是不是这个it呀。把它选中放到这儿行,这样的话呢,我们就查出来这个叫I pro这个job ID的这个salary了。那是不是就这些啊,就这些好,然后是怎么说的呀,说呢,这个是不是我们找这些员工,只要不是这个部门的,剩下这些人当中啊,说得比你这些工资的任一工资都低,那我这样呢,为了方便我把它盯一下。这比这个公司呢,任意工资都低,第二金呢,就是取出来一个就可以了,那就是说and,我们说这个salary。在料里怎么着啊,任一都低,是不是得小于啊,小于一个数,但是那这里边有好多呢,是多行自查询吗?是不,我们这块呢,就小于怎么着呢,叫any,因为呢叫任一嘛,哎,所以就这样来表达,来把我们下边的这个CTRLX粘到这里边。啊,往后这块我们缩进一下,你看这个增加一下这个可读性好,那么这样的话呢,我们这个题目呢,就写完了,来咱们分析一下,我这呢叫任一,我们这时候查出来这个工资,那我问大家,比如说有个员工工资呢是3500,你说这个时候呢,也不是这个部门的啊,会查出来吗。
08:10
是不是显然会啊,没问题是吧,那如果要是8000呢。能查出来吗?8000。有的同学可能会想,那那不行吧,因为他都比这个六千四千多这个要高啊,那我说呀,8000也能出来,因为呢,他不是任一或者要存在一个就可以吗?那是不是8000:9000还要低啊,所以说8000呢也是会出来的。OK来我们这时候选中呢,去执行,大家你会发现你看8000多,第二题呢,就是我们这里边这个情况呢,是不是它只要是低于9000就可以了是吧。哎,低于9000就可以。行,这是我们说的这道问题,那这道问题的话呢,我把它CTRLC粘过来,在这个位置叫任一,我改成叫所有。所有是吧,比呃这个招白地是it pro部门所有工资都低的员工的员工号这个信息,那此时呢,既然是所有了,是不是就是我们这个位置呢,给它改成是一个哦了对。
09:08
对吧,小于所有的,那大家想我小于所有的是不是得小于9000,还得小于4200,言外之意呢,我们此时查出来这个数据呢,是不是都必须要小于这个四千二了呀。是这个意思吧,你看我们此时呢,去做一个运行,这个结果当中就不会有四千二以上的。都是小于四千二的。哎,没问题,行这呢,通过这个题目呢,大家去体会一下这个叫or和这个any啊,他俩的这样的一个区别。体会一下这个区别,好,这个清楚以后呢,来咱们接着再看下边这样一个问题。嗯,查这个题目来把这个呢,我们CTRLC一下看这题目本身的话呢,还挺短的,似乎呢好像不太难。我这样一说的话呢,大家可能会想这个题目可能会有点难是吧,哎,其实这个题目呢,还真是有一点难度,通过这个呢,我们想给大家再说一点其他的东西,让你的视野呢再开阔开阔,好来我们看一下说查询。
10:09
平均工资最低的部门ID,你就告诉我哪个工哪个部门的这个平均工资最低,这个ID是多少就可以了。怎么整?当你没有思路的时候呢,大家你就这样,就包括呢,大家你上这个中学的时候呢,或者说这个高考的时候呢,诶也是这样,就每次考试都是这样,怎么着呢,就是你拿到一道大题的时候呢,你这个大题这个不知道该怎么做,然后呢,呃,毕竟大家训练了高中的三年嘛,是吧,你至少看到某一个小的这个知识点的时候,已知条件的时候呢,是不是可以考虑的把这已知条件呢,我们用相应的这个这个语言呢,去给他描述一下,然后呢,看看都能够得到什么东西,就让它呢,发光发热是吧,每一个条件都发光发热呢,你做着做着你发现诶这块又出来,点这块又出来,点这块一推答案出来了。啊,很多时候呢,都是这样子的,就是做着做着这个我们可能就出来了。啊,除非呢,你像你对这块呢,极其熟悉了,所以你一看思路全都出来了,那才行,那高考的话呢,通常这个题目大家都没有见过,那你要是不能够触类旁通呢,那就得是一点点的去分析,对吧,那这个也是一样,说查询平工平均工资最低的部门信息,一上来没有思路怎么办呢?一个一个来,你看看你能够干什么,第一个提了是不是各个部门的平均工资啊好,那我们就先把这个事呢先做出来。
11:21
各个部门的平均工资。Salary from employees,既然提到各个部门了,那你肯定是不是要做一个group by啊,分组一下。OK,这样的话呢,我们是不是就查出来了,各个部门的一个平均工资是吧。啊,说这个department department ID啊。这样呢,我们就查出来各个部门的一个平均工资,说这平均工平均工资里边你找那个最低的,最低的是不是就是这个3475啊。然后呢,他得你得告诉我这个谁,那个是这个最低的,谁是这个最低的,那其实我们现在在目前的这个题目当中啊,我们如果加上一个字段叫department ID的话呢,我们选中呢去执行,其实实际上大家就看出来了,哎哟,这不就是50嘛。
12:06
是这意思吧,但是呢,我们这个结果这么多,你不能说我就专门挑这个,实际上是你自己分析的,我先找到这个3475,然后才找到的它的是吧,所以但是呢,我们还得是需要找这个所谓的这个最小啊。那这个最小怎么找呢?有同学可能会想,这不就是求了,这个叫平均嘛,求最小这不就是在它的基础上,我们再套一层这个面不就可以了吗?想法上还是非常完美的,来,我们选中的去执行一下,大家看此时呢,是不是报错了。那也就是说呢,我们不能够在聚合函数外面再套一层聚合函数,相当于聚合函数呢,是不能够嵌套的,前面呢,咱们讲单行函数的时候,当时说是可以嵌套的,你比如说我们先round一下,求个123.45,保留一位小数round了是吧,然后呢,Round的结果呢,我们再来一个窗NK,哎,逗号零一下,这个是可以的,这叫单行函数可以去嵌套,但是呢,在咱们这个my circle当中,或者写一下。
13:06
My circle中聚合函数。是啊,不能够嵌套使用的。哎,这个呢,大家呢,要注意一下,那也有可能后续版本呢,就能这样做了,什么意思啊,那是因为呢,我这块有这个底气在于哪呢?是这个Oracle当中,但是你看我现在呢,在Oracle当中,咱们去做个测试,那既然呢我来这测呢,我是不是就有这个底气,哎就是说它是可以成功的是吧?好首先呢,我们也是先查一下各个部门的一个平均工资来选中的去执行一下。那这呢就出来了,跟咱们刚才在MYSQ当中是不是一样呢?有这样的一些数据,那现在呢,我们是不是想把它取出来,好,那我们就在这个avg的前面呢,套了一层这个min,那选中以后呢再执行,那大家你看是不是直接就出来了3475了,这呢是咱们Oracle当中,它是支持这个聚合函数的一个嵌套使用的,那显然的话呢,是不是就比我们这个里边呢要高级一些是吧。
14:01
啊,这个引擎呢,这个Oracle当中要更优秀一些,行,那既然不让我们这样用呢,那我们就得想办法,咱们要取出来这个平均的最小值,这个时候怎么做呢?注意听这呢,就是让你这个思维呢,有提升的这样一个点了。那怎么理解呢?但是你看我们如果把这个avg salary看成是一个函数的话,那恰好是一个聚合函数,那我们说呢,不让在外边儿再套一层是吧?那么如果说你要不是一个聚合函数的。比如说你看我们这样查一下,这是不是我们查的这个数据,对吧?哎,这个数据的话呢,你看它这个字段呢,就叫做avg salary啊,一看这个函数,那比如说我们在这个位置啊,我重启个名叫avg的一个SL,那么此时呢,我们再去执行呢,你看这个时候字段名就变了,是吧?那如果说呢,我们现在查出来的这个结果。这个提升的点是什么呀?就是查询出来的结果也可以作为一张新的表。如果呢,把它看成是一张表的话呢,大家看我这时候呢,你这个列呢,是不是就叫做avg_salary了,而不是说呢,是一个函数,也就是呢,原来你这个表当中有salary这个字段,但是没有这个avg这个salary这个字段,但是我把这个查询的结果当成一个表的话呢,现在是不是就是有一个列就是这个值啊,那么这个时候呢,我们在avg这个字段外边,我再去加上一个min是不是就可以了呀?
15:28
因为呢,你已经不是一个里边是个函数了,那里边儿你就是一个普通的字段了,当然我是可以用mean来修饰的了。那这个呢,就是大家思维一个提升的一个点啊,思维就开阔了,好那我们怎么把它看成是一张表呢,那自然而然的是不是我们就可以在from的时候呢,把这个子查询给它套起来,那沿IG呢,就是我们让这个查询的这个结果。哎,让查询这个结果呢,是不是充当了一张表,是这意思吧,好,那我们就可以呢,去select一下什么呀,叫avg的SL,那我就是查这个表中的这样的一个字段。
16:06
那现在它只是作为一个普通字段出现了,来我们选中的去执行一下。好,大家看这时候呢,是不是给我们报错了呀。它是什么意思啊,说每一个你保留下来的这个表啊,这个呢,其实就针对我们说这个子查询来讲的,你保留下来你这个表呢,需要呢,有一个自己的一个别名,那说的非常的清楚,EG呢,就是我们此时呢,需要在这个位置呢,去给它起个名字,那就是比如说DEP。啊,Avg的。部门的平均的一个工资。是不是这样子啊,然后呢,未来你能看到看出来它是一张表,你也可以是T下划线,就是table的意思,好,那此时呢,我们选中再去执行,大家看到这时候呢,是不是查出来的这个数据跟我们刚才在这查一样,只不过呢,这是我们从这个这个相当于是把这个结果看成这张表当中去找的这个字段查出来的,那么这个字段的话呢,前边咱们就可以用一个mean来进行修饰了。
17:00
就这样一套,那此时呢,那我们选中呢,再去执行这3475就出来了。诶,是不是感觉是挺有意思的是吧?诶这个呢,就是我们相当于是在from当中呢,也是可以来写子查询的啊,这个角度来看,大家呢又学到一个新的东西,前面呢,我们说是可以在这个这个Switch case当这个case问政当中去用,然后呢我们还可以在having中去用,其实呢,我们在讲到这个课后练习题的时候,这一章呢,大家会看到有一些更丰富的地方都可以去使用咱们的紫查询,到时候呢我们再去做总结。好的。那么拉回来,那现在呢,咱们已经找到这个所谓的是不是最小的平均工资3475,然后接下来干什么呀。接下来干什么呀?咱们是不是要查一下,说哪一个部门的平均工资是3475吧。咱不是就要找这个吗?哪一个部门,那我们就查询一下底盘他们他。Department ID,然后from employees。
18:01
对吧,那从这个部门当中哪一个部门的平均工资,那既然提到哪一个部门了,你是不是得按照这个部门来进行一个分组吧。对吧,在部门进行分组,然后呢,Having。要求什么呀,要求它的平均的工资,那是等于这个3475的,那不就是我们,哎,用一个子查询来充当这个结果吗?把下边这个CTRLX。拿到我们这里边。然后紧接着我们把这个呢,再诶到哪到这是吧,哎,再往后移一下就行了,好这个呢,我们封一下好,那么选中哪个部门呢,一直行,这不是52部门就出来了嘛。没问题吧,这个呢,就是咱们这道问题的一个解决方案,那这样你看我们一层两层三层,是不是就做了三层的一个自查询,这是我们第一次出现三层的,好,这个呢是咱们这叫方式一。哎,你刚刚写个方式一,是不是自然而然的就有,我们接着要写一个方式二啊,但是你看我们现在这里边呢,还没有出现这个any啊,O啊或者in啊这样的结构,那咱们现在既然放在多行子查询里边去说,那我们这块呢,相当于是要用到这个符号了,好怎么去理解呢?哎,我说呀,这块我可以把这个结构呢再进行一个简化。
19:12
简化怎么来简,大家你看咱们这块呢,实际上求出来是不是各个部门的平均工资,它显然呢,是不是有多条记录对吧,然后呢,我们又取了一个最小值,那就取了其中的一个,所以用这个AG呢,是等于了这一个了,它这相当于是个单行的,我现在呢说可以把它呢改成这个样子的,大家你看看你能不能理解。我把这块给它拆掉。不要这块了。那这块呢,相当于就也没有了。这个呢往前移。2100,那就相当于它这块呢,等于这就是一个子查询了,子查询这块呢,就没有必要它不是个表了,就没有必要写这个表名了,啊把这个也删掉。这样子是吧。嗯,当然这块呢肯定是不对的啊,因为我们这呢,是不是查出来多条记录啊,你看我们一执行多条记录,那你用等号肯定是不对是吧,那我们这块呢,我可以去改怎么改,但是你看。
20:02
如一听啊,我现在呢,是不是查出来是各个部门的一个平均工资是吧,而我们现在呢,是不是这也是部门的平均工资,我要找的就是这里边儿最小的。既然你想找这边最小的,呃,我们就可以让这个值呢,我这样来写,就小于等于这里边儿的这个O。哎,看能不能理解,呃,首先呢,我们让这个数呢,小于等于这里边的所有的相当于,是不是就是小于等于这里边的最小的就行啊。我只要比最小的都小,是不是就一定小于所有的了,好,那相当应呢,我就是小于等于这里边的最小的了,那我们现在实际上要找的是等于这个最小的呀,那你看咱这呢,是每个部门的平均,你这呢,得到的也是每一个部门的平均,就相当于我们这个结果呢,它本身就属于这里边儿的一个。哎,我想找小于等于这里边的最小的那个,那其实你不自己就是这个最小的嘛,比如我们最小的是这个,哎,比如说4000吧,那其实你这块你就是4000,你说有没有可能说你这个这个是3000呢,这个要3000,他这块肯定也是3000,因为它本身这个呢,还属于这里边的一员嘛。
21:08
来体会一下,它本身就属于这里边一元小于等于这里边最小的,其实它就是我们要找的就是这里边儿这个最小的了,那相当于我们小于等于二,就能够相当于avg salary,就等于这个3475。那我们这时候再去查询他这个ID,这不就还是无部门吗。这个呢,就相当于是更简便的一种写法是吧,我们这呢,是不是就两层这个for循环就搞定了,但是这个呢,显然会更难一些,因为呢,咱们是把这里边儿呢,你看到了一些本质的信息,我们给他做了一个这个思维上的一个升级,然后我们才写成这样一个更简便的一个方式的。啊,那么这两个方式呢,大家都可以下来去体会体会啊,自己来写一写,咱们在这个课后的章节,课后的练习题当中啊,有好几个问题呢,都可以类似这样的去做修改。诶,可以类似这样方式去做修改,行,那么接下来的话呢,我们再说一下这个关于多行子查询的一个叫什么空值问题啊,这块呢,咱们该这个5.3了啊,这个叫诶空值问题,前面的话呢,咱们也提到了单行子查询的这个空值问题啊,当然咱们说呢,其实谈不上说是一个问题了,对吧,就是相当于一种场景,那我们这里边看一看这个多行子查询这个控制问题想刻画的是一个什么样的情况,好这块呢,咱们直接呢,把这个代码粘过来给大家呢,做一个剖析就可以了。首先的话呢,我们看到这里边的内查询,它实际上呢,是查出来我们这个员工表当中的是不是叫manage ID啊。
22:32
对吧,没有问题,好,那然后的话呢,比如说我们把这个note呢,咱们暂且先去掉,说呢看看员工的ID是这个manager ID的这个员工的last name,说白了咱们这块儿呢,查询到的是不是就是公司当中的管理者的拉呀。没有问题对吧,这块我们一执行发现呢,查出来18条记录,相当于这18条记录呢,就是公公司对应的这个管理者,OK,然后的话呢,你看我这块呢,加了一个note。什么意思啊,就是呃,你员工这个ID这不多吗?呃,一共我们说有百07个员工107个ID,对吧,现在是not in这个manager ID啊,相当于呢,我们想做的事呢,是不是就查出来不是这个18个人的,剩下那些人呢,1ID呢,咱们有107条记录,你减去18是不是剩下的应该是89吧。
23:18
那我们希望呢,把这89条记录呢,能够查询出来,诶但是呢,我们这块呢,大家你看啊,我一选中一只行,哎呦,很遗憾,怎么是一个空的情况呢,并非是我们所愿,对吧?那这个是什么原因造成的呢?那这就是我们现在想给大家去刻画这个点,所以这块呢,你简单加个note呢,发现是并不靠谱的,那什么原因造成的呢?那有同学可能能猜到了,那我们这块呢,给大家剖析一下,你看我们选中这个内查询呢,咱们做个执行,大家你会发现呢,我们查出来这个结果当中呢,是不是有一个not值啊。相当于是个空值对吧,那这个空值的出现呢,实际上就是我们这个问题的一个罪魁祸首了,那咱们现在这样去剖析,比如说你看我在这个内查询里边呢,我加上这样的一个过滤条件,说呢,Where ID呢,Is not。
24:06
那加上这个条件以后的话呢,我们再做这个select,那肯定是把这个now呢就给干掉了,对吧,那么在这样的一个场景下啊,这块我就不加这个了啊在这种场景下的话呢,咱们再去做一个执行。好了,这时候呢,大家就会发现,哎哟,咱们这个89的数据呢,就出来了,相当于我们刚才想要的,是不是实际上你想要这个数据对吧,但是呢,我们刚才呢,没有这个where的情况下呢,发现就没有出来,那原因呢就也找到了,就是因为呢,我们这个内查询呢,相当于它有一个not。那么再有个闹着的这个情况下呢,我们这儿呢,再去做判断这个结果呢,它其实就是一个空的情况了,所以这个呢,大家在实际开发当中啊,一定要小心一点啊,去处理这个问题,所以说呢,我们在尤其做这个呃子查询的时候呢,内内查询里边的结果,如果有闹值一定要想清楚,你看这个呢,是你想要的还是不是你想要的。OK啊,这块大家做一个注意,那么这样的话呢,咱们就把这个多行子查询这块呢,就给大家讲清楚了,主要的话呢,大家关注一下这个多行子查询对应的这几个操作符啊,In any or啊,Sum是吧?哎,这几个符号呢,弄清楚啊,别整混了就可以了。
我来说两句