当前位置:   article > 正文

MYSQL 排序与分页(有史以来最完整的介绍没有之一)_mysql 分页排序

mysql 分页排序

1.排序数字

1.1排序规则:

MYSQL 数字排序使用:ORDER BY.... 子句

ORDER BY 列名 ASC 升序

ORDER BY 列名 DESC降序

升序 : ASC (ASCEND) 升序从小到大,或者从高到底
降序: DESC(DESCENG) 升序从大到小,或者从低到高

1.2单列排序 (一级排序) 

希望按照salary 从高到低的顺序显示员工信息


SELECT employee_id,last_name ,salary
FROM employees
ORDER BY salary DESC; 

 

执行结果:

1.3 多级排序(2 ....3....)

一级排序不能满足我们的任务要求,需要再以某个字段进行排序。

语法:SELECT employee_id,last_name ,salary
           FROM employees
           ORDER BY  列名1 ASC, 列名2 DESC;

#在原有的 ORDER BY 子句的基础上,加上,另一个要求排序,中间以逗号隔开。

案例一:

要求:查询employees,列表中的employee_id,last_name ,salary,字段,并且要以salary ,进行降序排序,如果得到的查询结果,salary出现相同,我们再以员工ID employee_id 进行升序排序。

SELECT employee_id,last_name ,salary
FROM employees
ORDER BY salary DESC,employee_id ASC

案例二: 查询员工工资大于6000人员姓名和 员工id

SELECT employee_id,last_name,salary
FROM employees
WHERE  salary > 6000; 

 

拓展:

 1.  ORDER BY  子句可以使用列的别名,却不能在WHERE 子句内声明 

WHERE 使用别名查询

SELECT employee_id,last_name ,salary,salary * 12 AS annual_sal #(别名年终工资)
FROM employees
WHERE annual_sal > 10000; 

如果执行上述语句,它会有报错提示,未知列 annual_sal 这个列我找不到,没有这个字段 

ORDER BY 子句使用列的别名查询: 

SELECT employee_id,last_name ,salary,salary * 12 AS annual_sal #(年终工资)
FROM employees
ORDER BY  annual_sal  ASC 

 

 显然可以执行成功,这是为什么呢,因为,SQL语言的执行顺序和其他语言是不一样的

 

你从原表中没有找到别名这个列,WHERE子句,怎么能用别名列来作为查询条件。

 


分页:

mysql 使用limit 实现数据分页显示

背景:查询返回的记录太多了,查看起来很不方便,怎么样能够实现分页查询呢?

实现规则:

分页原理 所谓分页显示,就是将数据库中的结果集,一段一段显示出来需要的条件。

优势:减少磁盘IO 消耗,提高系统反应速度,降低网络带宽消耗。

格式:

LIMIT [位置偏移量,] 行数

切记不要受数据编号影响,33,就以为是从编号为33开始。 

案例一:

每页返回显示20条记录,此时显示第1页

SELECT employee_id,last_name
FROM employees
LIMIT 0,10; #第一个数是偏移量,第二个数字表示每一页中显示的记录数量

 偏移量:从哪里开始起;LIMIT 0 ,20 从头开始,LIMIT 20 ,20,从第二十条数据开始,每页显示      20条件记录

行数:表示在每一页中显示多少条记录 

 每页显示20条记录,此时显示第2页

SELECT last_name,employee_id
FROM employees
LIMIT 20,20; #第二页是不是要从20开始 。

 

每页显示20条记录,此时显示第3页

SELECT last_name,employee_id
FROM employees
LIMIT 40,20;   

为什么第二个数字没有发生改变,因为第二个数字表示显示记录的数量


LIMIT  [位置偏移量,] 行数 生活中的应用场景:

 往往每一页显示的数据信息都是相同,作为消费者,通过点击查看的页数,它就会给数据库反馈给后台程序,程序通过运算会给数据库一个值,应该把第几页调出来。

拓展:

关于LIMIT 分页方法,在MYSQL 8.0 版本后出现了新特性,LIMIT... OFFSET..
 

 SELECT employee_id,last_name,salary
FROM employees
 LIMIT .... OFFSET .... 

#....OFFSET.... ,OFFSET前面成了显示多少条数据,后面表示从偏移量是多少

案例一: 表中有107条数据,我们只想显示第 32,33 条记录

limit  方法

SELECT employee_id,last_name,salary
FROM employees
LIMIT 31,2

 

 MySQL新版本 分页方法:(LIMIT ....OFFSET ....)

SELECT employee_id,last_name,salary
FROM employees
LIMIT 2 OFFSET 131 

 

总结:

1.如果没有使用排序操作,默认情况下查询返回的数据是按照添加数据的先后顺序进行。

2..order by 只能用于对列表的某一个值进行排序排序,它目前只能实现升序(asc),或者降序(desc)而where子句 ,却能有着更加精细的要求, 或者 = , => ,< = 可以结合运算符进行使用,达到更加精细的目的,但是ORDER BY 对列表中的某一字段进行升降序排列的作用更加高效和明显,相反使用where子句就很麻烦,甚至可能实现不了。

3. 列的别名只能在 ORDER BY 中使用,不能在WHERE 子句中声明 

 4.  LIMIT ....OFFSET ...... OFFSET 后面的从哪里开始,它会对表进行扫描。

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/49343?site
推荐阅读
相关标签
  

闽ICP备14008679号