00:00
接下来咱们讲的是分页查询。咱们的需求就是每页显示五名员工。有没有不知道分页是啥意思的?有是吧?什么叫分页查询呢?呃,我看哪个网站上会有啊。比如说来一个什么网站。小网站都有哈。但是我也不知道啥叫什么小网站。别别别别。搜搜,万一搜索坏了啊。再来一个有没有分页。没有啊,现在都没有这个费劲了啊。我想想啊。哎,百度对对对对对对。咱来个什么牌做分页查询?哎,就就是查分页哈,就这个意思,看到了吗。哎,我所说的就这个。这个就叫分页查询,当前你看啊,它显示的是第一页,而咱们这页一共显示多少条数据呢?它是有固定值的,你看大家多少条啊啊一个两个三个是吧。
01:11
4567。八九十应该是十个是吧,然后你到第二页呢,1234。我,我去。我去哪去了?1234是吧。567890OK。是不是第一页显示十条数据,第二页显示十条数据,第九页它其实也是十条数据。OK,现在知道什么是分页了吗?就这个分页查询啊,比如说现在现在咱们这个表中啊。这个表大家都知道,一共有25个人。然后呢,共有25人啊。
02:01
员工表共有。25人,25名啊。然后我要求每页显示五名员工。求计算。计算第三页。的员工都是谁?OK。一共有25名员工,每页显示五名的话,那其实每页显示五名的话,一共分多少页啊。是不是五页啊,哎,第一个就是像分组一样,第一组五名,第二组五名,第三组五名。然后我要的就是这第三个五名都是谁?第三个五名都是谁好?那这样的分页查询咱们必须得学会啊。好,咱们按照这样的套路的话,再来看看怎么查的。那么ID,比如说咱们的第一页哈,那就是前五个呗。所以ID大于。
03:01
从大于零开始,并且ID小于等于五。是不是就是前五个。那么五之后的第二页,这个第二页说的也就应该就是六到。10OK。咋写嘞?大约。我小学。OK,是不是就是六到十啊。那我要求的第三页。70是啥多少?十到。哎,就这几个,这就是我的目的。OK,那分页查询就这么简单吗?就这么简单,还学啥的?肯定没这么简单吧。OK,这样写分页是绝对不行的。为什么呢?假设。S员工。九号。删除。好点那个减号就删除啊,就写着呢,看到了。
04:00
点赞。然后这块得提交一下啊,就点一下这个红色的箭头。好了,来再看啊,前五名没问题,12345,而且还得观察,总共为五条,没问题吧。第二个。尴尬了。就没了。这不行吧?哎,第二页应该显示成多少数据啊,你不管ID多少是到多少,你必须得显示,我这显示什么,必须得显示五个人出来吧。哎,得选出五个,选出五个,你这么搞肯定不行。肯定不行,你中间如果一个,那下一个。按道理来说,11是不是应该给我补上来?这才是第二页。哎呀,这咋办呢?这种方式。
05:00
以上的分页写法不可取。因为I历练。如果。如果。呃,怎么说?如果不连续。OK,不连续啊,它不是12345678了,如果不连续的话。结果。就。所以咱们还得想一个别的办法,什么办法呀,其实只要把这句话给我解决掉。是不是就OK了,只要这句话,或者说只要。ID能连续上。那么套用。上方的语法。就完成。现在的问题怎么办才能让ID连续上呢?在现有的阶段中,只有这么一招能让ID连上。
06:00
这个ID啊,是多少是多少,删了就没了,回也回不来了。那么咱们只能想办法对表对表,重新再起个ID列。再起一个ID列。就是说你这块不是六七八十嘛,我再来一个ID列,仍然让它为六七八九十十一以下往下排列走。哎,我要对,再加一列啊,再加一列。嗯,在这里边我们可以使用Oracle中的一个特殊的概念,叫做伪列的概念。伪劣的。可以使用伪列来。满足表中自己。在一起了。在起。一个。排序的列。
07:03
比如说原有的表上,原有的表上有这么多,接下来我要大大给你再搞出一列来。而这个列呢,就会。连续上。就会连续上。好,看我怎么做的啊?那这个首先给大家介绍这个伪列哈,这个伪列是这么用的。叫做肉肉行了。肉行是吧?Number,你看这个单词连起来是什么?是不是就是行的数量啊?行号是吧?当然不是这么写的,把number去掉,连上。这个东西就叫位列。From员工表。来我员工原先是不是25个。干了一个是不是24了。24,它就会按照一共为24个,每一个都是连续的看12345678。九没问题吧。我刚才删的九,现在九又出来了。
08:01
然后一直往后来,一直排到24。排到24。他不是排到25了,那这样的话,我对这个表是不是重新排列了。OK,那么我解决了这个编号连续的问题。那么我在套用上边的语法。就搞定了,就搞定了。扉页。正式开始。刚才都是负电啊。好,那这个分页咱们应该怎么写呢?这么写。比如说。现在我想办法是这样的啊,Select星from员工表。这个表现在这个是员工编号对吧,我想想办法在这个结构不变的基础之上,后边应该多加出那个伪列吧。哎,那同学说咋写了,这么写呗,逗号后边来个row row number。
09:02
一直行。飞也不行喽。这么搞是不行的啊。想让原有的列再加上这个伪列,只能使用子查询来解决。看我怎么做的。看好了啊。这个过程。这个过程不好理解啊。整个它呢,是整个这个表结构。整个表结构是吧,那我完全可以把它看作是一个X表,没问题吧。把它看成X表啊,然后我在查询的时候,我就可以这么干看见了啊。我要求查询出X表中的所有列,再加上本次的伪列。然后来自于X表。SX的。那这X表我刚说过是不是他呀。把它一剪切。
10:04
X,别删,这不能删。执行。OK。来往后滚一滚,咱到九那块看啊,这个八号完后就十了吧,看这边。这个就是伪列是吧,是不是ID连续上了,好咱们再回头看这个代码,这个代码实际上什么意思呢?小括号这一块,我是不是就用了一个嵌套的一个子查询呢?那这个子查询它其实里边查询的是不是就是这张表结构啊。但是这个表结构啊,就是两层,两层没有办法同时用,怎么办?我只能把里边这个里边的这个看成一张X表。比如说我把里边这个子查询用一个X这个变量来替代了。然后上边外层我就可以用X变量里边的所有列,其实引的是啥呀?引的是不是就是它呀。
11:02
就是里边的这个氢。但是必须得这样套一层。要不然没有办法它们合在一起啊,然后后边呢,这个就是road number,这个number,我也可以把这个列呀,起个别名,假设叫二。好,这样写完成之后,那么咱们又可以把它看成一个表了,它又是一个变X了,就不变成Y表了。那对Y表的话,是不是可以进行二到几到几到几了。二到几到几到几是吧。再套一层。查询。Selection from外表对吧,然后条件是。因为这个我看成了Y表,那么Y表中是不是有二这个列啊。所以我直接可以用R来判断大于0R,并且R小于。
12:04
等于五。那现在的问题就是把这个Y往这一换就搞定了。来吧。这就是前五条。然后呢,第第第二页是啥来着,这个是五,然后这个是十对吧。看到了吧,虽然你九没了,但是我也会把11给你顶上来吧,然后这边你看仍然是六七八九十。这样的话呢,分页。搞定了。这才是真正的分页。这才是真正的完美的分页啊。有点懵是吧?分页肯定懵,再来。首先现在确定一点这个伪劣这个概念没问题吧。什么是伪劣?
13:02
可以理解为是甲的是吧,但是这个甲并不是重点啊,甲不是重点,重点是这个伪列可以连续编号是吧?重点啊,连续编号是重点。再写一遍,这回呢,我给大家先写中文。呃,刚才大家看过这个分页查询了,其实知道它一共分成三层是吧。成三层,那么咱们这么写。最内层。他查的是什么?然后是中间层查什么。然后是最外层查什么。先说最内层。查询所有数据啊。所有所有数据。哎,这个所有数据啊,可能。会排序。可能会排序。比如说咱们做分页的时候,我是不是可以拿这个列做文章啊。比如说我要根据工资的高到低排出出前几名。
14:05
哎,工资的高到低是吧,哎,都有这样的需求啊,所以最内层查询所有数据可能会排序,说白了就是。原始。哎呀,不好听。即将。分页的。全部。即将被分页的全部数据,咱们怎么做的?是不是咱要不分析来,是不是就这张表啊。那即将被分页的全部数据是不是就这玩意儿?好了,中间层。对,最最这层没问题吧。哎,如果是比如说金钱的高低牌,月薪什么排行榜之类的,咱们后边可以加什么order buy之类的啊,一会儿咱们再说。看好中间层干嘛的?
15:06
其实中间中间这个层啊,它只有一个作用。是不是齐尾列啊?齐伟列是吧?所以就是,嗯。嗯,给。行。编号。改行数据行。每行数据啊。其实就是。启动。伪劣。启动为列。那咱们应该怎么做的呢?咱们怎么做的?Slack。哎,X点星。和。Row number。起个名,R from X表。然后呢,把它。定义成X表。那么下边我是不是知道X是啥了?
16:01
哎,我就知道X是什么了。对吧,把这个X只需要把这个东西是不是替换过来就行了。这是中间那层。最外层干嘛呢?就是数据过滤了啊。数据过滤。分页开始。哎,最外层数据过滤分页开始就是写编号重启开始重启结束嘛。哎,这是最外层。所以最外层这么来的。定义成表。外边。这是第二步啊好。这个呢,来自于什么表啊。外边,然后条件为R。大于零。并且R小于等于。这就是三个伪列,三个这个给它套上就完事了。
17:03
三个套就完事了。好,咱们来套一把,你看这个代码呢。过去吧,咱再写一遍。再写一遍啊。首先我要查询出原始的数据,这样对照着吧。我要查询出即将被分页的全部数据。From员工。OK。好,然后呢,我要对这个这个表啊,这个ID不连续。没法用。只能给这个表呢,再起一个假装或者说不存在的列,让它自动变号。好,那这个列是不是伪列啊。使用。第二,中间层。查询。查询伪列。来自于什么表呢?来自于下边这个。
18:05
编号有了呀,那那那别的那些数据哪去了。别的那些数据哪去了呢?别的这些数据是不是就是被分页这个表里边的这个星啊。那我怎么用到里层的这个星呢?你得给这个玩意儿起一个变量名,才能引到里边这个星。所以起了一个变量名XOK。这个X是啥?就是这个括号的。变量名。这样的话,我X点星点的就是里边这个星OK。好了,来,后边儿连上X点星。全都选,你别以为哎呀这个X把这个删了不能啊。变量名也有哈一执行。这回我把这个玩意儿放前面了,是不是也没问题啊?没问题,好,这个呢,Room number太长哈,起个变量名好吧?
19:01
好了,两层完成了最后一步,最后一步,那么这个表整个这个玩意儿,你看成是一张Y表的话,有ID这个列了好分页了吧。哎,其实这样。Select形from y,然后条件为,条件为R,什么RR超过这个这个这个五,并且R小于等于不不不不零哈。对吧。这就完事了不是?把这个Y咱们得换过来是吧,Y我不说了吗?你这个玩意儿,你看整个这个玩意儿一直行,你就把它想象成这就是一个Y表。对吧,那你就把整个这些代码。放在Y这个位置。OK。然后执行。没问题了。这个是咱们这个分页开去。
20:03
OK。好这个套路一下啊,删掉,因为上面这个代码呢。啊,没有哈。回不来了。没事儿。有以上三个步骤,应该会写了是吧,不会写的话呀。我再给你换一张表。Student表。我再写一个另一张表,再起来个分页啊,16的表。然后呢,补每页五条了,每页十条。如何写分页?再来一遍,看清了啊。首先准备备分页的全部数据。在这里。一共有多少条数据啊?62条,哎,这个数据多点哈。好,分页的话呀。首先这个里边你看这个表更加形象,我根本连1234那个列都没有。
21:01
对吧,我肯定必须得加一个伪列吧。那就这么搞。Select row number。伪列名R,然后来自于。差点星。From逗号,没写逗号啊。提示的好,来自于什么表呢?那么来自于下面这个结果吧。那下面这个结果咱们就直接套用。子查询。但是上边你看X点星,你这个里边是不是并没有给它起X变量啊,所以记住这一定要写这个X啊。执行。不用不用不用连上就行。但是有啊,空格扯是好看点。OK,这个列是不是出来了,来,咱往后看,一直滚到最后是不是62。没问题是吧。好了,最后呢,要分页了,先from y对吧,条件是。
22:04
要大于零。并且R小于等于十,这是第一页哈。好了,那把这个Y是不是替换过来。这就是整个这个结果了吧,它就是这个Y。来吧。搞定了。格式啊。这个其实也就这么着啊。好,这就是前十条。翻页啊。翻页你这块你得改变量。这不第一页吗?你改成第二页怎么办?十。20吧。OK。看一眼。是不是11到啊,哎啊这呢。不够长啊。就11到20啊,一共几个。十个吗?对吧,好,那现在这个这个往回缩一个啊,现在问题来了。
23:05
一共62条数据,每页十条,问最后一页是。最后一页是第几页,我的意思一共有几页就是。七吧。七页的话,我就要查第七页数据。就想查第七页,我这块应该改成啥。其实这个能抓住规律来啊。你这样看啊,我把这个我往下边我单独搞他啊看了啊。第一页。OK。第二页。几到几?十到20吧。第三页。几道题?20到。30好找规律吧。找规律吧。这块应该换成,就像咱们以前数学题是不是应该换成规律,规律这个这个什么变量啊。
24:06
这是第几页?后边这个简单吧。是啥呀?第N页的话,这个是什么。嗯。乘十是吧。对吧。前面那个值呢。就是第三页的时候,前面是20,第二页的时候11的时候,第一页的时候零。那这个值应该是得几,这写N了。完事呗,N减一。乘十嘛。来算吧,比如说来我刚才怎么说的。我刚才说第七页。这是多少?七减一六,那这块是不是就是60啊,那七乘十那是不是就是70啊。好,最后一页是不是就60-70啊。
25:01
来,写上六七。执行一下,那肯定就是这俩人嘛。OK。哎,这个这个留着啊,我也不删啊,大家观察一下啊。嗯,学到这儿的话呢,咱们分页查询算是搞定了,算是搞定了。这个分享查询算是搞定了。OK吧?咱们回头还得把这个语句好好看一看啊,好好看一看。好,来把这个三个步骤给大家放在,这三个步骤放在这儿来写个需求。按照。工资的高低。进行分页。进行分页查询。每页显示十条。
26:01
查询。第二页的数据员工。都是谁?
我来说两句