01:51
嗯。关于那个课堂练习,我们课堂上就没时间订正了,如果有问题可以课下单独找我。
02:00
因为这里头我把答案都直接给你了,有问题可以单独找我。多表查询。员工表,员工表里头有个所属部门,他的所属部门来先from PPT。
03:07
比如说史密斯,它属于20部门,20部门在哪呢?在这20部门是什么名称?它的位置在哪?那现在这两个表。在现实生活中,员工实体。员工实体和部门实体之间。存在着一对多的关系。一对多。那在数据库中我们怎么体现呢?数据库中怎么去体现这种一对多的关系?来了,员工实体有员工实体的字段,那我们把员工实体做成一个员工表,部门实体做成一个部门表,每个表有自己的主见。
04:17
那一个员工,这是他的EP。员工表的主见。部门表的组件。这边是我们可以称他是父表,一个老子有多个儿子,这边我们称为子表,那我要在子表的一方。引入附表的主键也就是在这哈。把这个表的主键引到这儿来,作为外键,我们通过这种主外键的方式去来体现实体和实体之中这种关系,那现在我们要去查询员工的信息,从一个表里查,我要去查询部门的信息,从一个表里查。那现在。
05:15
我要你查询员工的信息及其部门的信息。用一个词后语句查出来。这就是我们所谓的多表查询。什么是多表查询呢?多表。查询用单个的语句从多个表中。查询相关相关的数据,单个的来查询,从多个表里查出去,那我们select frommp。
06:08
From后面是提供数据源头的表数据源。De PT。From后面我让他加两个表不就行了吗?那现在我们看一共有14条员工记录。那14个员工记录最多是应该属于14个部门吧。最多的情况,那我们在这哈,我要查NUMBER1NAME。然后查他的dept number,注意你员工表里头有个dp number吧,部门表里头。也有个第一批订单。然后d namec。
07:07
现在你这两个表里头都有dpd number,这两个字段的名称是一样的。这时候他就不知道你这是哪个了,这是哪个了,那为了加以区分,我们给它加上。PP表。P角。这是MP点这个呢,第1PTD。DPT点。DPT。点。老糊涂了。走。嗯,刚才我们分析了14个员工,最多属于14个部门吗?结果他弄出来一个56。
08:04
这边有14条记录,这边有四条记录。实际上它用这边的一二三四六七八九十,实际上分别对应这边的一,你看。这边的多条记录分别对应这边的第一条。注意照就14条了。分别对应着这边的一、十部门,然后再用14条记录,分别对应这边的二部门、20部门,这种结果叫笛卡尔乘积。在多表查询的时候。会产生笛卡尔乘积。
09:01
为什么会产生第二乘积?因为你没有加入条件,那注意这里头查询的时候有什么条件呢?你这个字段。说。必须要等于这个表里的这个字段吧。那我们重新查。Slide。刚才我们是直接用表名来作为前缀,那我这表名比较长呢,那我写起来多麻烦啊。给这个表起个别名。然后我要查条件是什么呢。e.D是不是等于你那个d.DP这边的。
10:05
这个字段20是不是要等于这个表里的这个dp number的20啊,所以我们得加入一个等值条件。那我查。一这一点两PM一点以内,那那个部门编号我从哪个表里拿呢?不知道,那我们就都拿出来。14个。怎么收13个呢?我们不是一共14个。
11:01
记录吗,注意。这个人没有部门。找有没有看这里面在查询过程中有没有出现7698。就缺7698那条数据。那现在我们来看你从这刚才我们分析了,你这个第一批number是从员工表里拿呢,还是从部门表里拿呢。别忘了,它们是相等的啊。你员工表里的。这个bpd number是不是等于这个表里的这个字段啊,从哪里头拿?是一样的,因为他们两个是相等的。这就是所谓的多表查询。多表查询的时候。
12:04
如果。没有。加入等值。条件会产生一差二乘,积就是产生一个交集,这边的14条乘以那边的三条乘以那边是四条。多表查询,那多表查询的语法就是。From。表一表二,为了简写,我们可以给这个表一表二分别加一个,起个别名,然后后面我们要加入表一的哪个字段等于表二的哪个字段,给它加上等值条件。多表查询。多表查询,这是最乱的了。
13:04
多表查询分为不同的标准。CIRCLE199二老标准。CIRCLE1999新标准,但不管你新标准老标准,奥瑞10G包括11G都支持。那我们先来看SQ1992的老标准,也就是在1992年制定的时候,一个SQ标准,它的。第一种,等值查询。在父子表的关系上用等号。
14:05
来连接两个表的两个字段或多个表的多个字段。那现在我们来看是在父子表的关系上,父子表也就是说这两个表之间有主外键的关系,用等号来连接这两个表,那你看我们上面写的这个。是不是就是一个等值查询啊,这就是一个等值查询。那现在我们在等值查询的过程中,它查询出了全部的数据,那如果说我只想查7369史密斯的信息,那我可以再加入其他的查询条件。
15:03
And e.EPM等于7369。在等值查询的过程中加入其他的查询。查询。刚才我们说了,我可以连接一个表。现在是连接了两个表,那我也可以连接多个表。现在。这个部门表里头。部门编号,部门名称,它位置在哪?那现在我们把这个位置信息。我们给它抽出来做成一个单独的表,让他也就是说什么呢,多个部门可以在一个地点,一个地点可以有多个部门,我们也给它做成一个附子表,那我把这个表改一下。Edit修改表。
16:02
我先把这个字段。干掉。然后我新建一个表。我们不用尖边,直接用在这儿来生成。生成一个表,在table这新建一个表,一个表叫。Locations,它自段cid。NUMBER4。Loc name刮叉处。20。然后叫LC,叫PK杠,LCHA主键作用在哪个字段上?作用在l cid上?
17:07
啊,我们可以通过这。唯有何况。C table LC LC name,这个我们下午就会用到,实际上这是给它创建了一个主件啊。因为刚才已经执行过了,可以去查看一下。DICTS。可以为空吗?可以为空,这还不对,我们都给它加上主键。PK-C。
18:07
好嘞,现在我们给它加上了主键。加上主键之后,我往里头插入几条数据edit编辑数据。1000。北京。1001。上海。1002。北上广。That形from ls3条数据,那我们把第1PT表的数据修改一下。
19:03
I did that。哎,还得给他加一个字段。I编辑表给他columns加一个字段,这个叫LC-ID,我故意把名字给它岔开的。什么类型栏?四。给它添加这种外界约束叫F,关于主外键怎么添加,我们下午就会学到FK,这个是第一。PPT。杠LC什么类型foreign?作用在哪个字段上?Loc-ID它要引用哪个表?引用locations表的。LCD。现在我们就给DPD点加了外键约束。
20:03
关于怎么加主键约束,怎么加外键约束,别着急,下午我们就用到了。那现在我去给他修修改数据。I did that。注意这哈。我要选他的部门编号了。你只能在我给你提供的范围内去选啊。多个对,这边的多条记录对应着位置表里的一个记录,这儿也有一个一对多的关系。我们把数据准备好了。史密斯属于20这个部门。二是这个部门是这个它的位置编号在1000 1000在哪呢?在。
21:01
北京。那现在我们要去从三个表里头。查出相关的数,查询员工的信息、部门的信息及其位置的信息。也是等值查询,它们之间也有这种父子表的关系啊,连接两个表的两个字段或多个表的多个字段那。Sweat from young PE epg。Locations are?一只羊也是赶,两只羊也是放,再加一只羊也没什么。条件呢?e.DP等于d.dp number and d点。
22:01
那叫LC杠,ID等于L点。L cid加入等值条件啊,也是用等号来连接多个表的多个字段啊,那这就查呗,E点形B点型。L呀。行,查了所有的。7369史密斯在十,7369迈克在这十个部门,十部门在哪儿?在这儿还在北京?这样不就查出来了吗?我们也可以加入其他的条件二的一加。PM等于7369。七段六六史密斯在20这个部门,20这个部门名称是什么,在哪,这样就都查出来,这叫等值查询。
23:09
也就是我们可以推出一个规则。N。个表的等值查询需要N减一个。等值调解Y啊,这个表的哪个字段等于哪个表的字段,按这个表的哪个字段等于另外一个表的哪个字段。需要N减一个等值条件,这叫等值查询。C等于查询。
24:06
员工有一个工资。这有一个celebrate工资级别表。工资级别表,史密斯挣800。800属于几级呢?一级。因为史密斯的800在一级的700到一千二之间。那史密斯不就是一级吗?那现在在员工表和工资级别表之间。这两个表之间。没有父子关系。你说哪个是父表,哪个是子表?没有父子关系。
25:03
两个表。之间没有父子关系。用。C等号。来连接两个两,那现在注意这个史密斯这个员工的工资。和这个薪水级别表之间,它们有什么关系?他的薪水在700到一千二之间。他是不是就属于这个级别的。那我们可以用between and。Slide from加S条件呢?Where1.3了between s点。
26:09
漏塞了and s甲还塞了。在他的高工资到低工资之间,它就是这个级别的,那我们查一点样一点。内容一点。S,然后S点。Great s点漏了s.S了。查询每个人的工资是属于哪个级别的。史密斯800,他800是属于一级的,因为一级在700到一千二之间,这个人他挣九百五也是一级的,这个人挣一千一也是一级的。这样不就可以了吗?用非等号来连接这两个表。
27:02
那同样我们可以加入查询,加入其他的条件,按照EMT,那么等于7369只查7369这个人的部门的工资。这叫非等值查询,这叫非等值查询。然后。487。不叫此次查询。叫自连接,自连接等值查询、非等值查询,自查询也可以叫自查询,也可以叫自连接。现在什么意思?我们来考虑一个问题,比如说我这儿有个员工表。BMP。
28:03
这儿有个经理。一个经理对应多个员工。多个员工对应一个经理,那员工表在经理表之间也存在着父子关系吧?要查询的话,实际上就是一个多表查询而已。那员工表。经理表。Emp m撇。Summer。员工表和经理表之间存在着父子关系啊,那就把附表的主键引到这儿来作为外键不就行了吗?明白我说什么吗?
29:01
数子表啊,那现在我们来看。但是这有点特殊情况,特殊在哪呢?7369的经理是7902。7902是谁呢?经理是啥?经理也是员工吧,7369的经理是7902 7902也是一个员工,他是福特啊,7367902的晶体是7566 7566是谁呢?我都没找到呢。修六六撞他的经理也是。一个员工现在等于是说这两个表。揉到一起去了。那咋整呢?
30:01
你揉到一起去了。那我就给你。拆开。一个表咋拍呢?通过别名将一个表虚拟成两个点。然后在这两个表上做等值啊,怎么说将一个表虚拟通过别名虚拟成两个表呢?Slide from。从这个表里头查,它叫E,从这个表里查,它叫M。
31:04
通过别名将一个表虚拟成两个表了。条件呢?你员工表里头叫员工表叫E,这是那个Y键吧,Y1.m等于。M表的主键是啥?现在这个表也是M表,M表的主键是不是也是EP number?M。将一个表虚拟成两个表,之后做等值查询,那我要查员工的名字,员工编号。在哪来一点两p1.1内查经理的编号呢?
32:02
M点啥经理的名字呢?加入条件负一点两撇,那么等于7369。7369,我们就查7369,他的经理是7902 7902是福特,7369是史密斯。And。7369史密斯7902福特这样不就查出来了吗?将一个表通过别名虚拟成两个表,然后在这两个表上做等值查询,它叫自查询,也叫自连接。
33:02
字连接。C、等值查询,刚才我们去看等值查询的时候,用等号来连接两个表的多个字段,但是它只能查询。一一对应的情况。等值查询只能查询两个表中一对应的数据。什么意思呢?该。部门有员工,该员工有所属部门。
34:20
史密斯这个人有所属部门,然后20这个部门所属的员工一一对应的情况,那我们用Y查叫非等值查询。这叫不是,这叫外连外连接。Y连接,啥是Y连接呢?在等值。查询的基础。之上可以查询不满足等值条件表,我们先来看员工表,里头有个字段,有个人叫。
35:13
7698这个人没有所属部门,刚才我们在做等值查询的时候。他是出不来的。它不满足等值条件啊。那40这个部门。没有所属员工,你看在等值查询中。也是出不来的,它就不满足等值等值条件啊,那我们用Y连接就可以把这些不满足等值条件的数据查出来。实际上这个等外连接呢,就是一个。等值查询。
36:03
那Y连接又分成。左外连接。等号的左边。加一个加号。等号的左边加一个加号。那现在左边的表,注意我们左边的表是等号,左边是。员工表吧。一呀,等号的左边是员工表,右边是部门表,左外连接。可以把右边。
37:01
表中不满足等值条件的数据查询出来,它是拧着的,左外联可以把右边表中不满足怎么条件的数据画出来,右边表示部门表,那部门表里头有个。40部门表里头有个40这个部门,这个部门没有所属员工,但是可以被。左外连接查出来。那你说你左外连接不就是相对的吗。怎么叫相对的呢?我把他们俩表调一个不就行了吗?那现在我也是用的左外连接,但是我右边的表是。
38:01
圆工表了。7698这个人没有所属部门,可以被左外联查出来,左外连接左外联就是什么呢?可以把右边表不满足等值条件的数据查出来。嗯。左外联,那我们也可以加入查,这就没有必要加查询条件了,比如查史密斯的,没必要了,我就是查他全部的数据啊。那左外联。有左外联就有右外联。可以把左边表不满足等值条件的数据查出来。这个加号出现在等号的右边,那现在我左边的表是员工表。
39:08
我右外连左边的表是员工表啊走。可以把员工表中不满足等值条件的数据查出来。同样我们可以给它调一个。这样不就OK了吗?左外联,这是右外联,可以把左边表,左边表示部门表,把部门表中不满足等值条件的数据查出来。讲个故事。去宠物商店吗?去花鸟鱼虫市场吗?我经常带我儿子去花鸟鱼虫市场,基本上一礼拜去一趟,就像这么大那个金刚鹦鹉是亚马逊和产的,这么大的金刚鹦鹉知道多少钱吗一个吗?
40:13
这么大的金刚鹦鹉?一万多15000。就是说有个人这个这个人也经常去逛花鸟市场,对这些市场行情比较了解,才去逛宠物商店,结果发现一只金刚鹦鹉,别人的金刚鹦鹉卖一万五左右,这只鹦鹉3万,这人就觉得有点那什么,老板,你的鹦鹉也太贵了吧,别人才卖15000,你凭啥卖3万?老板说了,我们这只鹦鹉除了说有普通的功能,会说话之外。还会说多国语言,所以我卖3万,你拉他左脚会说英文,你拉他右脚会说日文,所以我卖3万,不行,你试试,哎,这牛这鸟挺聪明的,然后你拉着左脚,How are you doing how are you。
41:03
然后说的说的挺利落的,然后这人说我拉的右脚呢,How are you goodin us,说日文,然后这就想,哎,这鸟真不错,哎,我俩脚一块拉呢,俩脚一块拉,鹦鹉来了句,他妈差点摔着了。注意。这就是那只鹦鹉。你要么拉他左脚,要么拉他右脚。别一块拉。别一块拉一块拉就说了,你他妈差点摔着啊,不能两边都出现。加号不能同时出现,不能同时出现在等号。
42:02
两边。注视掉它多行公式。这是这种。等值查询,非等值查询,然后自连接,然后Y连接,这是CIRCLE19991992的老标准。搜狗1999制定出来的新标准。交叉连接,注意新标准和那个老标准的查询语法就完全不一样了。交叉点。From from后面只有一个表,而我们用老标准的时候,From后面可以有多个表,但是新标准里头from后面只有一个表。
43:15
他怎么去连接另外一个表呢。DEP。Cross不就是拐角交叉的意思吗?差一点想D。写不出来了。E点形,D点型。交叉点。这么慢。
44:03
怎么变得这么慢了?注意所谓交叉点。就相当于在老标准的等值查询中没有写入等值条件一样。产生一个笛卡尔乘积啊。交叉点这边和你那边一个个交叉着。就相当于。搜狗1992。老标准的时候。
45:03
一九九二老标准等值查询的时候没有。给出正确的等值条件会产生第一。它乘积,所以叫交叉连接,交连注意它的连接另外表的一个方式都是通过什么什么状语方式来连接另外一个表了。第二,自然连接。在父子表关系上自动的查询。连自动的。
46:10
匹配。脾。哎,两个表中列名。完全相同的字段。在这些。相同名称的字段上或等查询。现在你这两个表里头。有父子关系。那这个表既然说有父子关系了,他们之间肯定存在着主键外键啊。
47:12
第一,PT拉姆。阳气男模。这两个表之间存在着主外线关系,它有一个相同名称的部段字段,叫dpd number。这个表里头。有个字段叫。谁那还开着票票呢?这个表里头有个字段叫AA。
48:02
这个表里头也有A。但是他们。不是那种。负外键关系。那用自然连接的时候,它就不管你是不是主外界啊。他只要找到这两个表里头有相同名称的列,那它就用来做等值条件,也就是说。Where e点等于d.a and e.bpd那等于d.BBD。不管你愿意不愿意,它自动去找这种列名相同的字段,在这个列名字段上做等值查询。这个列名相同的字段。我们称它为参照。D。From。
49:03
Na natural good BP。然后我查1.erpnumber一点一点dp number d.d name d.l cid。Natural连接中使用的列不能有限定词。这叫参照力。参照列上不能使用前缀。参照列上不能使用。
50:05
前缀看他报的错。Natural连接中使用的列,也就是参照列,不能有限定词,这哈,你什么都不加。才行。它自动去找你这两个表里头,注意这两个表里头有相同名称的字段,都叫dpd number吧。那他就在这个第pd number基础上做等值查询,也就是我们上面做的这个,那如果说你这个两个表里头还有其他名称的字段呢,相同的字段,它就一块儿把这个条件给你加上。那现在我们用等值塔,这个叫自然连接。那我们能否用它去查?
51:01
部门信息和位置信息。用自然查询自然连接行不行?Sweat from,这不是dpd na nature draws。好,能否用自然查询从这两个表里查查d.DPD点第那个,注意先在这两个表里头。有参照列吗?他列名我故意写的不相同,一个叫LCID,一个叫LC-ID。那我这把那个我给他省略掉,那个叫。L加LC内。
52:04
两个表里头没有参照点。会产生笛卡尔乘积。一共是四个部门,四个部门三个位置,这不产生第加二成绩了吗?当两个表中没有参照列的时候。自然查询或者产生第一它。要求用自然连接你这个两个表里头必须要有列名相同的字段才行。
53:01
那。自然。连接的缺陷。第一。会把所有的参照例都作为。等值。调解,我这两个表里头,虽然说有两个A,都有两个A。但是我这两个表,这两个AA之间没关系啊,我有员工名称,这儿有部门名称,都叫name。那你用自然连接的时候,它就都给你加上了。显然是多余的呀,不管你愿意不愿意,他都给你加上了。第一个问题,自作多情的把所有的参照列都作为等值条件。第二,如果参照列的类型不同,这边是一个date类型的,那边是个数值类型的,那你往一块等,结果一等肯定就报错。
54:19
如果参照列的类型不同。查询会。不错。这是我们用自然连接的时候。自然连接有这两个问题,那为了对自然连接有一个改进,人们又提出了一种draw。U。也就是using,在using不是使用的意思吗?在自然连接的基础上。
55:04
加以改进。使用指定的参照力。来作为等值。着解,你刚才用自然连接的时候,它不是自动找所有的参照列吗?那现在我就可以使用指定的参照列来作为整治条件。From e。Join dept Du and,现在个呢,DEP,那么。那注意这两个表里头存在不存在参照列的问题。
56:04
也要用到参照列呀,所以参照列上也不要是前缀一点羊皮那么一点。D。第二。这是BPT那B点。LC那个d.LCD。使用指定的参照力比着只用DD number来作为等值条件。那我想加入条件呢。Well。B点两平面等于7369。我当然可以加入其他的查询条件了。外。赵家不。
57:03
转悠字句。好,我们先下课休息一下。
我来说两句