00:00
这个问题说的是什么呢?有一个数据库,里边装的很多信息。然后注意的是,不同的人员关注不同的数据。哎,为的是什么?保证信息的安全性。比如说你是公司的老板,那么你会关注整个这个数据库里边所有的数据,因为这个里边的数据是咱们员工的所有数据,OK吧,老板是不是得全都方方面面都得知道啊。OK,再来一个。人力资源主管。做人力资源,做人资的,他过员工编号不需要关注,只关注这几个列是不是就可以了。再来一个。他只关心钱是不是就可以了。我管你叫谁呢,我管你这个这个这个技术还是营销呢,对吧,他只关心这个钱。然后嘞,员工。他只能关心你还特意看啊,我拿一个红框框起来了。
01:03
啥意思啊?哎,只关心自己啊,只关心自己。你不能访问别人去。不能访问别人。这也是公司的一个忌讳啊,以后大家上班的也是啊,不要问同事的工资啊。还让领导知道了。不说开,你也差不多了。就是破坏内部团结啊。OK,所以说不同的人是不是关注的数据不同啊,那咱们应该怎么解决这个问题呢?怎么才能把这个问题有效的给他解决一下。咱们应该这样,就是给不同的人生成不同的表。对吧。人力资源呢,就给你生成一张人力资源的表。员工呢,就给你生成自己的一张表,老板呢,生成一个全员的表。那这样的话生成这么多表是不是很浪费空间啊?
02:02
浪费空间啊,那个表肯定是占地儿的啊,所以咱们不应该采取这样的方式。哎,不应该采取这样的方式。那么咱们应该怎么做?可以采用视图这个东西。视图这个东西。往后边呢,这样看。啊,这是咱们的学员个人信息是吧。这边呢,是咱们学员的是不是成绩啊。然后这两张表合二为一,就产生出这么一个结构,这个结构呢,方便查看学生的成绩,我就知道郭静考了多少分。对吧,而这个结果是自上两个表来的。以上两个表来的。其实这个过程。咱们之前就学了,做一个表连接,做一个查询是不是就OK了。给不同的人做一个不同的查询,是不是就可以了?
03:03
我告诉你,执行这个代码就是你要的数据,另一个人呢,你执行这个代码就是你要的数据。但是。没问题吧,这样搞。但是呢,还是很麻烦,写的代码太多了。咱们也看到了什么最近一次什么什么课考试的分数,那个思科语句是不是很长啊,你每查询一次你都写一遍,我的天呐。累死了是吧?所以咱们怎么办怎么办。哎,这么办?啊,这个文字部分咱们回头来说啊。比如说。现在我想看一看什么呢?比如说我想看一个这个,这个就是员工和部门的一些东西吧,相关的信息哈。咱们正常写。啊,员工。写个表连接啊,员工编号员工的。名字。
04:01
再来一个钱,再来一个部门的名字,我得知道你在哪个部门啊。对吧,然后呢,我还想知道你在哪个区域。哎,你是什么销售部,我知道你是南美洲的还是北美洲的,我想执行这么一个操作,OK。那这里面涉及到几个名啊,我把这两个起起个别名啊,这个叫做部门啊,先先补部门先是。区域。负责区域是吧,后边这个来一个是。诶。应该是先部门哈,然后后来是去。这个是部门。行吧。哎,前面这几个就不改了啊,就这样。好,来看这里面涉及到几张表。员工表。还有一个。不玩了。还有一个。
05:01
区域表。三秒关联。员工表的员工表的什么?部门ID等于部门表的ID。部门表的。区域ID等于区域的IDOK,然后这个ID呢,很多表都有,它是员工的。好,A直行。哪个列啊,Name这有两个name呢是吧。一个是部门的,部门的一个是。区域的。没问题吧?来。好,这就是我要的结果。行吧。卡门管理部,北美洲的是吧?呃,茉莉运营部,北美洲的。这就是我要的结果,但是这个结果啊,你会发现我想给大家呈现出来,我是不是得会三表连接查询呢?
06:02
很麻烦的一件事哈,你要不会三秒连接查询?咱们刚学数据库第一天,这个结果你是根本不会无法看到的。那能不能简单点啊,看好了啊,接下来我要利用视图了,有点类似于什么呢?我将一个复杂的查询封装成一个单一个单词A。简单点吧,ABC吧。A,怕是关键字哈,我把整个这个查询非常复杂的查询封装成ABC以后,大家想看这个结果查询ABC就可以了。好,怎么做,看好了。那就将这个复杂的语句创建一个视图,Create view。叫啥名呢?叫ABC行吧,艾一下。这个就是创建视图,视图中什么内容,什么内容,这些内容。执行。好,权限不足。权限不足啥意思呢,就是说我这个用户。
07:02
这是我这个用户吧。我这个用户并没有创建视图的权利。我没有这个权利咋办嘞?是不是得授权呀。看好了啊,接下来的过程我必须要授权了。怎么授权呢?登录。系统账号。123。我得登录系统账号一二三点这个这个这个什么,这是。这是个插头是吧。连接。连接了,现在我账号是不是切换到系统账号了,OK,授权。赋予。普通。用户。创建。视图的权限。代码。Create will。
08:00
我这个账号。授予创建视图给我的账号,OK吧,代码一点都不难啊,执行。没问题,好,先回我自己的账号。先回来了吧。好,这回呢,我再次执行以上代码。成了吧,成了那以后呢,我想看一看,什么咱们公司的部门的所负责区域啊,我就不需要写这么一大堆了。因为我将这么一大堆封装成了仨字母,所以想再查easy select星from阿波茨。完事。看清啥意思了吧?这样的话是不是简单了,不管你学没学过数据库,做一个简单的十分钟培训,你是不是就可以各种查自己了。哎,这就完事了。
09:00
所以说大家再来看啊。假设我随便写了一个查询selection from啥也肯定没有这个东西吧,一直行,他报的是什么呀?并不是说只说表不存在而说的什么。硕或视图是吧。说明,Select形from后边,From后边跟的这个名。可以是表名,也可以是视图名,好在刚才咱们这个过程中。我在创建的这个视图。ABC即为视图的名称。视图的名称。OK吧?OK。看清刚才这个过程了吗?其实有点类似于咱们Java这个原理中的,是不是一个封装啊。将复杂的代码。封装到变量中,然后以后访问是不是就访问变量就可以了。OK,这是这么一个过程。好,这个过程想要创建这个视图,一定要记住什么呀,一定要记住要授权,当然这个授权你只授一次就够了。
10:12
OK。赋予一次就够了。啊,然后呢,我再给大家看一看ABC在哪儿呢?咱们之前建一个什么什么什么表啊,是不是在这儿能找到啊,刷新一下。在这table是不是可以找到history呀?那咱们创建这个视图在哪找呢?这儿呢,看到了吗?Wills对吧?里边有没有我的阿伯词啊?有吧,哎,再点一下是不是数据在这呢。在这有同学说,那为什么不会不把视图和表合二为一呢?因为他俩你看我点这个东西看数据。是不是也是表结构啊?啊,也是表结构其实。
11:00
哎,等会儿。点快了啊,双击他,双击他。你看它其实这个ABC视图里边resource源代码存放的是什么?它存的并不是数据,存的是一个查询语句。记住了,视图不保存数据,只保存查询语句。这个在咱们PPT中会有演示啊。来把这些明白,这个过程之后,回头来读一遍这里边儿的文字部分。首先视图是一张虚拟的表,为什么是虚拟的表?看这。因为一张,它表示是一张表的部分数据或多张表的综合结果。对吧,我刚才那个是不是。走在后边这个套路啊。都做一个表查询嘛,是吧,然后其结构和数据是建立在对表的查询基础之上。
12:05
换句话说,视图里边没有数据,它只有查询语句。查询语句,那正好看下一句啥意思。视图中不存放任何数据。数据存放在视图所引用的原始表中。OK。我本身不保存数据,我这里边儿展示的数据70。只是在原始表中,我给他拿过来让大家看一看。拿过来看一看而已。好一张原始表,根据不同用户的不同需求,可以创建不同的视图。啥意思呢?就是咱们的student这个表啊,是不是一张表啊,可以为这张表创建多少个视图呢?可以创建无数个。对吧,需求不同,创建不同的视图。OK,这是这瓶。
13:02
这个创建语句create will表这个这个视图名,这个视图名。一般它也有命名规则是吧,Will做前缀,看到了。后边这个名呢,你爱吃啥吃啥。然后删除视图,跟删除表一样。是不是咱把ABC干了它?来。啊,不是这儿哈。这呢,我要把ABC这个玩意干了它啊,那就是你删除表达写。Job是吧?当然现在不是表啊,它是什么?Will ABC执行好你再执行查询,ABC不存在了。哎,对了。咋办嘞,你再见一遍去呗,是吧。然后呢,我在PPT里边这块也给大家指明了,Oracle中普通用户本身没有创建视图的权限,需要对其create。
14:00
富裕。创建视图的权限才可以,刚才演示过了是吧。好,然后呢,咱们来看看做这么一个东西啊,他说学员操作说统计每个学生各个学期所有课程的总成绩。看好了啊,学号姓名电话等级,然后后边来的是啥呀。总分。总分这才正确呢,对吧。我来统计一下你的这个整个学习的总分吧。好,这个他说。视图是吧。咋做嘞?我先来。呃,把这句话粘过来啊。写这个视图的时候啊,大家得看,我也是先写查询,然后这么搞一下是吧。来查询查啥玩意儿忘了。学号写上。
15:01
姓名。还有啥来着?电话年级是吧?电话问我年级,Great,这是名啊,年级的名称。好,最后一个是啥呀。总分吧。哎,总分。呀,总分这个涉及的问题可就恶心了。因为它涉及到聚合函数。它会涉及到。分组查询对吧,那你也得写上啊,人家要这个东西啊。对吧。来student result。啊,对对对对。Some是吧,总分哈,一样的哈,改个单词好吧,来自于都什么表。这这这这这这到这儿。学生表。这个。表。常见。Result表,三张表,给它起个名呗,S。G。
16:01
而。好了,写关联条件。学生的年级ID等于。Great great ID。对吧。这两个对不对,瞅一眼。十六十六十六。Great ID关联great的great ID没问题吧?这是一个关联条件。好,第二个关联条件。什么呀?学生和成绩靠谁管理?对吧。R。序号好了,直行报不报错。百分之一百二报错啊,为啥呀。有聚合吧,所以要group。拜拜谁?哎,除了聚合的其他列,这个其他列好多呀。
17:03
但是这个student no是不是好几张表都有啊?指明一下学生表的。所以把这个东西全都要放在下边。呃,分组。好嘞,来执行。是这个结果不?哎,我去拽不上来了。呃,这个没排序是吧。对吧,有300多分没排序啊,他这个结果应该是。排序了是吧,咱把这个总分排个序吧。排序应该在最后吧。All by谁呀?是不是就这个总分啊?哎,总分,然后。BEIC。我去。够长吗?第一名是不是今年啊?好,跟我这个结果是不是一致的,三百四十八三百四吗。三百四十八三百四是吧。好了,那这么多东西啊,一般人是不会写,咋办嘞,我帮你封装一个视图。
18:13
Create,刚才咱们是不是这么写的create view啊,这没问题吧,然后我中间加了个这个单词,你。哎,这个是创建。或者替换。或者替换。哎。也就是说,如果你整个系统中没有ABC,则创造ABC。如果已经存在了ABC,那么咱们将会。替换ABC。OK吧,好,刚才ABC是不是让我删了呀。来,我上面再把这个创建一遍啊。啊,执行。好,咱们来查一下这个ABC,这个ABC里边装的是什么,关于这个卡门是吧。
19:03
好嘞,来看我这段代码。我是不是还是叫ABC啊执行。哪有问题?我这个执行看这个没有问题啊。这没什么问题是吧?A great,或者replace will。他。嗯,没啥问题啊。恶心了。是这样的啊呃,这个报错呢,并不是我这儿的报错啊,是因为我这个里边有聚合,我必须得把这个聚合命名成一个列名。就他这个名啊,不能当列名。换句话说,这样。我把它起个别名,总分行吧。它执行结果这块你看。看的还很明白是吧,然后你再执行。
20:02
没问题了吧?哎,聚合要重新命一下名啊,好了,创建完成,刚才不是说ABC是那个员工吗?现在我再看看ABC是啥。是不是给他怎么样了,是不是要替换了。OK,是不是要替换了?好了,那这个过程呢,咱们就搞定了。搞定了。哎,以后呢,你告诉他查询ABC就行了。不用写这么多东西了。好,这个呢。写完了这个写完了,然后呢,再想给大家说一点是什么内容。大家看。往上拽一点啊。这个视图现在是不是ABC就是这个结果啊?就是这个结果吧。现在呢,比如说我想查呃。就差300分以上的同学。
21:00
对这个视图我仍然支持。条件的过滤。用总分,你现在你看这个结果ABC这个视图中啊,你这个列被命名成啥了。是不是叫总分啊,所以条件就是。总分。超过300分。OK。对吧,哎,它是可以再次进行过滤的。再次进行过滤的。这就视图的视图好不好用。我觉得还是很好用的是吧,很好用的啊。这样的话呢,咱们把这个视图呢,就说完了。
我来说两句