00:04
禁止对视图的操作,删除视图不会影响数据,删除视图的时候做不了。然后行内视图就是出现在front。查询。也就是。你说是图,但是该视图没有物,不会在,不会在数据库库保存,出现在from后面的子查询。
01:09
那现在我们用行内视图可以干嘛呢?比如说我们想要去查询。工资最高的人是谁?咋办?用一个ma子塞了是不是就OK了。查询工资最高的是谁?骂子塞了,那我现在要查询。工资最高的前三个人的所有信息。查询公司。最高的前三个这样一个信息咋查。
02:20
那查工资最高的,我们是否说应该先对这个工资按照由高到低来进行排序啊?From from BMP。Older来了D。工资最高的几个人是这个?
03:05
那注意这东西像什么,有字段字段字段字段一行一行,一行一行。是不是像一个表啊,从哪查,从这个表里查不就行了吗?那你从这个表里查的时候,注意这有一个123,我只要让这个这个东西小于等于三是不是就行了,那这东西是啥呢。From,我把这个。1.3号。从这个里面去查。
04:00
这个123叫啥呢。Number,一个伪列,一个虚拟出来的列。Number,注意这号叫E啥意思?你这不是相当于一个表吗?我给这个表起个别名,一点星条件呢问。拉小于等于三。Number不就把123拿出来了吗?最高的前三个人的信息我都拿到了。那现在我想查工资最低的三个人的工资最低的四个人。
05:04
我是否说让number大于等于12可不可以?Number大于等于12。这不就是工资最低的四个人吗?户型。只能用到小于等的情况。柔拉姆。只能是用。与小于等于情况不能适用大于等于情况,那我想查工资最低的四个人的信息咋办呢?
06:13
我把这个查询语句这个from后面这个行内视图。我让它升序排列,然后我用number小于等于四不就OK了吗?注意这种方式。被称为。被称为套N。分析的最什么什么的一个。
07:02
不是最是最什么什么的几个。我要查最高的,我只用一个MAS,但是我要查最什么什么工资最高的几个人的信息,我要使用这种top。在这我们用到了一个row number伪列。然这种套装分析的模式。就是。Select字段order by你要排序的字段where number小于等于。就是这个套路。只能适用于小于等于的情况。
08:00
我们看一下number详解。创建了一个表,学生表ID name,很简单。我插入了1234567,按照顺序插的走。提交了。数据插入的顺序也就决定了查询的顺序,我是按照1234567查的。插入的顺序决定了number查询的数据,也就决定了number的数据。我第一条查的是一张,一查出来它就是张,一查询的顺序,也就决定了number的顺序。第一岛。我是按照这个顺序插入的走。
09:06
第一条我插的是三二。1002张二。插入的顺序也就决定了number的顺序。那number对于等于某个值的情况,比如说我们想查到现在,我把数据给它,还是按照1234的顺序来看。现在我想查到第一条。想查到第一条学生的信息,可以使用row number等于一作为条件。Slide number t点星from这个where number等于一可以找到。但是说想找到第二条,第三条以后学生的信息。
10:02
你用number等于二。没有。Number等于三等于四等于五都是没用的。你说我这个number等于三没用。因为奥瑞认为number都是等于一的,只从一开始,它只认为等于一的条件成立,你要让说number等于二,等于三,奥瑞就默认的认为它不成立,所以你就找不到。只认容纳等于一。
11:01
那我们想要查到第二条以后的数据?使用number大于等于二,我想查到第二条以后的数据。找不到。容纳认为大于等于某个值的情况也是不成立的,也是看不出来数数的那。怎么办呢?这时候你能加上number,你用roll number大于等于二找不到啊。那怎么办呢?答案就在这儿放着呢。
12:03
这是这个表里的ID字段,内容字段。这是啥?这是这个表里的一个字段啊。我从这里面查不就行了吗?明白我的意思吗?啥意思啊?我把这个当成一个表行不行。从这表里查呀。这不就是用到我们的子查询了吗?出现在from后面的查询,一个子查询,也就是一个行内视图,我从这里头查不就OK了吗?但是在这儿哈,一定要记着给number起个别名。
13:05
要么你再用number就和外头冲突了。这个字段叫啥叫number,那这时候我想怎么用就怎么用了。我们一开始说你不想查大于的情况的Y。Where number大于三。那我在想查某个区间and number小于四大于等于。大于等于二。小于等于四。我就可以查看某个区间的范围的数据了。Number。Number对于小于等于某个值的情况。
14:04
小于等于三。刚才我们在用top n的时候,就是利用了number这个特性,它只能找到小于等于某个值的情况。Y小于等于三。可以找到。因为number只认小于等于三的情况。刚才我们用了一个子查询,可以去搞定它大于某个值的情况。那现在。我们想要查询区间的范围的数据。我可以用此查询。这是通过子查询来搞定的。把这个number做成我这个视图的行内视图里的一个字段啊number,这时候外面我就可以用这个number作为条件,Number大于等于二,N小于等于四,再看number指认小于等于某个值的情况,那我们还有没有其他方式?
15:16
来查询一部分数据呢。除了说我们用上面这种方式之外。小于等于某个值的情况中,Number是认的吧?那咋办呢?我们要查二到四的。
16:00
这里把小于四的过滤出来了吧。那片呢?有一个number。Y大于等于二。先差都小于等于四的,注意你这里头不是有个number字段吗?Y number大于等于二。这样我不就查出来二到四了吗?跟我们上面这种方式都可以实现。查询某个区间内的数据应用情况。Number和排序。三个。按照来排序的时候。
17:05
张二,他的二是ER,六是L,他肯定按照那个阿克马的顺序,E是排在L前面的。那现在我要把注意,我第一个查出来的是张二。我要把张二的。当做一。那我给它加一个柔软不就行了吗?Number,它的点心from这个加一个number y,我们把张二啊加一个number不就行了吗。不行。为啥?因为你数据插入的顺序也就决定了number的顺序,我们第一条插的是张一,那number的一永远是指向张一的。
18:09
数据插入的顺序决定了number的顺序啊。那咋办呢?那咋办呢?答案就在这儿放着呢。你这样查的时候注意这有个一吧。我从哪里查呢?我从这个表里头查不就行了吗?
19:00
又得用到紫查询啊。那。这里头张二。不是排在一的吗?这我不加这个了。这里都是二,不是还在一的吗?No。T,这是E叫p table t点。
20:00
这样张二不就是我们给他规定做成一了吗?又要用到此查询。可以说此查询非常灵活,Number一个伪例。然后还有一个ID。是二弟。肉ID干嘛的呢?也是一个伪列肉ID一点星。这里面的aame FA什么的都是有具体含义的,代表的是它在硬盘上存在哪个空间,存在哪个磁道,存在哪个扇区。
21:01
也就是他在硬盘上存放的物理位置。但问题是说,你这条数据在硬盘上存在C盘,存在D盘,存在F盘,和我们关系大吗?你用管他说这条数据存在C盘,存在D盘吗。它存在哪,跟我们没关系啊。但是它有一个另外的副作用。啥副作用呢?用UID你能获得数据的修改权啊。获得它的修改权之后,你就可以打开这把锁,之后你就可以修改它的数据了。可以使用柔ID。来获得数据的修改权限。
22:05
我把张一改成张二了,然后我把手放开,我再查一遍,你如果说没有加。柔加这个柔ID。我想打开这把锁。这个查询结果是不能更新的,Includede the row I包含一个row ID去获得一个可更新的结果。那在这我给它加一个柔ID。加了一个UID之后,我就能打开这把锁了,打开这把锁之后,我去修改它的数据,改成张三。提交放在这把手,用柔ID来获得数据的修改权限,我们看这哈,编辑数据的时候。
23:05
他为什么能打开这把锁呢?就是用了一个柔ID呀。这样你不就能修改它的数据了吗?张一张二。PA。修改之后提交。Number ID。透分析吧,Number的伪例,还有ID的伪例。同义词。
24:09
同义词就是数据库对象的一个别名。可以简化。访问其他用户的数据库对象,Slight from sy sy。C from sys.Du。
25:00
XY x.duv啥意思?我们查询系统日期从哪查呢?从SYS用户下的duv表里去查。你这个表是SYS用户下的DV表。那如果说这个用户名比较长,这表名比较长,那我们写起来多麻烦啊,那现在我就可以给它创建一个同义词在这。新建一个同义词,你这个同义词的名所有者是谁?SC同义词的dul,我们叫它Du杠杠,一给他起个别名,你愿意起啥起啥。就叫do吧。对象的所有者是谁?YS它的哪个对象?
26:01
D。查看so后,可瑞这么一个关键字,For哪个?把这个领域放到这了,这个刷新一下,同义词已经创建了,那我在查询的时候,Sweat d from那个名字叫什么D啊,我就不用再写那么麻烦了。给SSDV取个别名啊。你就直接从这里查不就行了吗?同义词好处,简化了访问方式,缩短了长度,屏蔽了对象的名称,你就从这里查就行了,你不用管它来自于哪。
27:01
删除同义词就是做。然后数据库,在O数据库中,我们最经常用到的还有一个。序列。序列干嘛使的呢?用来维护维护的主线数据。首先我们回顾一下什么样的字段。什么样的数据应该可以被当做主件?
28:00
和娇娇。什么样的字段能当做主线?唯一的不可重复的那人里头是否应该选身份证啊?和实体和业务数据无关的流水号。我们。人里面,人里面有姓名、性别、年龄,身份证,应不应该用身份证号做主编?不应该,因为你的身份证号是人实体里的一个业务数据啊,我们不应该用业务数据来当做主件,因为业务数据是可以变的,应该用一个和实体无关的流水号,一二三四六七八九十勾二给它用一个流水号来当做主线啊。那作为员工表来说,我们给他加了一个EP number,作为部门表来说,我们给他加了个DEP number,作为学生来说,我们可以给他加个学号12345,这就是和业务无关的流水号啊。
29:12
那如果说我们在做数据库的时候。你这数据库上的东西太多了,我不用不动你了,给你保留着吧,我切到我自己的数据库上了。现在我这讲课制的时候,我一直是连着瑜伽的数据库,现在我把我的数据库起来,起来的时候要起这个service,就是这个listen,起这个service。
30:01
其这两个就足够了。连到我自己的上面来。T。一样。那我们比如说瑞的。
31:10
处。4MP。好。兔十个。我们给ID创建了主键。Sid,那我在账号插入的时候。音色的音。张一。
32:06
234,我们就反正就是插入了几条数据。那我下次再插的时候。下次再插的时候,我是不是先得查一下我这里最大的ID是多少?Mark s I from。四然后你得在这个基础上加一。
33:01
作为它的下一个插入语句吧,那我们看能不能这么使。颜色的土。Violence。看他能不能让我们这么使。第一个字段。啊。没有这种用法,那你在用的时候呢,他既然不让我们用。不让我们这么用,那你就得先得查出来它的最大的数是谁,然后你在这自己去控制五。
34:00
这是说由我们自己来维护数据库的主线,你得分成两步做,先查出它的最大号,然后在这个基础上加一。这是我们自己去维护数据库的主线。但是现在这个操作不用我们自己来做了,可以交给序列来做,序列就是做这个事的,专门来维护数据库的组件,不用我们管,由序列来做。EROT。删掉它了,我重新创建出来这个表。
35:06
那现在我可以去创建一个序列。Circus。序列的名字叫EQ-SSE,我们自己起个名字,最小值是E,最大值9999,因为我们那个number是四个。开始于一不长是一开始于一不长,每次增加几个。Create a circle。把这一句往这一放,放见困这一句走。一个序列。那我们去使用。
36:01
因色茶寅土染。Y64你在用的时候,你那序列叫啥呢这个。第2XY了。第二个是。就不用我去管这序列了,走走走走,我现在一直按F8插入呢。提交。查询。我差了多少条了呢?
37:09
差了37条。我也不用说,我再去取它的最大值加一,我就直接差。我只要调它的x.Y6就行了。差到45了。我下次再查,直接肯定是46。由数据库来给我维护呀。那我删掉,注意现在序列已经到46了,下一个值肯定应该是47吧。比例。SI大于等于十。
38:07
我把大于等于十的删掉了,那我现在再去查。注意刚才我们说那个序列是到46还是47,来了46看着线再差。是说他把序列也给你回滚回去了吗?没有那好事的,你用这个序列只能用一次,你别说你把它删了,序列自动回滚,没有这功能。那这个东西。他怎么记着下一个就是48呢?肯定是说你这东西在在数据库里头保存着呢吧。你要数据库里头库保存着,他怎么知道呢?这东西在哪呢?
39:13
Current value当前值在哪呢?在Du上面。Du。我干掉了。DUL。实际上在数据库里头记录着呢,在SYS这个用户下的Du al里头记录着你这个序列的当前值current value,那它在做的时候就自动取出它的current value,你在调它的next value的时候,它自动调这个序列点car y6加一,由数据库来过了。
40:03
序列我们维护数据库,Oracle中维护数据库组件的一个策略。但是在不同的数据库里头,对于这个主键字段有不同的维护方式,作为or数据库来说,用到这个S序列,但是在my circle里。在so里没有区别。它采用的是另一种方式,叫自增自断。你只要把这个字段设成四中字段哦,就是说my circle口circle server就管理,把序列的事搞定了。数据库对象。
41:07
关于这节课的内容。到后面你们等到后面第二阶段的时候,你们再去学习如何设计数据库。现在为时尚早。P缩口。啥是PL松口?Programgm language。编程语言,也就是说PL circle就是编程性的circle语言。注意,PL circle是or瑞针对circlel语句所做的扩展。circle语句是什么呢?Circlel语句是关系型行数据库上通用的官方语言,SQL server支持S吗?
42:06
支持不支持?云南支持不支持普通话,浙江支持不支持普话,那我们这个SQL语句就是在关系型数据库上通用的语言,就跟我们在中国普通话是在中国通用的官方语言一样。任何的关系型数据库都是支持缩口的,但是我们用搜口语句的时候发现它。基本上都是。固定的。上课的时候有的同学说这个思考语句学的时候比我们学的Java要简单多了,一个个语句就是死的,你就去套用不就行了吗?但是我们发现就是因为它是死的,所以它比较简单,那我们用编程语言的时候可以写的很灵活,所谓编程语言的特性就是什么呢?无非就是循环判断分支。
43:04
就是因为有了这些循环判断分支,可以让我们的程序变化多端。那所谓的PL口。就是奥瑞针对circle语句所做的扩展。在circle语句的基础之上。加了编程性语言的特点。加入了循环判断分支,我可以加入异常动力等一系列编程语言的特性,这样我就可以完成更复杂的一种情况。那。Server支持PL吗?刚才我们说了,是奥瑞针对circle语句所做的扩展。它只支持Oracle数据库。这个PL circle的话都是有两面性的,所以两面性它有好的一方面,也有坏的一方面,好的一方面是什么呢?你所有Oracle数据库中的很多高级功能。
44:08
我只能通过PL搜狗来完成,搜Q是搞不定的。那么这是它好的一方面,我可以让数据库的调用更快形成一个模块化,我可以被反复的调用它的好处,但是坏处是啥呢?先说它的好处,这就跟你要学习or瑞,你说你没有学过PL?就跟你没学会out一样,比如说到北京来,你觉得必须要做的几个标志性事件是什么呢?比如说你应该觉着到北京来,你最起码应该到长安天安门那去转一圈,然后你应该去爬长城。到北京来还有啥标志性的建筑,标志性的动作吃,爬长城,然后去天安门,然后我觉得最重要做一件事就是吃烤鸭。
45:01
当然不是说去吃那个天外鲜的烤鸭,你得去前门那那个全聚德那儿吃烤鸭,那是正宗的老店。如果说你要到北京来,你没有去全聚德那儿吃过烤鸭,就跟你没到北京来一样。就比如说你到到荷兰,你没有去看它那个北海大坝一样,这是一个标,到中国来你必须得登长城吧,就跟你到中国来你没有登长城一样。你学到or瑞,你没学PL circle就跟这一样,就是说or瑞的好处,但是说奥瑞的坏处呢,啥问题呢?现在我们的数据库有一个追求的趋势,就是说什么呢?我这数据库我写了这些S构语句,我可以让他。怎么说呢?由这个数据库移植到另一个数据库,一开始说我们公司有,公司有一笔融资,融了几个亿,咱们有钱了,一人发你们一个奥瑞数据库啊,一个几十万的数据库,一人发你们一个回家玩去吧。
46:04
但是后来一想,哎呦,那融资失败了,咱没钱了,咱一人发一买circleq玩去吧,买SQ是不花钱的,那现在如果说你的数据库中,在你的数据库就是搜狗语句里头用了pfs。对不起。您整个以前的操作都废了。只能重新开发。因为PL circle是没有办法移植的,Circle server上面是不支持的,你要说移植到my circle上面也不支持的,只有or瑞才支持PL circle。给他的移植带来问题。没有办法移植,因为它是奥瑞针对思后语句做客扩展,只支持奥瑞语句,但是我们大家在写简历的时候都是说精通奥瑞。你别写,说熟练使用,你就写精通,所以精通的,啥叫精通呢?拿过来就能用,这不叫精通吗?
47:02
我们不是去做DDA的,作为程序员,你能够增删改查,你能够熟练的使用PL搜购语句,能够建立表,建立表,然后删除表,这些足够了,这就叫精通了。你得看你做的是什么,我们做的程序员,我们做的不是DDA,那你在说你用过精通。Or瑞来给我写一个PLSQL的分页的存储过程。你经又蒙圈了。啥叫存储过程啊?你能告诉我啥叫什么过程吗?那人家考官怎么说这就叫精通啊?那你不是现眼了吗?所以说作为我们来说,还是要拿出后面两天的时间都是要去讲PL。PL circle,先给他开个头吧,休息一下。
我来说两句