00:01
接着我们开始学习第四节,第四节啊叫多表查询,还是落到这个查询这了,所以说我们前六节啊讲的都是查询,多表查询涉及到了多个表。大家还记不记得我们在讲完Oracle安装以后啊,给大家发了几张数据文,数据文件是吧,让大家依次加到数据库当中,这三个文件当中啊,就有好多个表。好多个表,那么最后呢,我们能够常用的有几个表,我这里生成了一个Excel,那么这里边儿呢,大家能够清晰的看出来几个表之间的关系。前几节我们较常使用的叫employ列表,当然还有叫department,这个表叫部门表,这个叫员工表。那么除此之外,常用的像job Grace这个表,嗯,就是工作的一个相要分级的一个表,还有jobs这个表,还有一个location的表,就是位置。
01:03
那么这几张表啊,实际上跟我们jar当中对应的一个一个类是非常相似的,大家你回忆一下,回忆一下我们jar当中讲,我们说哎,如果说一个东西,比如说人跟人相关的哈,像人的姓名啊,身高啊,体重啊,呃,这个呃,甚至说这个呃,这个人他的专业啊等等他的技能啊,我们都把它封装到叫person这样一个类中。我们这里也是一样的,只要是跟员工相关的,像员工的ID、姓名、email phone number、电话号码等等这样的一些信息,我都封装在employees这个表中,类似于我们Java里边的employees类,对吧?那么凡是跟你这个部门相关的。向部门的ID,部门的哎内,哎,还有说哎,你这个部门到底是在哪个位置,我们都给它封装在叫dependent这个表里,同样的道理还有location这个表,那么这几个表里边,它们相互之间是有关系的。
02:11
哎,刚才说哈,诶像deploy表里边,Department跟department表里的,哎,Department它俩说白了,嗯,哎都是名字一样,类型一样,哎很多这个信息真正你存储的话也都是一样的,也就说每一个员工的department ID。他的一个部门的ID号,那一定在这个department这个表里边儿找你对应的这个ID一定也有对吧。那我们不会说把这些所有的这些人的信息全部生成一张大表,那太麻烦了,太繁琐了,我们也采用这个叫有点叫分类的思想一样,哎,Java也是一个人类,我们从没有说把Java的这个实现一个项目,这个项目所有的这个东西都写到一个类。是吧,那太太繁琐了,改起来也不好改,我们讲我们这个,所以才讲这叫面向对象是吧,我们把这个建很多对象啊,对象呢,都有对应的类。
03:08
啊,有很多类。哎,这是一种思想啊,然后大家你能够体会一下,那么这一节呢,我们就来实现多表的一个查询。多表的一个查询啥意思呢?比如说我现在想查询一个,哎,某一个员工的他的ID号,他名字,他的部门ID,我不光想知道他的部门ID,我要想知道你这个部门的名字叫什么,那不就涉及到了两个表吗?对吧?这就是我们这一节要带领大家学习的等级的目标,使用等值和不等值的连接,在select的子句中查询啊语义中查询多个表的数据,使用自连接,使用外连接加了四个红线,这四个红线就是我们这一章要给大家说清楚的四个概念。你也要会通过这章的学习啊,你要会这四种连接。
04:02
那么我们一位来说。刚才也提到这样一个事了,现在呢,我想查询ID department ID以及department name合成在一个查询结果中,这个怎么来写啊,我们实现一下。这呢,大家打开。Circle。开一个命令,嗯,窗口,那么这里边我们想实现这样一个连接,Select谁呀,Deploy ID,哎,还有叫哎,Department ID department z,我们是不是就想输出这样几列啊?那么这样几列对应的都在哪个表中?我们说一个是在employ表,另一个哎,Department这个表根号。
05:09
那我们看一看,这样的话,能不能把我们这些员工的这几个信息都给他输出出来,来个回车。那这里有个指明说为明确定义列,我们一会儿还会来说这个事儿,他想描述的这个概念是什么意思?像employ ID,它是不是就是这个表中的呀?哎,它呢就是这个表中的,而这一列呢,既在这个表中有,又在这个表中有,你得告诉我这一列是输出的哪个,虽然说他俩得他俩他俩都有是吧,或者说你用哪个都行,但是你必须得指一个。或者我们写完整点应该是这样子的啊。CTRLCCTRLV点。行,我们看一下能不能把这107条记录给他都输出出来。
06:03
貌似这个程序。停不下来是吧,107点应该很快就输出来,为什么会这样?我们先等一等看看它。想说明个什么事哈,2889。2000多条记录,不应该呀。我们只有107个人是吧,我们刚才不是之前都老是做这个事吗。这不就107条记录结果,我只是想在这里边是不是后边加一个department name就完事了,你怎么干出2000多条?In。我们看一下这个事儿啊。Select department ID department name,这是不是我们department这个表里边儿,我看看27条。
07:06
那么2889,大家算一下,107乘以27。是正好是2889啊。然后我们看一下我们这个这个结果也行,你看看。这是不同的D、它竟然怎么都在同一个部门里?这个错误大家能看明白了吧?相当于什么呀。是不是把每一个这个人的信息分别给不同的呃,Department name去匹配了呀?哎,相当于这有107条,每一条跟这里边有27条记录结果107乘以二十七二八八九,这个结果是错的,显然是错的,对吧?那这个错误的方式,我们给它起个名叫做笛卡尔吉的错误。
08:00
笛卡尔基素,什么叫第二基素?就是我们刚才演示的,本来就是应该一行对这边的一行,但是呢,却将这左表当中的一行跟右表中的每一行都给对应起来了,原因呢,就是因为我们没有加过滤条件,没有加where。没有加盖,来我们看下这个错误啊,当你省略连接条件的时候,或者连接条件无效的时候。啊,或者说最后你产生效果也是将所有的行情互相连接了,那么它就会导致D卡尔这个错误,为了避免这个错误呢,我们得加V,对外我们都已经讲过了啊,那么where怎么来理解啊。我们先来操作一下,一写大家就明白了。这是我们刚才写的这样一个例子,2889条记录,你让这两个表本身它俩之间是没有什么明确的关系,或者说你从你这个代码当中根本看不出来两者有啥关系啊。
09:00
对吧,那怎么就让它产生关系了,你不就是说这个表的叫department ID是不是应该给你后边这个表点。这个信息他俩得等啊,哎,左边有个叫张三在100号部门,是不是应该是正好找这个100号部门的地,他们那面。对吧,需要加上这样一个连接条件来避免出现抵抗级的错误。这个低卡啊,哎。额外说一句,它是一个,你先看这个啊,106条记录正常应该是107条是吧,这样107条,那那条是什么原因造成的呀。所以我们一会儿就给大家讲那个呢,哎,我们那个这这呢,现在我们叫内链接,一会儿那个一对应外链接,我们说诶那个人为什么没有,原因是啥?大家还记不记得上一节我们讲了一个有一个那个grant那个人他是不是没有部门啊。
10:07
正因为他没有部门,所以我是不是就找不到你对应的右边的那个部门的内呀,既然找不到内幕,那相当于哎,没有部门的那个人,他就不满足你这个外二条件吧,因为他不满足这个条件,所以这个把它一剔除就是106条。记录啊。少一个,一会儿我们再结合外连接说明一下。这个事,哎,刚才说这个笛卡尔是吧,哎,笛卡尔是一个数学家啊,哎,像我们这个大家,你从上初中开始学这个坐标系,哎,一个横坐标,一个纵坐标,哎,这个坐标系全名呢,就叫做笛卡尔及,哎,笛卡尔坐标系,哎,是笛卡尔这个数学家发明的啊,非常厉害的一个人,嗯。嗯,正是因为有坐标系哈,大家可能不学数学,我原来这个大学专修的是哎,数学系。
11:01
哎,正是因为有了这个坐标系这样一个东西,我们才能够是不是将这个几何。啊,能够将几何代数化。啊,或者反过来讲,能够将代数集何化啊,就是借助于坐标系列的东西啊,基本上代数和几何产生的关系。好了拉回来,那么笛卡尔级这个是需要我们避免的,很多人说他是个数学家是吧,我我我就哎,老是崇拜人家,老写这个这个笛卡尔级的这个东西,这是错的啊,不能够写它。这是我们说明的这个问题,而这个呢,也就是我们讲的这个等值连接,就是完全的等的。看一看是吧,就是相等的啊。哎,不难再往后走,加上这个连接条件,哎,主键外键这个概念呢,我们靠后一点,第八节的时候,哎,第第八节第九节约束会给大家来说什么叫主见,什么叫外见。
12:01
这就是我们讲的等值连接,好了,那我们再过来看一下我们这个语句哈,它是没有错的。呃,但是呢,我觉得这个写的有点啰嗦,你看这里边儿depend这个。表啊,挺长,它这个表也不短啊,而且这个每一列都这样,指名太麻烦,怎么能节省一点啊,我给你这个表起个别名,Employees表叫e department表叫D。那我这就可以写成一点一点。这就是低点。是不是感觉瞬间眼前都明亮了呀?立马这个代码就短了很多,我们一下效果。还是106条没问题,哎,我说呀,现在我还可以省。还可以省,在哪省啊,这个employ ID这个列啊,它就在这个表中,所以说它是可以省略的。同样的道理,Department name也是可以省的,因为它仅存在于department表里。
13:13
而前面这个department ID啊,就不能省,因为它这两个表里都有吧,都有,所以你必须得指明一个,这呢只是说你写谁都行,写D也行,写E也可以。最后这个结果还是106条,这个呢是最简单的形式了,最简洁的形式。大家如果你是刚开始学这个circle的话,建议大家你在写这个列的时候,你都给它指明是哪一个列的,以免出错啊,也养成一个良好的习惯,你说你熟了以后我就知道这个,呃,这个表里有,所以我就把它省略了也行。好吧。这是我们讲的等值连接。这呢,或者更区域来说,属于等值连接里边的是不是两个表的一个连接呀,两个表连接,那你看。
14:06
我们这里呢,还有一个表叫做locations表。第八个问题,表里边每一个部门都有对应的一个地址,那么这个地址。是不是就在这儿啊,那么这个地址是不是也一定有一个城市啊?我还想把这个城市说出来意味着什么呀?我想看看每一个员工,你在哪个城市工作。是这意思吧,中间必须要借助于department这个表,那么现在相当于是三个表之间做连接了。那怎么办啊,那就再加一个呗。这样写,我还想输出一下。是不是那个表的CT,那个表的CT我先这样写上CT。逗号locations,写个别名L,所以这呢,你给大家来一个L点,当然可以省略啊。
15:03
Where,它这个写完运行有没有问题啊。是不是有问题啊。有啥问题啊,我现在把这两个表加了一个过滤条件,这两个表你是不是还没有加了,没有加是不是又出现D开机的错误了,所以还是需要加一个。过滤条件and d点它俩之间的连接通过哪个列啊?叫location ID,这个列给它连起来好了。d.location ID等于l.location ID。这个时候我们再来看。哎,这就对了哈,哎,某一个人他是在这个部门工作,这个部门名是叫这个,哎,这个部门在这个城市里。很清晰是吧,这呢,我们是通过三个表连接我们这个讲课啊,这三个表是比较长的,如果说还有一个表又一个表,那你是不是就得再需要加上一个外条件吧。
16:13
这里我们总结一下,你看我这有三个表,三个表做连接的话,那我把它俩找个条件捏住捏一起,这俩找条件捏一起,这三个表只需要两个连接条件。最少吧是吧,最少得需要两个,如果再多了一个表,你说再往一个条件给他粘一下,就是四个表的话,至少得需要三个吧。当然你多一点也行是吧,那至少得有三个啊。哎,这就我们总结出来了这样一个。一个意思,哎,别名这我们刚才都讲了,说连接N个表的话,那么至少需要N减一个连接条件。那这两个表它俩粘一块儿一个,这俩粘一块儿一个,再多的再粘一块,那你有N个表,就得有N减一个连接条件。哎,就像是N个小朋友是吧,N个小朋友之间,你要想让他们这个产生关系的话,假如他们一握手就代表着他们之间认识,你想让这N个人之间都相互并且彼此之间认识,至少得有是不是N减一对手,他们得是握着的对吧?得是握着的才行。
17:18
这个练习查询公司员工的last name department name跟city,我们刚才这个例子已经演示了,就不说了。下边有一个叫刚才我们说的叫等值连接啊,因为它的规律条件是等的,这呢对应的一个叫非等值连接。非等值连接什么意思呢?我们还是回来看一下这个表。大家你看。每一个员工啊,是不是都有一些salary?都有salary,那么这个salary你在这看。我们说每一个工作。每个工作工种不一样,那么不同的工种他的薪资待遇也是不同的。
18:04
你做一个CTO年薪100万,你做一个公司里边保洁的啊,年薪啊超不过10万,这是有区别的,那么每一个不同的工种啊,它是有这个这个。薪资的一个待遇不同的,我们这里边有一个表叫job grade,给每一个不同的这个相当于是工作啊,或者说我们给不同的这个工资级别的分了一个党。叫job Grace,我们可以看一下这个表长什么样。Select星from叫知道不great你看一下,如果说这个人的工资是1000~2999的是叫A的。哎,那么最后呢,是叫F档。我现在呢想做这个事儿,我想看一下公司当中每个员工,他在公司处于第几档的工资。
19:05
处于第几项工资,你要想看它处于第几项工资的话,你是不是就一定得用到这个表了,哎,张三两千两千,你看那就是A档啊,李四两万两万的话就是一档。你得结合这两个表,那么这两个表之间,它实际上就是一个非等值连接。来,我们写一下这个事。Select的employ last nameme salary,然后呢,我再看一下他的哎党吧,哎,他的工资的档工资的党就叫哎,Grade level。哎,你要一开始。还没给它起别名,或者说你还不知道这个前面哪些需要加这个需要显示的,写上这个表点的话,你就先空着也行,等一下再来补,From tos e,还有一个叫job,哎,Grade叫勾吧。
20:15
那你相应的,哎,这你加上个一点一点一点,这个是勾点都行,这这都行是吧,不加的话可以省略。那么这里边因为是非等值连接,它们没有一个相同的相等的列,我就把那个列也不写了啊,那个也也也也没有是吧,也没法写,那么where这个条件是什么呀?就是1.salary。它在这个勾里边,某一个范围里边,你看那个范围里的那个东西,我使用的叫between,我们前面讲过勾点。看看。叫salary between and。
21:00
O点差意思就是你这个1.salary在我正好在我这个区间里的。你看我因为这几个区间都是完全的互斥的,对吧,你在我哪个区间里边,我就相应的把那个里边的那个grade level给你输出出来,一定是唯一的,他没有笛卡尔基的错误。这不就出来了吗?K这个K呢是24000,它是一等。啊,那么相应的这个档都出来,而且默认还按照这个档有一个排序。行,这就是我们说的叫非等值连接,大家体会一下啊,非等值连接跟等值连接区别就是在于这个过滤条件。首先讲没有过滤条件,那就是抵卡尔级的错误,这是我们要避免的,一定要有过滤条件,有过滤条件你就看过滤条件是等呢,还是不等的,不等的它就是非等式的,就这意思。对吧,好了接着往后,下面我们要提的这个叫做外连接,外连接。
22:07
大家还记不记得我们刚刚才实现employ这个表和depend表的时候,发现少一个人是吧?来,我们把刚才那个例子来写一下。哎,这呢,我换一个吧,叫1.lastname,这个是不是一定要显示在补上的呀。嗯,其他的这个都是可以省的,因为他们是它俩的一个共同都有的一个列,你得指明加连接条件,1.1帕ID等于D点。
23:03
第八来D。好,这是我们刚才写这个例子,大家也看到结果了,是106条记录。啊,没有说那个人,那我就想把那个人给他加进来。就想把那个人给他加进来,那你没有部门ID,也没有部门内,那就空呗,就空着啊,就是空着。那你怎么办啊,我们要使用外连接,外连接我们看看这个概念。相比较来讲,我们刚才就是讲这个之前都叫内连接合并,具有同一列的两个以上的表的行结果集中不包含一个表与另一个表不匹配的,一个表与另一个表不匹配的号。就这意思啊,不匹配的我们都给滤掉了,所以只有106条记录,这用的是叫内连接,什么叫外连接?两个表在连接过程当中,除了返回满足连接条件的行以外,还同时返回了左表当中不满足条件的行,就称为叫左外连接,同样的右管中不满足条条件两条右外连接。
24:12
没有匹配的行时结果表中的列值为空,哎,这下边就是说我怎么来实现了哈,怎么来写呀,大家你看现在是不是相当于左表里边多了一个。数据啊,它里边有一个人在右边找不到对应的,是不是不买地给它对应啊,所以呢,我就得在你这个过滤条件这嗯少的那一块整一个加号。相当于这个时候返回了左表当中,不满足条件的话,因为左表员工是不是多一个呀,多一个没有部门的返回左表当中不满足条件的。好,需要在右边这过滤条件这加上一个加号。这对应的这个叫左外连接。哎,这样写这个阻碍连接也行,或者有时候跟这个我们都通用了左外,哎,这两种写法都行,两个连字都可以。
25:20
那么这个时候我们输出的结果就是107条,就还有谁啊,是不是没有部门的这个哥们啊。相当于返回了左表中不满足条件的行叫左外连接。那同样的。我们说左表当中有可能右表中没有,反过来右表中是不是也可能有一些信息,左表没有啊。那那实际情况放在这里边怎么来理解,是不是有可能说什么呀,我有些部门,但是里边是不是没有员工啊。你现在输出的是组长,把每个员工都给它对应起来了。
26:03
反过来,有的部门没有员工,那你就相当于是不是应该返回右表中,不满足条件的行吧,那就应该在左表中,这是不是整个加号啊。那这个相应的就改成叫。右外连接。意外连接。哎,你左边清楚了以后,你倒过来不就右外连接吗?对吧,那么这个时候效果是什么样的呢?我们看一眼。啊,这个还是多一点,122条记录,你看是不是从这开始,后边的这样一些,就是我们刚才说的有部门,但是部门里边没有人吧。没错。就是这样的意思啊,那你这个表里边还有那个grant吗?显然没有了,我现在是不是仅仅返回右表中不满足条件的行,叫右边连接,当然你不可能含有左外连接的那个不满足的信息,是吧?那有同学说,哎,老师,我现在既想把左表中的这个不满足的弄出来,然后右边的也想弄出来,我在这能不能两边都写一个加号啊?
27:17
哎,这样写的话就废了,看一下。不行是吧,哎,所以说是不允许这样来实现的。那么怎么办?我们后边要讲这个,哎,SQ99的语法,来,我们看一眼。哎,这是我们讲的叫SCO就的语法,哎,这里边相当于是又一套了哈,又使用它呢,可以达到我们刚才说的就是把左表中不满足的以及右表中不满足的都给它弄出来。哎,行,我们讲四个语法之前,大家你稍微捋一下这个思路,我们刚才都讲了哪些东西啊,一方面呢,我们讲了一个,叫我在这稍微给大家写一写。
28:05
嗯,先先先应该说叫内连接对吧?内链接就是我们今天现在讲的都是多个表之间的,什么叫内链接,就是返回这两个表中的一些行,嗯,就是各自的一些行,以及它们连接的一些条件,如果说呃这而且是都满足的条件呢,都输出出来,如果不满足的某些表里边不满足的输出来,那就叫外连接了哈。那连接是它俩里边都有的输出出来,我们又给它细分成叫等值的,等值的以及叫非等值的,这叫不等值的,我们也给大家举例子了,这是我们这个说的一个角度哈,然后呢,相比较来讲,有一个叫外连接。外连接就是既可以把左表当中不满足条件的输出出来叫左外连接,又可以把右表中不满足条件输叫右外连接,嗯,分成了这样一个叫左外连接。
29:11
哎,和右外连接,那实际上除了左外跟右外之外,我们还想能不能把两秒钟都给它输出来,这就是我们现在要说的SQ9右的语法,SQ九尾语法是是又又又一套了。嗯,他也能够实现多表之间的一个连接,它是怎么连接的一种形式,我们刚才那会儿的例子是不是这样来写呀。等值里边。对,大家看这个例子,这是不是我们刚才一上来讲这一章的时候,如何实现多表连接,对吧,我们这样来写,现在我们再讲一种方式,就是使用circle就的语法,哎。这里边呢,你不加这个条件,这是不是就笛卡基的错误是吧,然后S求语法里边也会有对应的一个笛卡尔基的错误,它用的叫cross John。
30:06
就是在你这儿from它。Cross。这它。OK,哎,我就停了哈,这也是一个即开二级的错误,跟我们前面讲的那个是对应的,那么后边相应的又有一些连接的方式,我们看一下这里边的都有哪些,有一些呢,实际上是需要我们了解的,这样写是错的,那就不能这样写,我把这个。Cross改成叫nature。Natural。就是自然的连接这两个表。啊。删掉。
31:06
啊,他说这个意思啊,就是我们在这不能够使用这个限定词。就是不用加他了,你不用再指明是来自于哪个列的,我就自动的能够识别了,这意思啊。哎,输出结果了,这就是说满足条件的这个结果,哎,大家看到啊,说我们这个结果里边仅仅有32条记录。正常我们感觉应该是是有106条记录,他这里只有32条,这个原因在哪啊。肯定是有问题的是吧?那么原因在哪?叫nature join,我们还是怎么着看一下这个表。这个表结构,这个表结构大家你也可以直接在这儿来演示,D,你employ意思这样看也行是吧,哎,然后D。嗯,Department我们看一下哈,我现在呢,实际上这两个表做连接,我没有写这个where过滤条件,它就能够自动的实现连接,而且避免了底卡机错误,那么它如何自动连接,大家注意到这个表里边有一个底盘ID,这里也有。
32:19
这肯定是一个连接条件了。那么除了这两个之外,你看看还有没有这两个表里边长一样的裂呀?这个少,从这看这个没有。这个有没有,这个是不是也是啊,你看这是不是有一个manager ID呀。这个表里也有一个MID。好了,现在这个原因我们就找到了natural,它实现的是两个表的连接,并且将所有的这个列名一样都跟你连接起来了,意味着是有两个连接条件了。有两个连接点,如果你加上两个连接条件,导致的最后结果只有32条记录。
33:00
是这个原因,所以说呃,这种方式你要说好吧,它确实是比较简单,但是呢,他也不好,原因呢,我假设就想让这个列表,两个表中的一条数据做连接啊,一个列作为连接条件,那你这样写它自动是识别多个不方便。是吧,所以说这种方式呢,大家了解一下就可以了,那么不用这种方式再改进一下,我们把这个nature给去掉。诶,From他join,它指明一个用谁连接叫using,哎,Using谁呀,Department ID,我只使用department ID来作为连接。那这时候是不是106条记录啊,跟我们刚才那会实现的连接方式就一样了,那这种方式好不好啊。其实还不错。其实还不错,但是我说呀,他也不是特别好。
34:00
什么叫不是特别好啊,大家你想想想啊。这个时候呢,我们这个表。跟这个表它俩里边,哎,都有一个列,这个列呢,作为连接条件,而且是不是恰好这两个列的列名还都一样啊,都叫D。那万一这个表里边叫底盘ID,这个表里边儿就直接叫ID了,那你这U性是不是就就完蛋了,就出不来了是吧,那你写谁好啊。就没法搞了。就是这种方式,你写的时候,言外之意就是说两个表里边的列的列名得一样。其实不光列名得一样,你数据类型也得一样。你这个里边是用的number类型,那边里边是war差型的,结果一匹到一块还不匹配了,那就报错了。是吧,那这种方式呢,也是有一些局限性的。那它有局限性,那我们应该用谁呀,它也做一个了解啊,我们用它就是也不用它了。
35:02
给他。注意一下,或者直接删了吧,用on,用on来指明的连接条件,On什么呀,我这加上一个E,再来一个D。那就是二一.department ID等于E点,你看他们的ID是不是跟我们那会儿那个写盖儿有点像。没错,确实跟外有点像,而且这还用了用了一个兆啊。啊,这还需要我们在这儿是不是得记一下啊。哎,这个时候需需要加上啊。106条记录这个时候就能够避免我们刚才说的那个错误,比如说你这个表里边叫方ID,这个叫ID,那你直接把这个改成ID对吧。是吧,它呢跟我们讲的那会儿from这个表逗号这个表where那种方式是完全一样的,也就是说我们实现多表连接两种方式,一种是刚才那会儿讲的那个开头的使用word。
36:10
另一种呢,就是这个符的一个表撞另一个表啊,一个连接条件。就可以了。那如果说在这我想实现三个表的连接怎么办?再加上一个呗,比如说city,那么join,它on,它别在后边写了,直接在这在再在这个后边写join。叫location啊。d.d.location ID等于l.location ID是不是这样啊?照一个表按哪个条件,照那个表按哪个条件,如果再加你就再照再啊。我现在就能实现这三个表的一个连接。
37:01
没有问题。啊,这就是色后结尾的语法,这个呢,这样啊,需要大家也掌握。那么这也是叫内连接,那么刚才你说了SQ语法SQL这个九九能解决内连接外,呃,这个这个左外连接,右外连接和两个表都不满足的那个连接,那你先看看左外怎么来实现。那我们还退回去啊,我把这个先删掉。先回到这,你看我在这再往前面加上一个left a。Left autumn join唤它,我们看一下结果。107前边有一个哥们儿没有。这是不是就是左外啊?左外吧,Left out of,那右外呢,Right来,Right out of。122,那么左边右边都想出来怎么办呀?
38:01
叫for al。110 123比这个122是不是多了一个。多了一个没有部门的那个哥们吧。就是这样子的,这个叫满外连接。哪个链接。啊,既可以实现左外右外,还可以实现满外连接,这是circle,呃,九九语法里边比我们一般的那个好的,就是它能够实现这个东西,嗯。好,这个讲完了,那么最后呢,还有一个知识点,我们把它说一下,什么知识点啊,叫做自连接。啊,叫做自连接。自连接,什么叫自连接?大家你,我们看这个表吧。每个员工是不是都有一个manage ID啊,就每个人都有一个老板,老板呢有个ID。
39:06
那你想想这个老板。他说白了是不是也是一个员工,就是老板,这个也是一个ID。那我现在想说出这个事儿哈,我想看每一个员工他是老板。是谁?或者他老板的名字。那那怎么办,那是不是就相当于是是不是就还是这个表自己在这玩的呀。自己在这玩了。哎,那这个怎么来实现,比如说我们做这个事,查询一下公司中员工,哎,有一个员工,有个员工有个员工。我记得有个员工姓陈,哎,公司中员工陈的老板的。嗯,我家这个这个。
40:03
Manager这信息查询公司中员工陈的manager的信息,这个怎么来做呀?大家,这个事儿现在我们没有讲呢,你肯定可以做,你怎么可以做啊,你想查他,那我就先怎么着,我先看一下这个人的信息呗,Select,嗯,叫last啊,Name,诶,他的many ID,我先看看你老板的ID是多少是吧,Employees啊,Where last name等于陈或者你这时候,哎怕你这个大小写有,嗯,你也不知道他那里边到底用的是什么,你可以lower一下。
41:01
他。那这个人呢,他的manage ID是108号,那108号也是不是就是一个员工啊,那我看108号的你的,嗯,什么last nameme salary email,哎,For me the,意思where employ等于108。这就是姓陈的这个员工的manager的信息。嗯,一个月12000。那我这能能实现了,我想着我能不能在一个表当中,不不是一个表了,呃,一次查询给他查询出来。就是可以使用我们讲的叫哎自连接。什么叫自连接啊,你看啊,你现在想查询一下哎,老板的信息,一个lastname,一个salary。
42:16
啊哎,加上一个email对吧,或者说你想看一下这个,再加上这个员工,这个员工那也是叫last name,那你得搞清楚是谁了。给我加一个from,一个是employees。这是一个表,是不是应该多表连接?多表连接是不是还得有个表?只不过这两个表是同一个表罢了,对吧?那我就让你其中的一个表来当这个员工吧。比如这种啊E吧,然后再来一个表,Employees叫manager,这两个表一个是员工,一个是老板,那你现在实际上是想查询员工的。
43:00
Last name,呃,以及他老板的last nameme工资和什么email,这个时候那你一定要补上了,因为是不是填个表也有这三个星是吧?好了,加条件,这个条件怎么写?两个表一定要连接条件,要不的话就有D卡级的错误,应该是这个员工的manage ID等于是不是你后边这个manager这个表的。Employee ID,我们那会儿不就是先查出这个many ID是108,然后看谁的employd是108,不就是这个条件。同时按。P的last name等于陈。
44:06
少了一个字符A。看这个怎么说的啊,哎,他的这也少了啊。出来了。这就是姓陈的这个员工,这是他的老板,这是他的老板的信息,这是跟我们刚才这个实现方式是不是一样的,结这个结果一样。这个呢,就叫做自连接。就是说白了就是那个表自己连自己嘛,哎,但是本质上来讲还是多个表,你只不过把它相当于复制了一份而已。就可以了,大家来理解一下,那么讲到这儿呢,我们这一节就讲完了。大家你可以看一下我们这里边的给大家总结这个东西,我就不具体这句话了啊,这一节东西稍微东西多吧,倒不多,但是需要你捋一下我们如何实现多表的连接,比如说员工表和部门表通用的类型就是select from where,再加上一个过滤条件。
45:13
这是比较通用的一种方式,需要大家掌握。第二种说叫nature,这个有局限性,它会自觉的将这个表里边都有的信息,这个这都都一样的,这个列都给你连起来,哎,用局限性,然后呢,我们不用内照,用U性,U性呢有可能是不是表的名也不一样,所以也有局限性,这两种大家了解一下。我们常用的啥?哎,还有一种叫做哎,Join on是SQL99语法里边的一种方式,那么这里边儿的方式四跟方式一都需要大家来掌握。哎,这里对应的都叫自连接,那么外连接就是满足各自不满足条件的,哎,左表或右表或两个表都不满足条件的,给它输出出来,你需要知道诶,使用so后求结语法,左外右外和满卖在这儿加,哎,Left outter right out或for outter。
46:08
那这呢,就是在相应的那个位置加加号就行,对吧,它不能够实现Y的啊,这是它的一个小的局限性。哎,这是我们整个这一节讲的内容啊,大家休息一下。
我来说两句