00:00
大家好,我是上务的讲师宋文康啊,江湖人称的康师傅,行,咱们在讲完运算符之后啊,咱们来接着学习第五章叫做排序与分页啊,这呢仍然处于咱们查询这个语义结构当中啊,排序和分页啊,这其实是两个不同的内容,只不过呢,由于这两个内容啊,其实都不太复杂啊,所以呢,这里呢,我就把它放在一起,哎,命名了一个章节叫做排序与分页。啊,就是我们讲解这两个内容的时候呢,就是分别呢,我们谈谈排序是什么意思,然后呢,再去谈谈分页是什么意思啊就可以了。哎,是两个独立的内容,好,那首先的话呢,我们来看一看,这个叫排序啊叫排序,那首先呢,我们再去新建一个这个笔记啊,在我们这里边。啊井号啊,第五章排序与分页,好把它呢,就是CTRLCCTRLS,那再保存到我们这个代码这一节里边。好这就可以了啊行,那么首先的话呢,大家想一下,我这块呢,先写一个查询语句啊,这个咱们先这样啊,我标识一下这个是一啊叫做排序操作啊select。
01:06
那我就起来给他清一下,From employees是吧?哎,查询一下我们这个员工表。啊,这个员工表啊,我们现在已经选中的是咱们艾特硅谷这样的一个,呃,DB这样一个数据库了,行,那我们选中以后呢,去执行以前呢,大家可能没有关注过,就是你看到我们这块呢,查询出来的一共是107条记录,那这107条记录的话呢,它有显示的,呃,也算是有一个默认的顺序,对吧?那我们每次这样去执行,大家有没有注意过,发现每次这块执行的这个顺序是不是都是一样子的呀?不是说随机的,我们这次查询显示的这样个顺序,下次查询呢,就是另外一个顺序了,不是的是吧,那么这里边儿我们要谈一谈,就是我们没有使用啊,咱们现在要讲的这个排序操作。啊,什么意思啊,比如我们现在要求按照这个呃ID号进行排序,或者按照这个date呢升序排,或者按照公司从小到大等等是吧,这呢都是我们指定的一种排序方式,那如果我们没有指定的话呢,它是不是也算是有默认的一个顺序啊。
02:08
那你想想,总得在数据库当中,那我们在这个数据库当中,总得是不是有一个这个存储的一个顺序吧。我调一下我这个。画图的这个啊,那你像这我们这个数据库啊,就是我们说的这个DB文件,咱们呢,现在呢,通过这个色库语句呢做查询,然后它反馈给我们,诶就是显示到这儿了,在这里边儿总得有个顺序,那当我们没有使用这个排序的话呢,它其实默认的这个顺序是什么呀,就是在数据库当中我们先后添加的一个顺序。哎,就是先后添加的一个顺序,这儿呢,大家作为一个了解下啊,就是如果没有使用。来使用这个排序操作是吧,这个咱们一会儿讲具体的排序操作该怎么去做,没有使用排序操作呢,我们说默认情况下呢。诶,默认情况下这个查询。返回的这个数据啊,是按照。
03:01
是按照啊这个,呃,当初咱们诶添加。哎,这个数据的这个顺序啊,显示的。OK,这个是是吧。诶没有问题,好这块呢,大家首先呢来做一个了解啊,那么我们现在呢,去讲该如何呢,去实现这个叫排序,首先呢,我们要说呀,这个排序操作呀,还确实是有必要的,那举一个简单的例子。举个简单例子,比如说呢,我们去进入一下这个叫淘宝吧。淘宝是吧,好,那我们进到这个淘宝以后呢,这个位置呢,我们就可以写这个搜索了,这呢就是使用的,咱们讲这个叫呃ES是吧,可以去做的,比如我们搜索这个叫水杯是吧,或者你搜索这个叫手机啊都可以啊,那我们搜索这块呢,就出来了很多的这个数据。那很多数据呢,大家会想说这块有没有续啊,其实对于淘宝来讲肯定有序,对吧,淘宝还得指着这个挣钱呢,就相当于是排名靠前的呢,可能就做了广告位了,对吧?那我们这块呢,先假设啊,默认情况下呢,这块呢,它是有一个显示的,这个呢,呃,你可以理解成是咱们按照添加的顺序来的,那接下来呢,大家你会发现呢,我们其实有很多的这种诉求,比如说用户呢,想按照销量来排序,想按照信用来排序,想按照价格从低到高,从高到低这样的一些字段来进行排序,那么这个呢,是不是就相当于我们针对于数据库当中查询出来这个结果进行一些额外的诉求,就是排序的操作,对吧?这儿呢,就是咱们这里要讲的这个问题。
04:33
哎,要讲这个问题,好,那咱们就直奔主题去了,我们现在呢,有一个这个需求,那我就写成是叫练习。练习我们说呢,那希望呢,按照这个salary。诶,Salary从。从先什么呀,从高到低吧。到低的这个顺序啊去显示。啊,这个员工信息,诶这呢是我们就这个诉求啊,OK,那这个诉求我们该如何去完成呢?哎,那我们这块就首先来写啊,前边这块呢,大家都还算是比较熟悉啊,我们select,那员工信息呢,咱们自己就来列了,比如说有这个employd,有这个last name,那我们这块呢,也可以显示一下它的这个salary。
05:16
好,没问题,然后from employees,在咱们这个需求当中啊,没有涉及到是不是过滤数据啊,所以我们就不用写这个where了,那这样写完之后的话呢,我们查询肯定还是一个默认的情况,这个也不是按照这个salary呢,从高到低来排序的,那排序该如何去实现呢?那我们这里边儿啊,我写到。哎,我写到写到这个位置吧。我们在这说使用这个order。这个咱们用大写吧,来使用奥B呢,对查询到的数据。来进行来排序操作。诶,就是用这个order by就行,那其实这个单词呢,大家你看也比较好理解,Order呢,本身这个单词是不是就叫做排序的意思啊,BY呢,是通过什么用什么,这不是英语里边都是这个意思吗?比如说I goto school,我去学校by bike啊,By bike。
06:11
就是BY呢,Bike就是自行车嘛,就是你上学呢,是骑自行车去的啊,就这个意思,BY呢,就是通过什么什么这样一个工具啊,或者在我们这儿呢,就是一个字段呗,那你要排序是通过哪一个字段呢?是不是后边呢,加上你这个字段就可以了,那我们现在已经明确说了,是不是按照salary啊,OK,所以这个事呢就很好做,那我们直接呢,就order by。你看这都是关键字啊,都变成大写的了,蓝色order by salary是不是就可以了?好大家看啊,这个时候呢,我们觉得说没毛病,那执行一下,你看看是不是按照salary以及呢,从高到低。选中走起。好,首先呢,也是107条记录也没有报错,那但是这个结果的话呢,你会发现比好像不是从高到低,反而呢,是不是从低到高啊,那最高的是24000。
07:02
那这哥们儿应该是公司的老大是吧?创始人啊,2万次挣得最多。不对。不对是吧,哎,那怎么去表达这个从高到低呀,那这儿呢,我们接着呢,又再说一个信息,一方面呢,使用它进行排序,另外一方面呢,我们需要指明这个,呃,升序操作和降序操作,那升序操作呢,也使用的这个关键词呢,叫asc,那对应的这个我们说叫降序操作。那这样去操作呢,用的叫de。诶,貌似呢,跟咱们前面讲这个,嗯,查询这个表结构那个DSA一样是吧?诶但是这个呢,是另外的一个算是一个,呃意思了,这个放在我们这order by这个字段的后面的啊,它表达就是这个降序的意思,这个两个单词呢,其实是两个单词的缩写啊,Ascend是它这个单词和我们这个desend。哎,这样的两个单词,这个单词的意思呢叫升序,它呢意思就叫做降序。那所以我们只取它的前几个字母来表示的好,那么来看咱们现在呢,是不是要降序排列啊,那我就在这个salary的后边啊,咱们加上DEC,咱们不是要降序吗?那就这样来实现好,大家注意走。
08:15
你看此时呢,是不是就是降序排列的呀。降序排列那一直往下。没有问题。对吧,那这呢,就是我们完成了这样个需求,诶,我这呢,把这个需求CTRLX,哎,我站到这,哎这样来说一下。好,这个那就说完了,那么同样的话呢,这个完了以后呢,那我们由他来拓展一道问题,咱们说呢,Salary上是不是从低到高啊。从低到高,然后呢顺序显示员工信息,哎,那这呢,是不是我们直接用asc就可以啊,走一下那没有问题。没有问题,所有同学呢,注意到一个小细节,说宋老师啊,刚才好像我们没有写asc或者DC的时候呢。你看这样是吧,我们这样一执行是不是也是这个顺序啊,哎,没有问题啊,所以这呢,我们再说一下,说如果在啊,咱们这个order by后啊。
09:10
Order by啊,对应的后边有个字段是吧,哎,我就这样说了啊,如果在这个order by后没有显示指明排序的方式的话,则我们说默认呢,按照升序排列。那这呢就明白了,相当于呢,就是我们如果是个升序,从小到大的话呢,你写上A也行,不写呢也是升序的意思。那对应的降序的话呢,那你是一定要写上的,那就是DEC。哎,这是说的这个问题。好,这呢,我们就提到这个排序的问题了,那么这个排序呢,跟咱们前面有一个小内容呢,可以结合一下,前面呢,我们是不是讲过叫列的别名是吧?说我们可以使用叫列的别名,然后呢,对呃,这个呃,相应的嗯,哎,或者使用列的别名啊进行排序,然后就简写了。
10:05
号是什么意思啊?来select,我们来一个employee ID是吧?嗯,我再来一个这个叫salary吧,嗯,然后再逗号一下,嗯,我们拿这个salary啊去乘以一个12啊,起个名字呢,叫annual I c啊,就是年工资是吧?哎,From employees。诶,这样接着呢,我们来一个all by,我现在呢,希望按照这个字段,就是我们salary乘以12这个字段来进行排序操作。进牌操作怎么做呀?那order by我CTRLC一下,诶站到这,那我要是没有写AI,是不是就默认升序排列呀,好,我们选中执行一下。大家会发现此时呢,是不是就按照我们这个升序的这个顺序进行排列的,对吧,那这里边儿相当于我们使用了这不叫列的别名,然后进行的排序嘛。哎,就是这个意思。啊,同学说,诶这个挺简单,没啥可说的呀,其实我们想说它的目的呀,反而是在这儿在哪儿啊,大家你看。
11:02
比如说我把这个语句啊,我先CTRLC我先拿过来,咱们呢是当初先讲的,咱讲基本的select语句的时候,讲的列的别名之后啊,咱们是不是才讲的这个过滤啊。才讲这个where对吧?好,那么问题来了,那我们在这个where当中能不能去使用这个列的别名呢?比如说我where annual,这个salary去大于啊,咱们从这里边挑一个吧,比如说81600。来一个81600,诶蹦起来。说呢,我想查询一下这个年工资大于81600的啊,大于这个数是吧,好,我们这块呢,觉得说应该没什么毛病啊,走一下大家会发现呢,是不是就报错了呀,说我们不知道这个字段,哎,在我们这个外过滤条件当中不认识啊,哎这块呢,反而是咱们要给大家强调的点,就是说什么呀,我们列的别名。哎,这个列的别名啊,只能在咱们这个order by中去使用。
12:00
Orderby中使用啊,不能在。哎,不能在咱们的这个叫where中去使用。那不能在这个where当中去使用。哎,这个大家要注意一下这个点啊,那同学说,嗯,凭啥呢?哎,这个orderbi咱们整成个大写吧,感觉好像是专业一点是吧,其实大家写都行,那我这块写大写只是希望呢,给大家做一个好的示范作用,咱们前面讲规范的时候呢,提到一个关键字啊,函数啊是吧?诶我们都是用这个大写啊,行诶这个同学会想说,凭啥你order buy就可以,这个where就不行呢?啊,其实这块呢,我先给大家透露一个天机是吧,这呢涉及到什么呀,就是咱们这个,呃,希腊的语句,你看咱们。嗯,咱们看你看,呃,我这块其实还没有涉及到这个问题啊,我这块再多写一个吧。什么意思啊,这样啊,我把这拿过来,诶我们现在呢,是不是还没有一个SQL语句呢,是既把where,又把order by都用上是吧。那都用上怎么来去体现啊,那这个步伐我把这个字段就就去掉了啊简单一点,然后呢,我们一定要注意是where和from呢,是挨着的啊,Where跟from挨着的,比如where我们只考虑这个department ID in啊这个50 60 70,好,然后呢,I order buy一下。
13:19
哎,Order by一下,Order by什么呀,我们可以不用salary,再换一个字段也可以是吧,我就order by这个department。啊de啊也没问题,好,这时候呢,我们想强调点就是这个有where和order同时出现的话呢,一定要把where放在from的后边啊,Order呢往后放好,这个时候我们去执行。这个执行的结果就对的,那有同学想说这我也不知道你对不对啊,因为咱们是不是也没有在这去列这个底department麦D啊啊,我没有列啊,我可以没有列的,为啥呢?就是想告诉大家呢,就是我们order by排序这个字段呢,也不一定非得是我们查询那个字段啊,哎,不一定是查询的字段,就是它不会报错的,行,这个再拉回来,哎,我现在想给大家强调点,就是我们解释它为什么是成立的是吧。
14:07
诶为什么成立呢?就是说呀,咱们这个SQL语句查询语句,它在执行的时候呢,它不是按照这个从前往后这个顺序走的,如果这个顺序往后走的话呢,你这个别名是不是按说在下边呢,都能够被看到是吧?而实实情况呢,咱们是先从这个from这块走,我先挑出来哪个表,然后呢,你看有什么过滤条件,诶这块呢,都筛选完以后呢,我们就留出来一波数据了,这波数据呢,接下来就这是咱们的第一个操作啊,第二个操作呢,看一看你这块你想查什么。那相当于一开始我们取出来的这个都是你这个表中的完整的字段,一看,哎哟,你只想取employeed和这个salary,那只取这俩字段,哎,同时呢,是不是有可能诶起个字段的别名,这个时候呢,才有了别名,然后接下来的话呢,我们才去才去执行的这个三叫做order by,那么你想想机遇已经有别名了,你下边再order by的话呢,是不是才可以去用这个别名。
15:00
诶,你看我这个解释是不是就比较完美啦,事实情况呢,也确实如此。也确实如此,就是说我们这个别名呢,你得在你之后的这些这个这个语句当中可以使用,那之后呢,就包括了这个orderby,而我们这个where呢,相当于是在我们这个考虑select之前,这个where呢,都已经执行了,那当时呢,是不是还没有别名呢,所以说呢,他就。报错了。哎,就报错了,所以说这个呢,我们下边是会报错的啊,如下操作是吧。哎,报错行,然后这个的话呢,是咱们刚才强调了一下。强调一下这个格式啊。哎,什么格式呢,就是我们这个where,呃,需要呃声明在啊,咱们这个from from后是吧,这个order by之前。诶,这个大家要小心一点,我就不去演示,把它俩交换一下顺序,看看是对还是错了,这肯定是不对的,你就别多想了,我就不演示了,好,那么这呢,我们相当于是讲了一下这个order by,看几个事儿啊,首先的话呢,诶这个咱们整个来讲,这是第一个啊,首先的话呢,我们提到了一些基本的一个使用。
16:10
1.1。哎,基本的一个使用,然后这块呢,我们提到了这个升序和降序的问题,下边一个问题的话,我们提到了说这个嗯什么呀,我们可以使用这个列的别名啊,进行一个排序。进行排序,然后列边边能排序,但是呢,它不可以在这个where当中去使用,那这个呢,我们可以把这个呢称为是一个三,由这个三呢,咱们去解释了一下这个呃二就是呃涉及到了就是他们谁先执行谁后执行的事儿,那么关于整个这个select它的一个执行的先后顺序啊,我刚才呢,只是先引入一下,为了去解释这个事儿,后边呢,咱们还会啊,等这个select完整的结构我们暴露出来之后,还会给大家去说这个问题。啊,还是说这问题好,接着咱们看下个事儿啊,下个事儿这个排序按说这诶可以了呀,这这没啥要说的,怎么还还有下边内容呢,但是你想我们实际的需求当中啊,比这个可能还要复杂一些,还要复杂一些,比如说你看刚才我们想这个排序的话,比如说我把这个啊CTRLC我再拿过来,咱这个where呢,暂时我就先不要了,然后这个位置呢,我把这个department他呢补上。
17:19
那我把它补上,相当于我们就看一下这个字段,这个底盘麦地部门信息是吧。好,大家看现在的话呢,我是不是按照这个部门的一个降序排列的,对吧,那显示的这个员工和他的这个工资,那么大家会发现呢,我们在排序的过程当中,有很多员工他们的是不是部门ID是一样的呀。你看都是100号部门,那这个都是100号部门的情况下呢,这时候呢,是不是又涉及到下一个问题,就是这种情况下显示显谁在前面显示,谁在后边显示的问题。对吧,你看比如说九十八十都一样,那80号部门人比较多,这里边儿就涉及到都是80号部门的情况下呢,那接下来谁先显示谁后显示呢,那就好比是大家在这块涉及到了,说我们想按照这个,比如说价格吧,从这个诶从低到高吧。
18:07
那价格从低到高之后呢,你会发现呢,还是会有一些产品的价格呢,是一样的,那么这种情况下,谁先显示谁后显示呢。哎,这呢,就涉及到了我们这个问题叫什么呀,叫二级排序。咱们起个名叫二级排序,相当于前面呢,就叫做一级排序啊,我们这个需求呢,是这样子的,但这个显示员工信息。显示。员工信息,然后呢,按照这个department ID,它的降序排列。那降域排列以后呢,很多呢,Department是一样的,然后我们再按照呃这个什么呀,比如说salary的升序排列。诶,这呢,就是我们的这个要求,那先按照这个排序,然后再按照这个30排序,比如像80号部门里边,你看目前这个工资呢,它就不是满足我们说这个要求的是吧?诶那你要细看的话呢,似乎呢,这个80号部门都是80号部门的情况下呢,按照我们这个默认的在表中存储数据的先后顺序来显示的是吧?那我们在这个基础上就可以去指定了,哎,直也比较简单,直接呢,在我们,诶你按照它department ID排序的后面呢,逗号一下,加上咱的salary升序嘛,叫AI,这个AI可以省略掉的。
19:30
好,选中执行。大家看这时候呢,比如我们这个80号部门这一波,你看一下这个首先呢,是大方向呢,是部门的降序了,都是80号部门的情况下呢,是不是它又是一个升序的顺序啊。没问题是吧,好这呢,就是我们想强调的,哎,这样的一个知识点的一个使用。啊,一个使用在这个当中呢,比如说那我们要是把这个给省略掉了,那相当于呢,是不是就它按照底盘ID的一个顺序排列了呀,走一下。
20:01
那这个生育排列的时候呢,有一个人,他的部门呢,是一个空的,这个还不是公司的老大,你看是吧。就是一个普通员工,他呢,就是可能刚入职还没有这个定这个岗呢,是吧,所以他这是个闹,然后呢,就是空的呢先放,然后呢,就是按照迪边卖地呢生育排列,然后相同的话呢,再按照这个排列,这个salary排列是吧,就是这块大家注意一下,就是你看他加没加具体的这个规则,没加的话呢,那就认为是AI,那这个呢,因为是升序,它可以省略是吧,哎,就这意思。这儿呢,我们说的这个叫二级排序。那这个说完之后呢,整个关于我们排序这块内容呢,基本上也就这样了,是吧,也就这样了,那那这里边儿你看我们再多啰嗦一句说呢,多列排序或者叫二级排序,我这说的叫二级排序,其实呢,对应的你是不是还有三级排率,四级排序就是在这个和这个都排完之后呢,如果还有一样的,你是不是可以再来个三级排序。能理解对吧,就二级清楚之后呢,大家三级的话呢,也这个照理去推就行,你后边再加逗号就行了,然后呢,我们会先按照这个字段排,然后相同的情况下呢,再按照这个字段排,在相同呢,你再按照你第三个字段,所以我没有讲三级,那这块呢,就是我们统一的就称为呢叫多列排序了。
21:14
就是包括了二级三级四级等等是吧,那这里边强调的就是说首先呢,按照第一列去排,相同的话呢,再考虑第二列,那第二列再相同了,你再考虑第三列,那如果第一列都不相同了,就不会考虑第二列啊这个很好理解,一说就明白。行,那关于排序呢,我们就说到这儿。
我来说两句