• 八、详解排序和分页


    前言:

    []包含的表示可选,|符号分开的表示可选其一。

    本章内容

    1. 详解排序查询

    2. 详解limit

    3. limit存在的坑

    4. 分页查询中的坑

    一、排序查询(order by)

      select 字段名 from 表名 order by 字段1 [asc|desc],字段2 [asc|desc];  

      需要排序的字段跟在order by之后;

      asc|desc表示排序的规则,asc:升序,desc:降序,默认为asc;

      支持多个字段进行排序,多字段排序之间用逗号隔开。

      单字段排序:select * from test2 order by a asc;

      多字段排序:select * from stu order by age desc,id asc;  

      按别名排序:select age '年龄',id as '学号' from stu order by 年龄 asc,学号 desc;  

      按函数排序:SELECT id 编号,birth 出生日期,year(birth) 出生年份,name 姓名 from student ORDER BY 出生年份 asc,id asc;  

      where之后进行排序:select a.id 订单编号,a.price 订单金额 from t_order a where a.price>=100 order by a.price desc;

    二、limit介绍

      limit用来限制select查询返回的行数,常用于分页等操作。

      select 列 from 表 limit [offset,] count;  

      说明:

        offset:表示偏移量,通俗点讲就是跳过多少行,offset可以省略,默认为0,表示跳过0行;范围:[0,+∞)。

        count:跳过offset行之后开始取数据,取count行记录;范围:[0,+∞)。

        limit中offset和count的值不能用表达式。  

      1、获取前n行记录

        select 列 from 表 limit 0,n;
        或者
        select 列 from 表 limit n;
      

      2、获取最大的一条记录    

        select a.id 订单编号,a.price 订单金额 from t_order a order by a.price desc limit 1;

        select a.id 订单编号,a.price 订单金额 from t_order a order by a.price desc limit 0,1;  

      3、获取排名第n到m的记录:select 列 from 表 limit n-1,m-n+1;

        select a.id 订单编号,a.price 订单金额 from t_order a order by a.price desc limit 2,3;

      4、分页查询:select 列 from 表名 limit (page - 1) * pageSize,pageSize;

        select a.id 订单编号,a.price 订单金额 from t_order a order by a.price desc limit 4,2;

    三、避免踩坑  

      limit中不能使用表达式,只能够跟明确的数字。 

      limit后面的2个数字不能为负数  

      排序分页存在的坑

        当排序过程中存在相同的值时,没有其他排序规则时,mysql懵逼了,不知道怎么排序了。

        建议:排序中存在相同的值时,需要再指定一个排序规则,通过这种排序规则不存在二义性。

    总结  

    • order by … [asc|desc]用于对查询结果排序,asc:升序,desc:降序,asc|desc可以省略,默认为asc

    • limit用来限制查询结果返回的行数,有2个参数(offset,count),offset:表示跳过多少行,count:表示跳过offset行之后取count行

    • limit中offset可以省略,默认值为0

    • limit中offset 和 count都必须大于等于0

    • limit中offset和count的值不能用表达式

    • 分页排序时,排序不要有二义性,二义性情况下可能会导致分页结果乱序,可以在后面追加一个主键排序

  • 相关阅读:
    字符编码相关
    函数之形参与实参
    文件操作模式
    函数对象,名称空间,作用域,和闭包
    吴裕雄天生自然SPRINGBOOT开发实战处理'spring.datasource.url' is not specified and no embedded datasource could be autoconfigured
    吴裕雄天生自然SPRINGBOOT开发实战处理XXXX that could not be found.
    吴裕雄天生自然SPRINGBOOT开发实战SpringBoot HTML表单登录
    吴裕雄天生自然SPRINGBOOT开发实战SpringBoot REST示例
    吴裕雄天生自然SpringBoot开发实战学习笔记处理 Could not write metadata for '/Servers'.metadata\.plugins\org.eclipse.core.resources\.projects\Servers\.markers.snap (系统找不到指定的路径。)
    吴裕雄天生自然SPRINGBOOT开发实战SpringBoot Tomcat部署
  • 原文地址:https://www.cnblogs.com/biao/p/11763686.html
Copyright © 2020-2023  润新知