zoukankan      html  css  js  c++  java
  • 八、详解排序和分页

    前言:

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

    本章内容

    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的值不能用表达式

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

  • 相关阅读:
    a-b(高精度)
    a+b(高精度)[陈涛]——c语言
    |-病毒集锦-|(!长期更新!)
    2016/7/7 二分警察(搜查)~#递归打法好!
    2016/7/7 自定义函数copy
    2015/7/6 (!长期更新!)C语言从零——张呵呵
    2016/7/6 高精准计算器-减(神·高精准)
    2016/7/6 神·CPU的人类极限在哪?
    2016/7/6 真·高精度计算器-加 (火速跟完!!!)
    2016/7/6 准·高精度计算器-加
  • 原文地址:https://www.cnblogs.com/biao/p/11763686.html
Copyright © 2011-2022 走看看