00:00
那么由我们一个迪卡耳机的错误呢,引出了这个多板的一个查询的正确的写法啊,或者我们也成为呢,叫做关联查询,哎,那么这里边有一些细节啊,咱们就一点点给大家都讲到了,哎,那么是不是关于多表查询到此呢,基本上也就差不多了呢,哎,其实还没有,那我们现在呢,只是相当于从一个具体的问题出发呢,这个把这个问题呢做了一个解决,对吧?那接下来的话呢,我们就要从这个宏观上呢,来进行一个多半查询的一个说明啊这里边呢,呃,这个习惯上讲课的时候呢,我来这样去说一下,哎,大家感受一下啊,就是咱们上边这个写法由一个问题引入的啊,提出问题,解决问题啊,就是这样子的啊,提出问题。这个一,然后接着我们是解决问题一。然后接着的话呢,我们可能又会去提出啊问题二,然后接着呢,我们去叫解决问题二。呃,这种方式的话呢,呃,我习惯起个名字啊,叫做这种演绎式的啊。
01:01
呃,演绎式的这个要是从教学的角度来讲呢,那就是演绎式的教学,那这种方式呢,其实呃比较大家容易被接受,就是层层的跟讲故事一样啊深入进去了,那大家平时平时其实学习的时候,或者说呢,咱们这个科学,这个自然科学也讲我们在往前演进的,呃,就是往前推进的时候呢,其实很多时候也都是这种演绎式的这种方式,那我们出现出现一个问题,或者出现一个现象,我们需要呢,去找这种这个现象的一种解释方式啊,或者说这个解决方式,然后接下来呢,又会面对下一个问题依次递进,大家学习的时候呢,也是如此,对吧,那么到一定程度之后呢,我们就可以呢,是不是从一个全貌上去看这个相应的这些细节了,我们把它称为呢,叫做归纳式的,那归纳式的就是由总啊到这个分是吧,这样的一个过程,那呃,一个东西分几步啊,一个东西呢,分几个分类呢,分成什么样子的,这个都属于这个归纳式的,那么在授课当中,或者说咱们这个,呃,这个很多时候呢,大家上中学小学也是一样。
02:02
说这个中国的教育有点类似于填鸭式的,就是我们可能忽略了这种演绎的过程啊,更多的是把这个东西呢,就直接给到大家,让大家呢去记去背啊,就是感觉比较无趣一些,但是归纳式的毫无疑问它的效率呢是比较高的,对吧,而这种演绎式的话呢,是容易提起兴趣的,当然很多时候呢,他可能不如这种工纳式呢来的这个呃,简单直接啊。那我们相当于刚才上面有一个问题的引入呢,就类似于这个叫演绎式的了,我们最后呢,相当于呃,解决了这个多宝的一个查询问题,然后接下来的话呢,我们从这个归纳式的角度啊,结合着来去说明咱们这个多表查询,从一个宏观的角度上来看,它应该是什么样子的,好这块呢,我们引入呢,相当于是这个呃,咱们叫第七个点,叫做多表查询的一个分类。哎,多边。哎,查询。它的一个这个分类啊,这个多表查询和分类呢,我从几个不同的角度呢,来进行一个说明。
03:01
哎,多半查询几个不同的角度,诶,角度一。哎,角度一,嗯,角度一是什么呢?哎,我这块呢,直接来写了,我们可以把它分类成叫做。啊,这块呢,啊,这个不用管管它啊没事,这个角度一的话呢,我们可以把它分成呢,叫做哎等值连接啊和这个叫非等值连接。哎,等值连接和非等值连接,这个针对的呢,就是咱们这叫连接条件来说的啊,针对这个连接条件来说的,那我们上边写的这些啊,你像我们写的是不是都是谁等于谁对吧,那个这儿呢,就是典型的这种叫等值连接的场景,那除此之外呢,其实还有非等值连接的场景,那我们一会儿再说,那么这个角度二。这个角段呢,我们分成了叫什么呀,叫做自连接和啊叫非啊自连接。这个什么叫自连接呢?一会儿我们来解释啊,这个自连接呢,其实就跟咱们,哎那会儿讲的,这叫自我引用呢,是对应的。
04:08
啊,自我引用是对应的,这叫自连接,非自连接,咱们上面写的这些其实都是非自连接,好接着我们再去看角度三,这个角度三的话呢,我们分成叫内连接。那这个VS是吧,叫做外连接啊,这个就不是非内连接了啊,非内连接你就叫做这个外连接就可以了,这个外连接的话呢,相对来说比较难理解一些,咱们上边写的这些呢,其实都是内链接啊,为什么叫内链接,咱们一会儿来展开说明,这儿呢,我是从三个不同的角度呢,来对我们这个多表查询呢进行的分类。这块呢,大家倒不用刻意的说说,我们写了一个多表查询了,然后非得看一看从不同的角度它是什么,这个倒没必要了,在开发的时候是吧,只不过呢,我这样列出来一个目的是什么呀?诶,我是希望呢,让大家能够感受到咱们这个多表查询啊,它有不同的这种实现这个连接的这个时候的一些场景,就是让大家能够比较完整的看到咱们这个连接条件呢,有多种不同的情况,哎,这个呢,是我们讲这个分类的一个目的。
05:11
就跟说呢,咱们说人分成什么样类别啊,咱们说按照这个所处的位置分成亚洲人这个这个欧洲人,非洲人美洲人是吧,然后呢,从这个肤色上来讲,分成白种人这个黄种人黑种人,这个怎么一习惯,咱们老是习惯上先说白种人,后说黄种人,后说黑种人,这样很不好是吧?哎,我们呃按肤色来分啊,分成黄种人黑种人啊和这个其他是吧。这样啊,就是还有其他的一些分,从这个性别上来分,分成男人女人和啊这个其他是吧,诶这个就不同的这个分类方式,那这个分完之后呢,你一看就知道哦,原来人还有这么多讲究啊,那其实就主要目的呢,是为了让大家能够看到更加丰富的这种连接条件的场景而已啊哎,是这样一个目的,行,那这个清楚以后呢,咱们接下来,接下来的话呢,呃,我就那这个从这个不同的角度咱们去看了啊,首先咱们就来分析的这个角度一了。
06:06
好,角度一,那这块我就来一个减号吧,减号我就来一个叫7.1 7.1,咱们来看这个等值连接和这个哎,非等值连接,这样呢,其实顾名思义,我们的连接条件如果是谁等于谁的,那自然而然的就叫做等值连接,如果呢,是出现了一种不等的这种关系了啊,当然不等可能是大于,可能小于啊,不一定说就非得是不等于,哎,只要是不是这个等号的这个都行。啊,我说的不等于,不是说非得是这个啊,你大于小于也算这个非等值的,只要是这个刚才说的这种场景呢,都叫非等值连接,咱们前面写的呢,都是等值连接,所以呢,我就不用多啰嗦了,咱们下边呢,是不是写一个非等值连接的例子呀。啊,非等值连接的这个例子DIG呢,就是大家以后呢,再去写这个多表查询的时候呢,你这个连接条件呢,没有说非得是等的啊,啊那这里边呢,我们想看一个东西啊,我这有个表叫做job gras来咱们先查询一下。
07:05
Select星from job grade诶grade是吧,哎这样一个表选中选中啊执行好大家看,那这时候呢,我们看到了。这时候呢,我们看到了是不是这一张表,这张表呢,你看它有ABCDEF是不是这样的一些这个条目,然后呢,诶这其实相当于他们的等级,不同的等级呢,你看我们对应的这个工资啊,是有一个范围的。比如这个工资范围,它是在这个6000~9999之间,它就属于属于这个叫C档。啊,那D档的话呢,就是1万到14999啊,有点像公司里边都分这个评级一样是吧,就是这个道理,好,那现在我们的查询是什么呀,我想查看一下每一个员工,哎,他的这个姓名,工资和他的grade level。哎,那这个时候呢,它其实就是一个非等值连接,看啊我select咱们的姓名last name这个工资叫salary,还有他的这个等级是不是叫grade。
08:06
Level是吧?Grade level,那这样的三个字段,这三个字段里边,我们前两个字段呢,是不是来自于我们这个员工表,然后后边这个字段呢,来自于咱们这个叫job。Grade是不是这张表我就起个叫勾了啊行,那接着呢,是不是一定要这个连接条件了,这个时候连接条件你想我们是不是就不会说从这个员工里边,从这个表里边我们找到他的salary,你想跟我们这个表里边哪个去相等,那等不了啊对吧,等不了啊,那比如说啊,像凡是遇到这种场景呢,大家你就可以举例子啊,比如有个员工呢,是5000块钱。那5000块钱应该是几档啊,你自己看啊,5000块钱的应该是B档。哎,那你相当于你自己要是手动的去这个做的话呢,你就知道它是B,那我问你,你怎么知道它是B。你是不是相当于是找到它在某一个这个范围内了,而在某一个范围内的那个条目数对应的恰好就是B啊。
09:02
OK,那怎么写啊,那就是E的salary,哎,我就叫哎,Between。啊,Between勾点叫lowest salary and,哎,勾点highest salary,咱们说了,这个下界写到between跟and之间,And后边写那个上界。我这用的是比and,大家你也可以写成说一点,Salary是大,这个我再写一个吧,一一会再写啊,咱们先把这个跑了,那我这样呢,其实就写完了,咱们执行一下,当然你会发现呢,是不是每个员工他的工资和对应的等级啊,是不是就都罗列出来了,是吧,咱们说建议呢,你到时候把这个里边的每个字段啊,虽然说它在各自的表中都是唯一的,但是建议呢,你是不是也加上这个表明。OK啊。行,就这样写,那一共是107条记录啊,你也可以呢,把这个注释掉啊,像我们明确一点,它是一个,呃,这个不等于的情况,那就是一的salary呢,是不是大于等于,咱们这个比between的本身也带边界嘛,那它。
10:00
啊,然后and,咱们的1.salary啊,它还得小于等于是不是这个。啊,CTRLCCTRLV啊,这个我们分一下,就这两个呢都可以,嗯,107条记录啊,这个呢,同样道理,我们走一下啊,一样的道理,行就都查出来了,107条记录,那相应的你你要希望再去order by,那你就order by啊,我这就省略了,这呢就是我们说的这叫非等值连接。OK吧?哎,说清楚了啊,等值连接非等值连接好,那这个说完之后,咱们接着呢,再说这个7.2 7.2呢,这块叫自连接和非自连接。自连接和非自连接,咱们前面啊,我说写的这些啊,都叫做非自连接。那就是说我们这里边儿涉及到这个表都是比如说员工表和列表,这是两个不同的表啊,你再加个表也是不同的表,是不同的表之间实现的一个连接操作了,那如果说我们是这个表自己跟自己连呢,那么就是叫自连接。
11:02
其实很好理解啊,你想想什么叫自恋?自恋。自恋是不是就自己喜欢自己啊啊什么叫自律呢啊,自律自己呢,对自己呢,就是严格要求啊,律律就是一些规则制度是吧,一些这个纲啊零啥的啊,这都是啊。哎,行,那自连接呢,就是自己连接自己呗,啊刚才我们也解释了,对应的就是咱们这个表中记录中间的这种自我引用的一种关系啊,什么叫自我引用呢?这是咱们也举例子了,比如说员工有个编号,它有个主管编号,主管编号呢,其实也是公司的一个员工嘛,那就是这样个情情况,还跟咱们这呢,其实还确实是对应的,那你看一下咱们这个员工表,把select清from。Employees。好,选中走一把,那大家看咱们每一个员工他诶倒倒不是说非得是真每一个了啊,像第一个人员工是公司老大,那那就没有了啊,除了他之外,每一个员工的话呢,是不是都会有对应的一个,你看我们这个105这个人对应着一个叫manager ID,就相当于他的这个上级是谁,那么这个上级是不是也一定是公司的一份子啊,所以上级这个人呢,一定也会有一个。
12:10
那他也会有一个employee ID,那就意味着105他的这个老板呢,就是这个人。哎,就是他啊,他的这个管理者好,那下边呢,我们想做一个什么样的查询,注意看啊,我想查询,嗯说呢。练习。啊,练习我们想查询这个,呃,员工这个ID啊,这个员工姓名。呃,员工姓名,那哎及其管理者的。及其。管理者的这个ID啊,和他姓名很明确,那就比如说我们这个105来讲105啊,我就希望呢,你显示叫105,呃叫叫,比如说叫这个拉斯内姆叫他了,然后以及他的管理者叫103,还有103的诶这个名啊,把它呢列到一行上去,每个员工都列一下。
13:06
那我们看看该怎么做啊。啊,这里边你当然知道是不是有个员工公司老大他的管理者就没有了是吧?哎,这个你注意一下,好,那这块你看我们去写啊select,我们想查询是员工的ID和这个员工的last name啊,管理者的,那其实这管理者的是不是人家也是一个员工吧,然后管理者自己是不是也有一个last name啊好,这时候大家再接着看我们此时的这些字段呢,是不是都来自于咱们的这个员工表是吧?教你那是不是意味着我们这个就写一遍呀,其实还不是,大家可以这样的去体会。你看我这么着,我呢,把这个表咱们盯一下,哎,我放到这儿啊,然后我再来一份。啊,再定下再打一份,上面这个咱们就先不管了,大家就看这个,那我呢,其实是这个意思,本身呢,我都是从这一个表呢,给他拿下来的,做了两份,其实还是一个表,就在咱们物理磁盘上呢,就永远只有一个employee表,对吧?但是我们在这个逻辑层面呢,咱们可以把这个表呢,看作是叫员工,把这个呢,比如叫我捡起来叫manager啊,叫管理者了,然后员工表的话呢,我们是不是想找到他的employd和他的这个lastname是吧,管理者的话呢,也想找他的employ和他的last,那问这两个关联条件是什么?
14:24
管理条件呢,是不是就我们刚才看的这个了,就是你这张表里边的manage ID应该跟我们这张表的employd,它俩得是一个等的关系啊。你看对吧,哎,他俩得是个等的关系,OK,行,那我们这块怎么去写,心里就有数了,所以我们from,我们先让这个呢当员工,然后呢,逗号一下啊,来一个employees,我写个MGRR,让他呢当管理者,那么连接条件呢,就是员工的脑子要清楚啊,Major ID是不是和我们管理者的employee ID他俩得相等。
15:02
它俩得相等对吧,好洗完之后呢,感觉很happy,咔,就直行一直行挂了。这个错误心呢也很清楚,就是你没有说明这些字段到底里来自于哪张表,是不是就按B格S了啊,不明确了是吧?好,我们是员工表里的employed啊,员工自己这个表里的他的这个lastname,哎,还有人家管理者的,哎,是不是employed和管理者的lastname。哎,这样子好,我们选中执行一把,诶106出来了,哎,为什么是106啊。诶注意咱们是不是公司老大,没有管理者了,他就是公司的老大了,他没有管理者了,他没有出来啊,他没有出来。106条记录行这呢,就是咱们,哎这道题目啊,这样的一个情况。哎,这呢,我们称为呢,叫做自连接啊,自己连接自己。啊,自己连接自己啊,这个我们在这再说明一下啊,自连接的例子。
16:01
好,那么咱们这个角度一和角度二呢,哎,我就写完了啊,咱们分别给大家去举了这个非等值连接和这个自连接的例子,以后呢,大家根据实际情况啊,你看看是呃,应该是什么样子的,别这块没见过世面是吧,你看这个,诶,这是连接条件吗?哎,懵了。啊得,咱得说得自己得见过大世面啊,这个都得有这样的场景,OK。好,那么这两个说完之后呢,咱们接下来呢,再来看这个内连接和外连接,这俩呢,是一个硬骨头啊。
我来说两句