00:00
那么刚才所讲的这些东西其实都属于了解内容。各位。对吧,是不是了解内容就是了解啊。就什么是连接查询,你你这个概念理解的或者是不理解,影响你写代码,那不不影响不影响啊,就就知道连接查询就不是单表查询的,就是两张表或者三张表连接起来查取结果就叫连接查询,那连接查询的分类呢,简单有个印象,我说了啊,这也不一定非得想啊,背背一下啊,这个面试官会不会考我呀,不会,没有一个面试官说考你这个东西没有任何技术含量,就算你知道咋的,你技术就牛了,考察不出来啊这个东西,那接下来呢,我们这个分类大家了解了之后呢,再往下我们一起来看一看,看一种现象。看一种现象。在表的连接查询方面,各位啊,有一种现象被称为笛卡尔机现象。
01:05
笛卡尔机。为什么叫笛卡尔基现象呢?因为这个人是笛卡尔。发现笛卡尔基现象,右边它全称是笛卡尔乘积现象啊。笛卡尔同尼陷阱,我们来一个案例分析一下,大家都理解了,导出每一个员工的部门名称,要求显示员工名和部门名。有意思了吧?本人。有意思啦,找出每一个员工的部门名称,要求写员工名跟部门名。你是不是有员工表?
02:05
对吧,员工这张表里边有员工的名字以及员工的部门编号吧。但是有部门的名称吗?这张表里边是不是没有部门名称,部门名称在这张表里边啊。那这张表我们叫emp表啊。找出每个员工的部门名称,这个员在这个部门,哪个部门里要求显示员工的名字,显示什么部门的名字,那部门表select from department,我们来看一看这张表,各位,这张表呢,我们把它查出来,来就这个啊,拿过来放这,放这之后呢,我们这张表叫第PT表,注意听啊,同学们啊,这块你要听不好,你就开端没开好,开端没开好你后边表连接你就别查,别学了,你查不明白这个啊,来注意看啊,这是员工表吧,好,这是个部分表,好,那么接下来大家想一想。
03:22
我要找出每一个员工的部门名称。我从这张表里边取什么员工的名字,从这张表取什么部门的名字吧,我这样写这个词口大家看啊,Select谁e name谁是他对不对,什么de d是谁是他对吧,然后from谁呀。Emp这张表逗号。De pd。大家注意听啊,这是不是两张表啊,哎,这张表里边取他,这张表里是不是取他来,我们把这个拿过来,贴过来之后,你猜测一下他执行结果是多少条记录。
04:17
14乘46。56是对的。对吧。因为他从这取史密斯的时候,从这取的是D内姆吧,所以他会和他拼在一块玩,紧接着史密斯会继续和他匹配吧。是不是这两个也会结合在一起?这个记录是不是还会和他结合在一起啊?这个记录还会和他结合在一起,也就是说这一个史密斯要连接下边这几张表,四条记录,所以一条记录就会产生四条,一共是14 14乘四是56条记录。
05:01
你没加条件呀,你没说哪些记录不要啊。你加条件了吗?你没有,你没加条件是不是,就是就是说我这些静物我都要。听懂了吗?没有过滤就意味着我这一条史密斯就意味着都和您可以匹配上,一产生44,可以产生56条记录,这种现象被我们称为笛卡尔沉积现象。就是如果两张表进行连接查询,没有任何条件限制的话,最终查询结果条数是两张表的记录条数乘积。就如果两张表连接的话,没有任何条件限制,最终的查询结果条数是两张表中的记录条数的成绩。Declare成绩现象。各位。这是笛卡尔发现的。各位。啊,这是很有名的一个现象啊。
06:05
笛卡尔统计。X乘以Y。是吧?笛卡尔一。不,我们在数学,我们不是我们在说我们在数据库方面,其实它最早出现在数学方面的。数学方面的明白吗?哎,就是我们数据库这块,我们这种现象也可以引用一下,叫笛卡耳机现象啊,笛卡机现象作为了解,不知道笛卡耳机又咋地,是不是这个东西无所谓的啊,无所谓,就是这块的话来了解一下为好,来我们把这条语句执行一下,最后结果是啥?我是这条,你看看这个史密斯皮出来几条。四条是吧,诶我们可以把这个拿过来,大概呢,它最后的结果啊,我就省略号能看懂啊,点点点是不是能看懂是吧?好一共多少条啊,诶最后是56条记录。
07:16
当什么呢?笛卡尔机现象当。当两张表进行连接查询的时候,没有任何条件进行限制。最终的查询结果条数是两张表记录条数的乘积。这就是抵抗。那这条语句一般我们也不会这么写啊,来关于表的别名,各位关于表别名啊,这条语句我们一般会这样写,这不要加S啊,空格给它起个别名E,这个空格给它起个别名D,那这边加什么呀?e.e name这个是谁呀?d.d name。
08:17
表示的别名这一块作用是什么?当然这个查询结果是不是还是50条,56条记录,哎,这样做有什么好处啊。表的别名有什么好处?第一,执行效率高,第二,可读性好。为什么执行效率高啊,如果你不加这个别名,各位我说一下啊,你前面这个e name啊,他在找的时候,他既会去这张表里边找内,又会去这张表里边找内。两张表都找大家思考一个问题啊,在在就就在现实的开发开发当中吧,你就好好思考一下,两张表里边有没有可能存在俩字段名一模一样。
09:06
两张表的字段名正好有有有有一个字段名是一样的,这种情况是存在的呀,所以这个时候大家想想,如果你不起别名是不是混淆的买是不是也不知道该去哪张表里边取对不对?所以说表的别名第一执行效率高,第二可能性好一些。我既然讲了,从今天往后,你写最后语句的时候,就要给表起别名了啊,给表起别名。起一个别名,可读性好一些,执行率会高一些。好了,那这个呢,是关于咱们表的边边,那接下来我要说的是怎么避免笛卡耳机现象呢。诶,我讲这个迪抗基现象只是为了讲迪抗机现象吗?并不是,各位啊,我讲迪卡机现象的目的是让你知道它底层数据库在查询的时候,它的原理是怎么做的。你比如说两张表在查的时候,他一般查这个字段,他从这取,取出来之后,这个会和你匹配,你逗号是什么意思,各位。
10:05
E name d name放在同一个位置上,就意味着E内和DD name要干什么联合显示,懂什么意思吗?就是e name和d name要干什么联合起来一块儿显示对吗?那我问你,你一块联合起来显示,是不是就意味着他们要粘到一块儿啊?对吧,他们是不是要粘连在一块儿对吧?好,那我问你,既然要粘到一块儿,那我史密斯就和你粘,我史密斯呢就和你粘,对吗?我这四个是不是都会粘到一块。理解它的就这个过程,你要理解它的原理啊,它的这个表的连接查询,他的查询原理是拿着第一张表的第一条记录和你每一条记录都匹配,第二呢,第二第二第二个记录会和你这张表的每一条记录都会都会匹配,你要把这个理解才行,各位啊,重点不是讲笛卡尔机现象,哪怕你不知道这个现象,你只你知道他两张表连接的时候,你知道是拿着这条记录和这条和这个表里的所有记录进行匹配,你知道这个过程其实就可以了。
11:15
明白吧,哎,这是这是表的连接查询原理吧。表的连接查询原理是什么?是A表B表连接的时候,从A表里面拿,拿着其中一条记录,和B表所有记录都匹配,你知道这个原理各位啊,好,接下来继续了,再往下就是我们怎么避免笛卡尔机现象,怎么避免笛卡尔机现象呢?那当然是加什么条件进行什么过滤。但第一个问题你需要思考一下,加了低抗基现象就一定匹配次数减少吗?不是加了这个条件就一定或者是避免了笛卡尔机现象,就一定能够减少匹配次数吗?避免了笛卡尔机现象?
12:08
会减少。记录的匹配次数。不一定,这个什么叫不一定,不是不一定啊,就是避免低卡机现象,会减少记录的匹配次数吗?不会。次数还是56次,明白吗?只不过显示的是有效记录。所以有很多同学就学学学学懵了,就是说是不是避免了迪卡二级现象,我最后一查,14个员工应该查询多少条记录,14个记录他就会认为底层匹配了14次,错,底层照样还是匹配五六次,只不过进行了四选一。
13:01
过滤掉了懂吗?所以说加条件能不能提高,就是就是说避免了低抗机现象,能不能提高程序的执行效率,不能不能不能不能啊,他匹配次数还是多少次,56次没变没变,只是只只不过显示的是有效记录。那这个得这个得明白啊,你不明白这个你就不懂表连接啊好,那么这个案例是不是还是这个案例啊,我们可以考虑把这个案例呢拿过来啊,放到这个位置上行了,那么接下来怎么写?写一下吧,Select某某某,我可能一会再写from谁呀?EPE表对不对?逗号底depend d表是不是这加什么条件啊?e.e namee表里的e name和D表d name吗?这是不是还是刚才那个笛卡尔基现象好后边加一个where条件,条件是什么?就是说史密斯跟你粘一块儿还是不粘一块儿,我看我这个号和您这个号一样不一样,懂什么意思吗?我这个号跟您这个号一样,妥了,我这个就可以和您匹配。
14:16
懂不懂四选一,所以这个条件是说你这张表的这个字段和你这张表的这个字段相等的情况下。所以后边条件是什么?D表或者E表的这个等于谁?D表的这个能看懂吗?E表的de PT就是你看啊,来了啊,你看啊,史密斯开始匹配第一个匹配上之后看看史密斯的编号等于这个D内的编号吗?不等不等拖拉,这两个记录不能在一块,史密斯继续和这条记录匹配,史密斯20,这条记录是20,妥了,能匹配上,那这条记录就会和这条记录匹配在一起。
15:09
听懂了吗?这个就避免了什么。笛卡尔基。你看看史密斯是不是和这个research部门?关联在一起的。史密斯。二十二十,14条记录,14条记录,但是想说的各位,我再强调一下,匹配次数还是56次,只不过显示的是四选一,56的四选一就是14啊。讲的这个以后不用啊,因为这是九二语法。老语法这个是九二,各位以后不用啊。
16:05
但这里我主要不是讲谁能用谁不能用,我想讲的是就是表连接查询的一个原理,这个我觉得你只要能够把这个吃定啊,我觉得以后三张表,四张表,五张表连接,你也你也会写,也会写行,这个大家没有疑问吧,就是怎么避免笛卡机啊,要知道咱们其实有一个叫笛卡尔机现象,要知道怎么去避免,其实避免很简单,就是加条件。但是有很多程序员他不知道,他不知道这个事啊。通常我在招成权的时候,我也会问这个东西,我说你有没有听说过笛卡机现象啊?听说过这个一般都听说过,就这避免D卡机现象之后的匹配次数会减少吗?有的人就是会呗。是吧,会啊,有的同学就就可能就这样说。
17:01
那这个说法不对。次数不会,不会减少,还是那么多次,只不过匹匹配出来数据变少了,有效的记录显示的是啊。
我来说两句