00:00
那么到目前为止,大家这块关于多表查询的话呢,应该还能接受得了,对吧?诶应该还能跟得上呢,行,那咱们自然而然的话呢,是不是开始讲这个第三波呀,诶第三波叫什么呀,叫做内连接和外连接,这呢是我们说这个多表查询的第三个这个分类的角度。啊,这个的话呢,相较于咱们前面两个呢,就有难度了。啊,大家一看这个名字,是不是感觉都摸不着头脑是吧,那感觉上的话呢,确实会有点难度,行,那咱们来做一个这个剖析,首先的话呢,我们先把这两个概念呢来解释清楚,什么叫做这个内连接。什么叫内连接?我说呀,咱们上边写的这些其实都是内连接。哎,同学懵了,那我还是不知道什么叫内连接是吧?哎,那咱们写一个典型的内连接啊,我把咱们前面写的某一个例子啊,我拿过来。我找谁呢?我就找这个。把它呢,CTRLC。来看一下这个例子,我把这个呢就去掉了,这个例子里边我们是做什么事的呢?哎,咱们再把它稍微优化一下,我这起个别名啊,这个加个D啊,这就是D,那就是D这样短一点,那我们先查一下这个呢,我们查询到的是不是公司当中这个员工的employd和他的部门的名称,咱们一共查出来了6000,呃,106条记录,大家你记不记得我那时候讲过,说这个公司当中啊,有107个人,却只查出来106条,是因为呢,有个员工没有部门是吧,那相当于我们这里边注意听。
01:26
我这里边儿这个连接条件呢,只是把。左表当中谁是左表,就是我们这个逗号,左边这个逗号,右边这右表,我们只是把这个左表和右表当中满足连接条件的数据给查出来了,其他的数据都没有要,那么把这种查询我们就称为叫内连接。角内连接,那我们看一下这个,呃,正经的一个这个,呃,这个比较简短的一个说明啊,就是说这个啊,我把它呢,直接粘过来CTRLC一下。
02:03
放在这儿,哎,把这个形声先去掉,大家看,其实跟我这说的一个意思,说合并具有同一列的两个以上的表的行,结果集当中不包含一个表与另外一个表不匹配的行,那YIG呢,就只包含它们匹配的,那就是只满足这样一个等的关系的就查出来了,这个时候咱们说是不是只有。啊,106条记录。好记住对吧,那我们,呃,还有什么情况呢,咱们发现呢,是不是这个员工表当中。我说这个员工表当中是不是有的员工就没出来。因为他没有部门啊,找不到这个部门ID是no的,我们没出来,那么同样的咱们部门表当中啊,也有可能是不是存在着一些部门,但是呢,右边有部门,左边呢,是不是却没有这个部门对应的人呢。就相当于先把部门建起来,但是部门还没有人,诶有可能也出不来对吧?哎,那么满足我们刚才只是等的关系的叫内连接,那么如果你除了这种情况之外,还想把这个,呃,这个表或者是这个表中不满足的那个条件呢查出来,就比如说咱们没有部门那个哥们儿想查出来,那么我们就称为叫做外连接。
03:20
啊叫做外连接,那言外之意呢,就是还是这个意思啊,我我在他这个基础上我去刻画啊,说合并具有同一列的两个以上的表的这个行结构集当中,除了。除了包含一个表与另外一个表匹配的行之外是吧?接着啊,还查还。查询到了啊,这个,呃,这个左表左表。左边或这个,哎,右表中。这个不匹配的这个行。那么这个时候注意,这时候我们已经给大家都查出来了,那么这时候呢,我们就把这个呃查询的情况呢,称为叫外连接啊叫外连接,那么这个外连接呢,我们紧跟着呢,再要谈一个这个外连接,这哥们儿呢,还有一个分类。
04:14
啊,它的分类是什么呀,那注意听咱们是不是说,嗯,比如我我我用个这个图来表示,大家可能更理容易理解啊,这是一个表是吧?就比如说咱们这个员工表啊,然后这块呢,还有一个表,这个呢,就比如说咱们这个部门表,咱们说这左表跟右表都满足的条件,其实你可以理解成是不是就我们中间这个部分呀。那么中间这个部分呢,咱们刚才说了,有106条记录。那么左边这个表呢,咱们因为对员工表比较熟悉,实际上是不是有一个员工没出来,那我告诉大家,就是其实公司当中他有一些部门啊,有这些部门呢,但是没有没有具体的员工了,就这块儿呢,其实也有一些这个具体的数据了啊,那么我说呢,现在外连接是什么呀?就是咱们把这个左边呢,或者是右边的可能不满足的也都查出来,这叫外连接,那么分类的话呢,我们自然而然的就把它分成了,叫做左外连接。
05:01
和右外连接,左外连接是什么呀?就是我们首先呢,这块都包含啊,如果除了这块之外呢,还把左表当中不满足的查出来了,这叫左外,如果你把诶这个这叫左外,那右外连接呢,顾名思义就是把这个公共部分查到之后呢,还把右表当中不满足条件的查出来,这叫右外连接啊,所以呢,自然而然的就分成叫左外连接啊,右。Y。哎,连接实际上呢,我们还有一个,还有一个什么呀,就是你看我们刚才画的这个,哎,这块啊,你加上这块呢,叫左外,呃这个这个加这个呢叫右外,那是不是有可能一块两块三块全都要啊,那这块如果三个全都要的话呢,我们也起个名字,那就是那叫左中右,呃连接啊不是啊,它这个叫满啊Y。连接。哎,买卖链接,这个买卖链接的前提呢,大家得先把这个左外和右外呢,先弄清楚啊,这个弄不清楚,你这个买卖呢,自然而然的也也不清楚啊,也不会写是吧?好这呢它的一个分类,那么有这个分类的话呢,咱们那那就呃,其实上面这块呢,我也写出来了,你把这个右去掉,这说的就是左外连接,你把这个左去掉呢,还只说的就是右外连接,咱们具体来讲呢,你可以还用我们这个里边啊。
06:13
哎,这个这个我直接把这个。嗯,没有PPT行时结果这个这个就不管它了啊,我就到这啊CTRLC。哎,在这儿。哎,我们把这个呢。怎么着一下?哎,大家看。这个稍微有点长。你看这啊说呢,两个表在连接过程当中,除了满足呃这个返回满足条件的行以外呢,还返回了左表当中不满足条件的行,那我们就称为呢叫阻碍连接啊,是不是就很好理解了,然后我们把这个呢CTRLC我再粘一个叫UI连接,你把这个里边这个左这个词改成U是不是就可以了。嗯,除了满足条件的行以外呢,还返回了这个右表当中,不满足条件行我们就称为呢,叫做右外连接啊,很好理解,很好理解,其实我们上面也已经说到这个事儿了,那么下边来吧,那咱们就开始来写一写这个内链接,不用写了吧,咱们上边写的这些全都是内链接,对吧?好,那我们看这个外链接,那我们现在这个需求呢,就是这样子了,咱们嗯,要查询员工的。
07:21
这个last name和他的department name。啊,这个信息。这个信息啊,我这来一个练习是吧。有的人可能会说,说老师,你这个不就是这个吗。哎,CTRLC一下是吧,那你要这样来理解的话呢,这个只是查出来我们能够有匹配条件的这个员工信息了,我再明确一点,要查询所有的。哎,这呢,你就不晕了。所以呢,大家在一个是笔试当中。啊,一个呢,在实际你开发场景当中,呃,你看一下这个所有的这个字眼,一旦要是有所有了,说什么什么什么,而且这呢来自于不同的表,这时候你一定要啊打起100个精神来,这个说了所有了,所以它一定是一个外连接。
08:12
再说一遍,他既然让你查所有的呃,员工的这些字段,而这些字段呢,来自于不同的表,那你一定是不是有多表的这个连接了,那多表连接的时候呢,你就要想到他既然让你查所有的这个信息,那么就可能呃需要让你查询到是不是不匹配,不匹配的那些数据了,或者我们就有可能存在不匹的数据,那就一定注意啊,它是一个外连接啊,你要是没有写外连接,那就错了。尤其笔试的时候呢,这是一个坑,或者也是一个非常明确的一个字眼,再告诉你这是外连接好。行,那既然说所有了,那自然而然的,你这块查出来的就不能是106,因为呢,你公司有107个人,少一个人不行,对吧,那我们怎么做呀。啊,怎么做呀。大家你看啊,我这块呢,哎,这个这个咱们诶先这样啊,我先告诉大家,就是这个Y链接去做的话呢,这块涉及到有两个语法啊,SQ92语法和SQ这个九九语法,SQ92语法呢,就是九二年发布的啊,九九语法呢,就是九九年发布的啊,这个呢,一说到这儿的话呢,我最后呢,附录了一个这个SQ的这个标准啊,这个暂时咱们就把它去掉啊,这个SQ这个标准的话有哪些,大家做一个了解啊,顺带咱们就在这说一下吧。
09:22
这个SQ的话呢,咱们说就跟不同的编程语言一样啊,这个版本呢,不断的去迭代,这个都很容易理解啊,大家用安卓手机,用iOS手机,它本身这个手机是不是这个系统版本也在不断的更新,Windows也一样啊,WIN10现在是不是WIN11也出来了是吧?诶都会有不同的版本,那不同的版本里边呢,对于咱们开发来讲啊,你用的这个语言,这个语言呢,它就会有不同的这个规范啊语法规则,那它在哪一年发布的,它就会有一个这个呃名啊,像搜狗8686年发布的SQ89啊,这个9299是吧,03081116啊这呢就是它不同的这个年份了。
10:00
啊,在哪一年发布的话呢,那我们就遵循这个,你就看哪一年这个标准就可以了啊,那么在这些这么多的众多标准当中,我们说最为重要的两个标准就是SQ92和SQ99。最重要的是4Q92和搜凑九九,那有同学说那后边还有呢,后边这些的话呢,它当然也呃也有很多的改变,但是呢,对于咱们这个,呃,数据库开发来讲,咱们这个写的circleq,大家主要关注的就是九二和九九就行啊,包括这两个版本的话,你看SQ92的这个标准呢,有500页啊,九九的就1000页了,就已经是很复杂了,那到后边呢,那就更别说了。那就更别说了,但是呢,主要的一些规则,它肯定还都是一样的啊,你比如说我们这个零三吧,它肯定是要解决九九当中的一些痛点问题的,但是我们九九呢,已经算是,哎,还不错了。啊,你看这里边提到了,说这个九二呢,它的特点就是SQ的语句呢,可能比较长,可读性差啊,九九呢,就是相当于弥补了它这个可读性差的问题。
11:00
啊,可用性会更强啊,但是语法呢,会看着有点复杂啊,是这样的啊,就是呃,说来说过去就是大家呢,主要关注于这两个标准就可以,这两个标准呢,也通常叫做SQ2和SQ杠三的标准,后续的这些版本呢,大家就不用过多的去研究了,那掌握这两个标准,那么我们去正常的做数据库开发啊,问题不大,除非呢,大家是专门的是做这个数据库开发,做DBA甚至更高级别的这个数据库开发的,那你会关注这个比较深入的一些情况啊。那咱们再拉回去。拉回去,我们现在看一下这个在SQ92的这个语法当中,怎么去搞定Y连接。听懂了吧?别蒙了啊,别蒙了,这个要蒙的话,这块你把这个视频先暂停住,这个站起来吸口氧啊,可能这个上层的氧气呢,比下层的氧气呢要多一些啊,因为二氧化碳呢,这个是44是吧,氧气呢,它是混合气体啊,我记得是39,氧气呢在上面的氧气是O2是吧?呃,这个这个在上面的多一点啊,这个空气的这个整体上好像是39。
12:05
啊,这个抬起头来洗洗氧啊,再坐下来。行,那我们接着往下说。这个。我自己缺氧了哈,说到哪了?哎,外连接是吧,我们现在呢,看一下这个CIRCLE92这个语法怎么去实现Y连接,哎,Y连接circle。Circle这个九二语法。哎,实现这个外连接,那如何去做?有同学说呢,老师你这个搜Q92语法上来就实现外连接,你SO92语法如何实现内连接啊。对吧,是一个好问题,思考九二语法如何实现内连接,我们就直接俩字啊,减上。老师你这太敷衍了,太敷衍了是吧?哎,什么叫见上啊,就是我这种写法,就是有同学说那那我还是不明白,那我一会儿给你讲4Q99语法,你就知道它跟这种方式就不一样了啊,到时候你就清楚了,就见上啊,来略。啊,再来一个逗号啊略啊行,然后下边看。
13:03
这个SQ92这个语法来实现,哎,Y连接,那SQ992语法,它怎么去搞定这Y连接呢?他说呢,哎,去使用这个加号。咱们刚才说了S92这个语法的特点呢,就是它的规则呢,不复杂啊,它的规则不复杂,就使用加号就行,是什么个思路,我给大家说清楚,先说清楚,大家看咱们这个叫员工表,这个呢是不是叫部门表啊,员工表有107条记录。那么这块呢,部门记录肯定是少了,部门少是吧,但是咱们匹配完以后呢,是不是每一个员工,呃,除了到呃这个换个颜色啊。嗯,除了到到这个位置啊,到这儿的话呢,是106,前面这每一个员工是不是都能匹配上。都没毛病是吧,都能匹配上,但是现在呢,我们要查询所有的,那意味着就最后这个哥们呢,也得能出来,那用搜狗语九二语法怎么去写呢?他的想法呢,是这样子的啊,非常的巧妙啊,这个你看这儿呢,假设是一个人的腿叫左腿是吧。
14:06
那这呢,是不是一个人的右腿啊,那左腿跟右腿你看长度不一样。长度不一样,你说怎么办?人家说说那买裤子的话呢,你就买了一个裤腿长点,一个裤腿短点,或者你就买长的,把那个剪短了。那你这个走路是不是看着还是一瘸一拐的,相亲也有点儿费劲呢?那怎么办啊?哎,最好的办法是不是给你这个右腿这块呢垫点东西啊。对吧?你垫点东西把两条腿减一样高,这不走路起来就正常了吗?那这个思路呢,就诶是我们这里边儿的解决思路,咱们现在呢,这个操作。咱们现在这个操作写到这儿了,相当于咱们左边的这个表的数据是不是多呀。啊,因为我们有107个,你右边呢,这个不够是吧,左边的数据多,希望把左边当中这个不满足的这个数据呢,再查出来,相当于咱们现在这个需求,你注意咱们先清楚这是一个左外连接,诶当然这个这个左外右外不能在这写啊,我得在在这来看,因为我现在把员工表是不是写到左边了呀。
15:06
啊,写到前边了,这是后边了是吧,那写到这边的话呢,这就叫左外了啊,或者你看这块也行,咱这呢是先写的这个员工,这是不是拿员工的这个去匹配它的,所以从这来看,这是一个左外连接啊。再说啊,这是。哎,就是需要使用这个阻碍连接。啊,那哎阻碍连接啊,那怎么做呀,哎在四和九二语法里边,因为你右边这不是缺数据吗?那就右边这块呢,你你就跟人一样,你垫点东西,那我们就在这个位置呢,你整个加号就可以了。这就是咱们所说的思九二语法里边外连接的那格式呢,比较简单,诶原来说这么简单就可以了,来走一把。挂了。挂了在哪挂的呢?嗯,就就在这挂的。哎,这块呢,我想说的点就是什么呀,说了半天,咱们这块呢,强调一下啊什么呀,这个。啊,我我我我这么着一下啊,比较长一点说这个MYSQL啊。
16:04
哎,My circle,它不支持这个,哎,CIRCLEL92语法中的这个外连接的写法。外联那接的这个写法说了半天太浪费感情了是吧?啊,那这块我想给大家强调,就是咱们也不一定非得要局限在MYSQ上是吧,你知道呢,这个circleq呢,是美国这个an SI这个组织呢,他做的一个规范,但是MYSQL这块呢,支持的就不是这么严谨了,他不支持,他不支持不意味着别人不支持来Oracle上。Oracle上啊,咱们这块呢,还是在这个,呃,这个数据库下的这个表里边,这个咱们先跑一下看看select星from employees。然后呢,这个走一把选中执行啊,一共是那107,要记住没问题是吧,然后呢,接着啊,Select行from department。啊,这个呢,我们选中啊执行啊这块一共啊这个27个部门没问题是吧?好然后呢,我CTRLV,我把刚才这个呢给粘过来了。
17:07
在咱们Oracle当中,你看我这整了个加号来走一下。啊,无效的字符啊,在Oracle当中它不认识这个着重号了,来咱们把它去掉,来再选中执行,好大家这时候你看我们是不是就出来了107条记录啊,你看咱们往下去找一下啊,诶,这是不是就是那个哥们儿。他没有部门。那我们这块呢,写个加号就行,那研ID呢,就是咱们Oracle啊,它是支持这个SQL92语法的,咱MYSQL仅仅它不支持而已。啊,他不支持,所以说呢,咱们要想在Oracle当中,哎,在myle当中,想解决刚才这个问题呢,是不是就失败了。哎,失败了,好,那他失败了,那咱就别在这块呢去再讲往左边去加了,那也没有意义了,因为他反正都不支持是吧,那接下来我们这块呢,就把眼眼光呢,是不是看向SQL99语法了。哎,CIRCLE9语法是吧,哎,我们这块呢,说一下CIRCLE99语法中,哎使用哎叫这个join on的这个方式。
18:10
哎,方式实现呢,哎多表的这个查询,那么哎这个这种方式啊,这个也能解决呃外连接的问题。啊,那么MY。啊,是支持此种方式的。那大家知道我这块描述的意思就是人家SQ992语法呢,有Y连接的方式,九九呢也有,但是MYSQ呢,不只是九二,那咱们现在是不是只能把这个目光投向SQ99语法呀。那四个九有语法,你也要记住,它不光是用来解决外连接的,内连接人家也能做,怎么做呀?用join on的方式。那下边呢,咱们就把眼光投向S扣九九语法啊,下边呢,我们就来谈啊,这个S99语法如何实现啊,多表的。
19:05
查询,哎,下边我们来讲这个问题。好,来,咱们看一下这个SQL99语法是如何实现这个多表查询的,那么咱们又得是什么呀,从长计议。啊,同学有点累了啊,这个喝口水啊,喝口水咱们开始开始什么呀,开始咱们讲解这个多表查询的啊,咱们如果说从内容量上来讲呢,咱们算是翻了一篇了啊,上篇完了,咱们开始翻下篇了,叫SQ99语法。啊,为啥呢,叫翻半篇了呀,因为咱们前面讲的这些呢,都还算是叫呃CIRCLEQ92的语法,那你看我们这块说叫见上了是吧,那下边呢,我们看这个circleq纠结语法,那SQ纠语法呢,我们就得从长计议。啊S狗九九语法如何实现多表查询呢?咱们把上边写的那些查询操作呀,我这块呢,再嗯复刻过来。啊,复刻版是吧,听过这个词吧。
20:02
有时候买买一些鞋啊等等的时候叫复刻版是吧,那我们呢,再去实现实现一遍,这个CIRCLE99语法当中使用的叫join on的方式来实现的,好,那我们来做一下,比如说咱们前面做过的说西这个咱们可以理解成西安是这样啊,诶circle。Circle这个九九语法实现,咱们就先都叫一个内连接吧。啊,一会儿呢,咱们再看看这个SQ99语法,它如何实现的这个Y连接。好,先看这个内链接,那内链接的话呢,来写了啊,Select,比如说last name department name是吧,From employees,起个别名,注意这个时候就不要加逗号了,那加逗号呢,就成CIRCLE92语法了,我们这块呢,写的叫John。Join,一个表叫做departments,诶,这是一个表。哎,我们起个名字叫D,然后呢,在这个on当中来填写这个表的连接条件,那是不是叫e.depend ID等于d.dependd啊。
21:07
这呢就是呃,表跟表之间的这个,哎,连接条件用on来表示,就不要写在where当中了啊好的,那么接着嗯,这个写完以后的话呢,其实呢,咱们就算是完事了,那把它选中,当然这块因为我们这俩字段都唯一存在各字表,我就不加那个表明了啊好把它选中呢,一直行,你看是不是106就出来了。没问题是吧,哎,它就出来了,好,这个呢就清楚来,然后呢,咱们再来我们那块做过呢,是不是再又加了一个叫做city啊,就多了一张表,多了一张表怎么去体现呢?那我们就这样来写了,你不是,哎照样一张表加个条件,然后呢,是不是我们再照样一张表叫做locations表叫L了,是不是再加个条件部门的location ID跟这个l.location ID是相等的。啊,CT呢,因为也独自存在这个L表,我也就不加L点了啊好,这时候我们再选中走一下,那是不是就可以了,哎,106。
22:05
没问题是吧,啊,那这个呢是什么意思啊,通过这两个呢,我想给大家强调的就是这呢是一张表,然后呢,我们去哎照按一下哎这个表,然后紧跟着呢来一个啊。哎,然后呢,你要是再去,呃,这个加表的话,是不是再照应一下,再加个啊,你要还有的话呢,是不是再去照应一下。哎,再去加个二就可以了,就跟你说呢,我现在建立一个组织,我这呢是创始人,然后呢,我们加一个人进来了,你先告诉他说你跟哎这个,比如这个人叫A,这个人叫B哈,说你是AA跟B是认识的,然后就来又来了个C这个人on什么呢?就是你看你是跟B认识啊,还是跟C认识啊,来进来的,然后再来了D这个人,哎,你再on一下,你看你是跟这里边的谁认识的,就是你加入的时候呢,你得说明你跟谁认识。啊,加入一个表,你说明是哪个作为连接条件,哎,就这个意思行。哎,那你看是不是确实跟咱们这块写的,就是最后这块写的啥呀,就是这个色Q92跟SOQ9构语九语法来讲呢,就是这个九九语法呢,看能语法感觉更复杂是吧,咱们上面这块是不是逗号一下还在外二里边去写就行,九九呢看着感觉更复杂,但是可读性的话呢,哎,大家你看我们照样一下on一个连接条件,照一下on一个连接签是不是挺清晰的是吧?哎,当然比上面这个看着是像复杂一点。
23:18
哎,这就是他这俩的一个特征啊,哎,他哥俩的这个特征。好,那么这块呢,我们是不是使用这个SQ99语法就实现了这个内连接了呀。清楚吧,哎,我说下就实现了这个内连接了,好那么内连接呢,咱们就说到这儿了,然后下边我们看一看这个SQ99语法如何实现这个外连接。嗯,这块呢,我们说这个,哎不支持是吧。这个大家看笔记的时候会更清楚,好,那我们同样抛出是不是还是这样的一个需求啊,哎,CTRLC。S后九九语法如何实现BY连接?哎,还是这样一个需求,怎么做呀,来。啊,Last name。
24:04
Department name是吧,哎,From。From employees啊,这个我们叫个E,然后呢join一下。D part啊S是吧,这个我们叫D,然后on一下,哎,像我们这种写法的话呢,大家哎,是不是就不容易去丢掉这个连接条件了,因为你写完照紧接着是不是就得写on是吧,那就很难丢掉连接条件了啊挺好的,然后接着的话呢,啊啊E点叫department midd,跟这个D点啊department midd那它俩是相等的。啊,那这种写法的话呢,咱们上面也写了这个呢,叫内连接是吧?啊内连接,那内连接跟外连接区别呢?啊,其实上面这块呢,我们再多说一句啊内连接内连接相当于我们这个前面呢,大家可以再加个单词,就叫做这个inner。啊叫inner,就是这个inner呢,可以省略了啊,你加上的话呢,就是这样子的。啊,这还是106是吧,那现在呢,我们是不是叫Y连接啊,Y连接Y连接,哎,我是不是就叫al join。
25:03
Al着,但准确的来讲,我们这把这个表写到这儿了,是所有员工是不是这个里边数据多,我们希望呢,它出来叫左外连接,左外连接,左外连接那就是啊,Left啊al draw。哎,我们这呢,就是一个哎,左外联,哎,就这样来写left al John,好来就加了一个,呃,两个单词选中一直行107就出来了啊,终于我们解决了这个问题。往下走,哎呀,终于出来了是吧,就他这个哥们儿呢,没有部门,那我们把它呢就查询到了。哎,就这个样子。好,这呢叫左外连接。诶,Left al on,那呃,我们这个left的话呢,呃,它写上的话呢,肯定是个外连接了,对吧,因为内链接不用写左和右了,所以说呢,我们这个aler啊,大家也可以给它省略掉。哎,你看我们选中走一下,嗯,还是是不是107啊,哎,这al呢可以省略掉啊,这个inner呢也可以省略掉啊,就这个意思。
26:06
行,这儿呢叫左外连接,那左外连接清楚之后呢,那顾名思义,我们是不是就可以写一个叫右外连接了呀啊右外连接那UI连接,那你就是把这个呢,CTRLC我们拿过来,你把这个位置是不是改成这个叫right是吧,像我们那会提那个CIRCLEQL92语法一样,就是呃,你要是右边这个表呢,这个数据量多啊,这呢只是把他们满足条件的查出来了,如果还希望呢,把这个右表当中不满足条件的查出来,是不是你在左边补加号就行。那放到咱们这个,哎,SQ92语法中啊,放到咱们这个Oracle中去看的话呢,哎,是不是就这个样子是吧?哎把这个加号呢放在这,这相当于是不是这个右I连接右边多左边是不是补加号,那我们在Oracle当中去执行一把。啊,看看这个结果啊,一百一百二十二条记录,哎,它呢,相当于是,诶看这啊。是不是相当于右边这个部门组啊,但是这个部门里边是不是就没有人呢。
27:02
哎,它是这样一个场景,这是SQL92语法中可以去这个用这个方式去做,其实挺形象的啊,那我觉得挺形象的,那但是呢,这个MYSQL很可惜不支持啊,在咱们生活当中的话呢,哎,你说这是一个人的一条腿,这条腿我们到时候很难见到,说这两条腿长度不一样,但是经常常见的就是这两条腿呢,都不长是吧?哎,所以呢,你是不是平时加的时候呢,就是两边都得垫点东西啊。啊,当时我记得我这个在北航读研究生的时候,我夏普这哥们儿啊,他是那个川大的啊,四川大学数学系的啊,我俩呢,还挺能聊得来,因为都是数学系的这个,哎,他就是这个身高不算太高啊,这个印象很深刻啊,当时研一的时候呢,去谈了一个女朋友。啊是是哪个外国语大学的呀,呃,然后呢,去见人家啊,他这块就从淘宝上呢买了这个那个鞋垫啊,三层鞋垫啊,放到他那鞋里边了,然后呢,呃,这个这个一一周两周之内呢点三层,然后呢,再过了一两周它就变成两层,后来呢就变成一层,再后来呢就不垫了。
28:03
啊,这个套路满满是吧?然后边的女生突然,诶,怎么感觉比原来矮了呢,然后原来就这么高啊,都是套路啊。哎,这个大家有需要的话呢,可以去百度找一找啊,挺好使的。行啊,那这个呃拉回来啊,就是调侃一下,大家也放松放松,这个加号这种方式呢,在MYSQL中不支持啊,那咱们就只能是用这个SQL99语法里边这个left和right的方式了,那我们右外连接,那就是这样子来处理,来选中呢一直行这块呢,你看也是122条记录对吧,那这里边我们看到的情况呢,跟刚才Oracle里边是类似的,哎,就是右边这块呢,你看多。左边这块呢,是有一些弄这个怎么去用咱们实际中的这个场景去解释这个事儿啊。你上边那叫所有员工是吧,下边呢,是不是查询所有的部门,就是员工和部门能匹配的情况下呢,是不是再把这个没有人的部门查到呀。这些部门呢,都没有人。啊,所以呢,我们哎左边呢,得补补补一些这个空的啊,这样的一个情况,好这呢,就是我们说的这个叫,哎是不是叫右外连接啊就搞定了呀。
29:08
没问题是吧,哎,就搞定了,没问题,好,那么接着。哎,咱们如果画这个集合这个图的话呢,大家你看是不是就出现这样的情况了。这呢是咱们这个叫员工表,注意听啊,这呢是不是叫部门表,再坚持一下,坚持一下啊,那么员工表和部门表中间,我们说满足条件的中间这个部分呢,咱们可以理解成是不是叫内连接,咱刚才呢,一共查出来是不是106条记录啊。幺零六点几度对吧?好,那么呃,这个左外连接呢,除了这106这块是不是补了个一,那么右外连接呢,咱们122减去十,呃,106是不是有16啊,相当于这块呢,是有16个啊,这块是一个,好那么又一个新的需求来了,左外右外完了以后,我们有一个是不是叫满外连接啊,我希望能够查出来的结果呢,是123。啊,在这个UI的基础上呢,再把这一条记录呢查出来啊,这呢叫做满外连接对吧。
30:06
满外来连接。哎,满外连接,那这个满外连接,满外连接,哎,这个我们给大家加一个这个带al的吧,让你知道可加可不加是吧,好,那么买卖的也怎么做呀,哎,有同学说这个。脑子立马就活了啊,打开了左外连接,右外连接,满外连接,我是不是就只需要知道满这个单词怎么写就妥妥的了?啊,很聪明是吧?呃,满呢,这个叫for啊,For不就是满了吗?啊,满外连接或者叫全外连接啊,都有不同的叫法,哎,就这样来写。啊,同学说啊,原来如此简单啊,走一把,挂了。嘿,挂了。说不支持。也不支持,诶那这呢,我们就相当于是又得提个点啊,买卖连接呢,在SQ99语法规范里边呢,是就这样来写,但是啊,但是我们说呀,这个my circle啊,不支持啊for。
31:10
哎,我用大写吧,哎,For al John的方式,说白了就是my circlele不支持你这样的去写这个买卖连接,咱们刚才在Oracle里边是讲到了,呃,人家Oracle呢,是不是CIRCLEQ92语法是支持的是吧?那么咱们自然而然的就说,哎人家这个哥们呢,支不支持呃这个呃,这个阻碍连接这个SOQ99的语法呢?很无效的字符啊,还是这个着账号的问题啊,来干掉。在Oracle当中,这个就没有这个着重号了,好咱走一下,哎,这个显示,诶这个是不是107就相当于搜九九语法呢,人家Oracle呢也支持啊,那这个UI连接呢,叫right是吧?哎,走一把。选中。是不是,哎这个看多少条,哎是不是也支持啊,那然后人家这块呢,写个for呢。好,选中。啊,在执行。哎呀,你看人家这个长得这么好,是不是123就出来了,那就相当于Oracle呢,是不是支持这个fall out John的写法呀?
32:06
哎,没有问题啊,同学说说老师你别讲了,这个视频呢,我我也不想看了,我准备这个学Oracle了是吧,别这样啊,这个Oracle还是my circlele呢,各有利弊啊,各有利弊啊,在企业你主要呢,就是看企业选什么了。啊,你要是个外包公司呢,你要是给人家外包项目,你先问清楚说你们数据库想用什么,Oracle还是myle还是其他的啊,你要自己公司的项目的话呢,你得问清楚咱们到底用什么。啊,这个咱们说国内的互联网公司呢,咱主要还是看这个企业里边用什么比例高是吧?呃,Mexicosq的比例还是比较高的啊,这个Oracle的话呢,这个在大型的国企啊,银行证券啊是吧?诶这些场景当中,他们用Oracle呢,用的要多一些,因为毕竟它是一个收费的,这个安全性呢,诶还有这个数据量一旦大了以后呢,它这个调优啊,各方面呢,呃,配套服务会更到位一些,收费的嘛,服务当然也到位了,那这个呢,你要免费的话呢,性能其实还是不错的啊,像MYSQ都已经这个迭代到今今天今天这个程度了,它的性能呢,肯定还是不错的。
33:04
啊呃,他们在这个售后知识方面呢,这个呃各自呢会有一些不同啊,会有些不同行,那么咱们还回过来啊,就是my soq呢不要用,因为这个点呢,大家去选择我们用还是不用它还是得啊屈服于哈这个实际的呃企业的这个场景啊,你说它这个这个这个语法上支持的不好,但是呢,企业里边就有mysle,那你怎么办呢。是这意思吧?哎,好,那我们拉回来啊啊,那不支持这个for John啊,很遗憾。那很遗憾,那我们是不是就得想办法去实现这个满外连接的效果呀?是吧,哎,我们就得实现这个买卖链接的效果,那哎这块的话呢,咱们先让大家呢开开眼,开开什么眼呢?看一张图。看一张图啊,大家你看啊,这张图能不能看得懂。
34:01
哎,能不能看得懂,好看啊,我们呢,哎,内连接是不是你把这里边这个A呢看成是员工表,B呢看成是部门表,部门表是吧,那这个呢,是不是就是内连接啊。对吧,它是内连接,这个呢,是不是相当于咱们叫左外连接吧。左外连接是吧,哎,这个呢,是不是相当于叫右外连接呀。是吧,哎,UI连接没问题,那满外连接呢,是不是就相当于是它呀。哎,这叫买卖链接,你会发现呢,我们要是讲了买卖也只不过呢,是不是讲了这里边的四个箭头,是不是还有这诶三种情况呀。能理解这个就查只是查出来这一条数据,这呢只查这16条数据是吧,这只查这查这一和这16条数据,那这呢一共是有七种照案,就把我们这个以SQL99语法这个照案为例呢,把这所有的这个哎多表查询的这个情况,是不是就全部涵盖在这一张表当中了呀。哎,那咱们呢,诶先把这个for join这种方式,哎,把这个买卖链接搞定了之后,诶我们看看其他这几个呢,该怎么去搞定,那要想搞定它呢,其实我们又得是借助于咱们说的这两个方式。
35:08
是吧,好,那这块呢,我们先把这个S扣九九语法的这个,呃,先说到一定程度了,他知道我们如何去解决这个左歪右外和买卖,只不过呢,MYSQ没有支持这个买卖而已,对吧?啊。行,那再换一个角度啊,再啰嗦一句哈,大家你去看一下咱们这个,呃,官方规范的话,你看这是一个资料,然后咱们找这个W3SCHOOL。然后找这个circle是吧,然后这呢,就是咱们这个W3SCHOOL,大家或者可以理解成是ini啊,这个组织呢,做的这个circle的规范,你看在这个左边里边呢,是不是就有这个叫for join呢。哎,就是这个for,而且呢,还给了我的案例呢,就是咱们刚才写的这种方式,很遗憾呢,就是my circle呢,哎,不支持这个for而已。啊,这个大家注意一下。
我来说两句