00:01
呃,接下来呢,咱们来看这么一个新的需求啊,刚才把这个子查询给大家都介绍完了,接下来看。如何同?从这两张表中获得数据,获得什么数据?获得这样的数据?大家看啊。这个列,这个列哪来的,是不是这个列来的。好,这个练呢。这个列是这个科目啊,就这列来的。然后这个是分数这个列来的。那么也就是说。下边的这个结果就是咱们最重要的这个目目标。它整个的结果是从哪儿来的呢?是从这两张表中组合出来的,对吧。这个表出一列,这个表出两列。把这三个列合成一个整体,就是我要的这个结果了。哎,这就是我要的这个结果,那么这样的一个过程,咱们应该怎么去做呢?
01:02
应该通过。表连接查询来做。因为现在咱们要的这个结果,它并不是一张表出来的,它是由两张表。甚至三张表、四张表、五张表共同来完成查询,才能得到这么个结果,那这个过程就叫表连接查询。说白了,多个表形成一个结果集。就是多表查询,多表查询啊好,这个多表查询呢,又分为内连接和外连接两种。内连接和外连接两种。那么什么是内连接是咱们用的最多的啊,用的最多的。所以一定要把内链接搞定,这两种呢,我也会给大家讲一些实例哈,咱们先看内链接。什么叫内连接呢?它是用。比较运算符,根据两个表中通配的,就这句话,其实读不读没啥用,读也读不明白哈,直接看案例,看案例。
02:04
这有一个student表这一个分数。对吧,然后他两张表也组合形成了一个成绩的成绩单。大家看。这个name列是不是这个列来了。这个列来的,然后科目列和什么列。分数列吧。这两张表合成了一个结果,合成了一个结果,那么这两张表它到底是通过什么样的规则?他们合到一起去的呢,是通过。这个ID看到了。对吧,你看啊。这边看。东邪编号是一,那么在这张表中,这个一代表的是不是东邪啊?那么这两个二表示的谁呢?是不是吸毒啊,因为二在这儿呢。对吧。然后最后一个男地。南地是吧,是不是三号啊。
03:01
三号的话是不是就是南地呀。所以组合成的话,你看这一个东邪,两个西毒,两个南地。所以说,看这两张表,想合在一起,并不是说乱七八糟的一盒,而是一定要找到他们之间的这样的一个。关系。一定要找到这样的一个关系,好吧。没有这个关系,就不是多表连查多表查询啊,注意了。把这个内连接的语句啊。语句,这个语法规则一会儿咱们再说,看我写就好了。直接把这个。转过来。直接看需求。先看第一个。查看员工编号。姓名。所在部门。所在部门。来咱们这边观察一下哈,这个所在部门,其实我要求显示的就是部门的。
04:06
名称。就是销售部也好,什么部门也好,把名给我选出来。那咱们员工表中有部门名称吗?找瞅一瞅啊,员工。That。他这个员工表里边儿是不是没有部门名啊,就是说他只有一个部门的编号,说50号部门,那具体50号部门是什么部门啊。你得上另一张表里找去。这张表就叫做。部门表,OK。找来来,打开50号部门是什么部门?是不是就知道是管理部啊。对吧,他是管理部。那这两张表。我知道了。你们要的这个结果,要的这个结果是不是就是来自于这两张表的合起来啊。
05:00
所以诶,我上来就写吧。这块呢,我写一个中文名啊,让大家看的清楚一点。Slack员工编号。是不是ID啊?姓名呢,这个姓名咱们就用中文那个吧。中文那个是什么?Student name?整岔劈了是吧。Last name,诶,Last name是英文的吧?是中文的,好像叫first吧。是吧,咱用first这个好吧。好,这个名称有了,然后呢,部门名称。部门名称。诶,这个部门名称在你看啊,我写的这个ID和first name,他们隶属于是不是员工表啊,是SEM啊。而现在这个部门名称来自于哪儿?是不是s de PT这张表啊?哎,那么在这张表中,这个部门名叫啥?来瞅一眼。
06:01
这呢?出门表叫什么?是不是就叫name,这个列就叫name啊,好嘞,那咱就写在这儿啊,它就叫name。OK。然后后边跟的是不是来自于什么什么表了。前两个来自于员工表。写上。然后内幕来自于员工表,表和表之间逗号隔开。OK。好了,来。那么这样的话,你看这两个列来自于这个列来自于它,好像我这个表连接写的没什么问题了。其实挺好的是吧,一直行他是报错的,首先这个错要搞清楚。读一遍啊,未明确的定义列啥意思?是这样的啊看。ID列。眼不是这个。
07:03
员工表中。是不是员工编号就ID啊?部门表中。部门编号是不是也叫ID啊?然后你这样来自于两张表,他就开始懵逼了,到底这个ID是哪?是他呢?还是他呢?对吧。哎,他就不知道了,你这个ID这两张表都有,我就不知道我属于谁。其实咱们知道他属于谁呀。是不是叫员工的呀。那么你必须它既然有同名那个列,你必须用表明来区分,有点类似于什么呀。Java中如果出现了一个类,咱们怎么处区别区别这个类呢?是不是用包名啊,圆的差三角形的啊,是这意思,用包名来区分,咱们这个用表名。两张表都有ID指名表名。员工的。
08:01
不行了吗?点OK,就是点。Java是吧?走,你再执行,哎,好了,结果出来了,但是结果对不对呢,你先看数量,我先不往下滚。咋可能呢?咱查这个东西啊,你再读一遍员工编号,姓名以及所在部门,说白了其实最多多少条。是不是跟员工是一样的。多少个员工多少条吧,有25个员工,你怎么干出来俩300条呢?哎,它是这样的啊,他是这样的,这样大家这么看一眼。员工表中多少条?25条吧。部分表中多少条?12条25乘12。多少啊?是不是300啊,二五一十二一二得二进一个吗?是不是进一个二加是不是300啊。哎,嗯。
09:00
300条是吧,其实这个300条来自于是25乘12,哎,为什么会25乘12呢?是这样的啊。啊,我就不挨个去画了,我给大家打个比方啊,首先咱们的这张表中,比如说有1233个员工。对吧,这个部门表中呢,假设有。三个部门。好吧,三个部门,那么正常来说呢,一号员工A部门,二号员工B部门,三号员工C部门,所以说整个的结果是不是就是三条啊。然而现在他会怎么查呢?他这么查?这样查询它就会这样的一个规则,一号部门匹配。一号一不是员工,一号员工匹配A,部门一号员工匹配B,匹配C好三条。二号A2B。22C3条。3A3B3C3条,所以最终的结果几条啊?是不是九条啊。这个九条哪来的,说白了是不是就是三乘三啊?
10:02
明白这300条哪来的了吗?这个300条咋来的?正是因为你胡乱的让这两张表作为了一个排列的一个组合,而并没有说他们之间的关系,所以它返回的就是一个乘积。这个乘积。那么这个乘积啊。叫做。笛卡尔基。笛卡尔机。笛卡尔机就是。返回两张表。所有匹配的结果。记住了,关键点是所有。所有的匹配的结果。那这样的查询有意义吗?没有任何意义啊。任何一。所以。所以。表的多表查询。哎。
11:00
缩表。查询。辟邪。B写。关联条件。关联。什么叫关联条件呢?比如说这个看好了啊。关联条件。就是说这么写的。卡门隶属于50号部门。然后我就拿着这个50上部门中找五十五十五十五十,诶我就知道了,原来卡门是管理的。所以这个表卡门他用50和管理。这个表中的50做相等判断,产生了一条数据,OK,这才是真正的结果。而中间的这个50等50知道啥意思吧。
12:03
是那个表的部门编号等于这个表的ID,所以是50~50 OK。就是这两张表必须拿出一人,拿出一列来,咱们得做匹配是吧?好嘞,那这个怎么写。怎么写后边B跟where。多表查询必跟条件。你看这个表在这儿,这个表在这儿,他俩是不是得关联到一起啊。对吧,我拉着你的手,你拉着我的手是吧。下得关联一下。那这个外边这个太长了,我在这回个车啊。咋写呢?其实就是。找关联怎么找关联,就写着这个模板啊,指定就是A表的。的啥等于B表的。的。你就这么找吧。
13:00
A表和B表它俩之间哪个列相等,你就找出来。咱来找一下哈,其实已经刚才也看到了。他俩的关联条件就是说这些员工都有部门编号。对吧,写上写上。员工表的。部门编号。是不是PTD啊。写在这儿。员工表的。的。部门。OK,那么拿这个列等于谁去等于部门表的什么列?是IDE。部门表示ID点好写上。那就是。呃,部门表的ID。好了,这才写完了。搞上一共。这就对了。随便来一个卡门是管理部是吧?
14:05
一号管理员。好,这就是表关联查询,表关联查询。使用的条件是必须得找到的啊。好,咱们再来看下一个。一个来查,他说查找部门啊,部门编号以及部门所负责的区域。负责的区域。啥意思呢,这个之前没有涉及过啊,看一下。这个是所有的部门吧。大家会发现我的个天呐,怎么这么多运营部啊?这个这么多运营部啥意思呢。后边这个列,看后边这个列。后边这个列。啊。这个后边这个列值就不一样了。你看哎,这啥意思啊,这叫region ID。好,有没有跟reason相关的表呢?看到了吗?
15:00
好,记住了啊。运营有12345个运营是吧?来我拿这个ID上这张表中看看12345啥意思,好知道啥意思了。为啥12345为啥那么多运营是不是分区域啊?对吧。哎,北美的运营南美的运营亚洲的运营欧洲的什么什么的是吧。所以这两张表知道他俩靠什么关联了吧?哎,靠的就是所属的区域ID。OK,把这两张表写出来。查询部门编号是吗?部分编号。这个这个。DEP,等会。不是第一批ID。瞅一眼部门表的部门编号是什么?就是ID是吧。查询ID。查询ID,咱把这个名称也给写出来吧。呃,部门的名称叫什么name?然后接下来我要查的并不是ID了,我要知道这个金融是哪个部门的,哪个区域的金融是吧。
16:06
所以这个名称来区域表。是不是也叫内?他也叫内逗号内。来自于两张表写上,一个是dept表,一个是。区域表。OK。好,写他俩的关联条件。在写关联条件之前。懵逼了。俩内幕,我天呐,我是谁?我在哪啊?这个的内幕是谁的内幕啊?是部门的内幕吧?所以把部门表放在它前面是吧。这样OK。其实这块呢,也可以简单的省略一下,这么高啊,看清了啊。接下来我要做的操作是以后经常用到的。这个表名太长,以后真正的项目中表名会估计好长。那我每次用这个表名去点很麻烦,所以给这个表啊起个别名。
17:01
逗号隔开。Sgpt表我就叫得表或者B表啊。好,S锐表,我就叫R表。好了吧,那么以后这个B就代表的就是部门,所以前面如果是部门的名称的话,我直接用。B点。看清了吧?那这个内幕是什么的内幕啊。是不是reason呢,是不是就R的呀,所以这块用r.name。OK。现在执行。通过诶。ID,有ID出现了,这ID应该是谁的呀?应该是部门的这个ID吧,所以是部门的啊部门的。那就是。D的ID。执行通过。但是现在又又产生了啥呀。笛卡尔机是吧。OK,条件条件的话就是。哎,D的啥等于R的。
18:04
对吧。找它俩的这个相等的这个关联条件来瞅一眼。那么现在是部门表。想找到我这个运营部隶属于什么大洲什么区,是为了拿这个ID啊。对吧,拿这个ID。看写上啊,这是D表中的。IDOK,写上啊D表中的region。ID。等于R表的什么列呢?拿这个列上R表里边找来了。是不是I就是ID啊。R表的。一共多少个部门来着?12。这个是我要的这个结果。这就是我要的结果。然后还有一点小小的补充是什么呢?嗯,大家在这个写的时候,D的name和R的name,它这块显示的时候,它显示的是。
19:05
会帮你自动重命名,看到了吧。内或者说内杠一是吗。啊,如果说你想,哎,我不想这个不行,我我看不明白。起个名,你可以给它起个名啊,就是在它后边是起名啊。起名也行啊啊,通常这块的话,想起名的话,你自己起什么名都行,但是我咱们看的时候可以起这中文是吧,但是在为了方便以后操作这块呢,最好还是用英文。这个里,比如说叫他就叫D内,后边这个R点内就叫r name。你这样一执行的话。OK,是不是就看到了。这是这个语句,这个语句。啊,刚接触肯定是比较生是吧,比较生对大家呢,还是好好琢磨琢磨。呃,先写一遍啊,先写一遍咱再往下说。
我来说两句