MYSQL基础之排序(ORDER BY)和分页(LIMIT)

其实对数据的操作,必然会使用一个操作,就是排序。

ORDER BY(排序)

那就是这个关键字,先看演示。

--  安装工资排序
SELECT 	empno, ename, job, mgr, hiredate, sal, comm, deptno	 FROM test.emp  ORDER BY sal

在这里插入图片描述

当然这个也可以有多个字段

SELECT 	empno, ename, job, mgr, hiredate, sal, comm, deptno	 FROM test.emp  ORDER BY sal,empno
--  这个意思就是先安装工资的排序,然后再安装员工号进行排序。毕竟有相同的工资。

在这里插入图片描述

这个可以看出来,在ORDER BY中后面可以看出,先对靠近的字段进行排序,然后对后面再进行排序。

排序默认是升序排序的,既然可以升序自然也可以降序。这个时候需要两个特殊的关键字ASCDESC;

升序其实是默认,锁业也不在演示了。直接看降序。

SELECT 	empno, ename, job, mgr, hiredate, sal, comm, deptno	 FROM test.emp  ORDER BY sal DESC 

在这里插入图片描述

这个又会涉及的一个问题,那就是如果是两个字段呢?

SELECT 	empno, ename, job, mgr, hiredate, sal, comm, deptno	 FROM test.emp  ORDER BY sal,empno DESC 
--  这种本质是sal工资默认升序不写也就是升序, 然后再通过empno排序,因为有DESC可以看出是一个降序。 也遵守ORDER BY 靠近优先原则

在这里插入图片描述

可以看出DESC只是对与靠近自己的字段有效果,但是前面的会按照默认的升序排序。

SELECT 	empno, ename, job, mgr, hiredate, sal, comm, deptno	 FROM test.emp  ORDER BY sal DESC,empno DESC 

在这里插入图片描述

可以看出对于升序不写即可,如果对于降序,如果多个需要降序也就需要在其后面字段后面。不过这个也可以看出升序和降序可以搭配着用。

ORDER BY后面可以跟别名,这个是和WHERE的不同之处。

SELECT 	empno, ename, job, mgr, hiredate, sal,sal*12 AS yearsal comm, deptno	 FROM test.emp   WHERE yearsal>'50000' ;

可以看出WHERE后面跟随别名的话,会报错。
在这里插入图片描述

ORDER BY后面呢?

SELECT 	empno, ename, job, mgr, hiredate, sal,sal*12 AS yearsal ,comm, deptno	 FROM test.emp    ORDER BY yearsal;

在这里插入图片描述

当然在MYSQL中ORDER BY后面可以跟SELECT 中没用用到的字段。

SELECT 	empno	 FROM test.emp    ORDER BY sal

在这里插入图片描述
而且还有一点排序,对于空的字段,默认其为最小,毕竟空等于没有,没有自然是最小了,这个和数学运算符那个大写对比不能看成一样。

SELECT 	empno, ename, job, mgr, hiredate, sal, comm, deptno FROM ntest.emp ORDER BY comm DESC 

在这里插入图片描述

总结:

  • ORDER BY排序后面可以跟多个,当然靠近优先原则,不过一般的前面有相同值的时候才会体现出现。
  • ORDER BY如果后面跟随多个字段,如果升序的话可以不写但是降序的话,需要根据需求在各字段后面添加DESC
  • ORDER BY字段后面可以跟别名,以及SELECT后面没用呈现的字段。
  • ORDER BY放在WERE语句后,毕竟先选出数据,然后才能进行排序。

分页(limit)

其实很多时候,比如网页呈现的时候,很多数据不是一次性全部返回的,如果数据太多,显示看的话也会很乱,这个时候就需要一种操作将数据进行分页显示,这个其实有点像是linux中的cat -n 的操作 。

这个在MYSQL中使用的关键字是LIMIT,为什么要强调一下呢,因为在不同的数据库中其关键字是不同的,比如在ORACLE中其是rownum。

格式:

 LIMIT 起始行(不写默认为0),显示多少行

现在看一下例子:

SELECT 	empno, ename, job, mgr, hiredate, sal,comm, deptno	 FROM test.emp   LIMIT 0,2;

在这里插入图片描述

这个可以看出其显示的0开始,然后只显示2行,自然也可以从第一行,显示2行。

SELECT 	empno, ename, job, mgr, hiredate, sal,comm, deptno	 FROM test.emp   LIMIT 1,2;

在这里插入图片描述

LIMIT其放在WHEREORDER BY后面,毕竟先选出数据,然后对其进行排序,不然提前分页又有什么意义呢。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQLORDER BY语句用于对查询结果进行排序。当我们在分页查询中使用ORDER BY语句时,可能会影响查询性能,原因如下: 1. 排序操作需要消耗额外的计算资源。ORDER BY语句会对查询结果进行排序,这需要对每条记录进行比较和排序操作,消耗CPU和内存资源。 2. 排序操作可能需要使用临时表。如果查询结果集很大,MySQL可能会使用临时表来存储中间结果,然后在临时表上进行排序操作。这会增加磁盘IO操作和存储开销。 3. 排序字段的索引可能无效。如果排序的字段没有相应的索引,MySQL将无法高效地进行排序操作,而是会执行全表扫描来排序结果。全表扫描会导致查询性能下降。 为了优化分页查询中的排序操作,可以考虑以下方法: 1. 使用索引覆盖查询。如果排序字段有相应的索引,并且查询的字段只包含索引字段,MySQL可以直接使用索引进行排序,避免全表扫描和临时表的使用。 2. 限制查询结果集大小。如果只需要获取前几条记录,可以使用LIMIT子句限制结果集的大小,减少排序操作的开销。 3. 避免在分页查询中频繁改变排序字段。如果每次分页查询都使用不同的排序字段,MySQL无法充分利用缓存和索引,导致性能下降。最好在分页查询中保持相同的排序字段。 总而言之,分页查询中使用ORDER BY语句可能会影响性能,但可以通过使用索引、限制结果集大小和保持相同的排序字段等方法进行优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值