第五章:排序与分页

第五章:排序与分页

5.1:排序数据

  1. 数据排序

    • 使用ORDER BY子句排序
      1. ASC(ascend):升序
      2. DESC(descend):降序
    • OEDER BY子句在SELECT语句的结尾
  2. 单列排序

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

    注意:

    • 如果在ORDER BY后没有显式指明排序的方式的话,则默认按照升序排序。
    • 我们可以使用列的别名,进行排序。
    • 列队别名只能在ORDER BY中的使用,不能在WHERE中使用。
  3. 多列排序

    SELECT employee_id, salary, department_id
    FROM employees
    ORDER BY department_id DESC, salary ASC;
    

    注意:

    • 可以使用不在SELECT列表中的列排序。
    • 在对多列进行排序的时候,首先排序的第一列必须有相同的列值,对会对第二列进行排序。如果第一列数据中所有的值都是唯一的,将不再对第二列进行排序。

5.2:分页

5.1:实现规则

  1. 分页原理

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

  2. MySQL中使用LIMIT实现分页

  3. 格式

    LIMIT [位置偏移量,] 行数
    
    • 参数1:第一个"位置偏移量"参数指示MySQL从哪一行开始显示,是一个可选参数,如果不指定"位置偏移量",将会从表中的第一条记录开始(第一条记录的位置偏移量是0,第二条记录的位置偏移量是1,以此类推)。
    • 参数2:第二个参数"行数"指示返回的记录条数。
  4. 举例

    # 每页显示20条记录,此时显示第1页
    SELECT employee_id, last_name
    FROM employees
    LIMIT 0, 20;
    
    # 每页显示20条记录,此时显示第1页
    SELECT employee_id, last_name
    FROM employees
    LIMIT 20;
    
    # 表里有107条数据,我们只想要显示第 32、33 条数据
    SELECT employee_id, last_name
    FROM employees
    LIMIT 2 OFFSET 31;
    

    MySQL 8.0中可以使用LIMIT 3 OFFSET 4,意思是获取从第5条记录开始后面的3条记录,和LIMIT 4, 3返回的结果相同。

  5. 分页显示公式

    (当前页数 - 1) * 每页条数,每页条数

    SELECT * FROM `table`
    LIMIT (PageNo - 1) * PageSize, PageSize;
    
    • 注意:LIMIT子句必须放在整个SELECT语句的最后。

    • 使用LIMIT的好处

      ​ 约束返回结果的数据可以减少数据表的网络传输,也可以提升查询效率。如果我们知道返回结果只有1条,就可以使用LIMIT 1,告诉SELECT语句只需返回一条记录即可,这样的好处就是SELECT不需要扫描完整的表,只需要检索到一条符合条件的记录即可返回。

5.2:拓展

​ 在不同的DBMS中使用的关键字可能不同。在MySQLPostgreSQLMariaDBSQLite中使用LIMIT关键字,而且需要放到SELECT语句的最后面。

  1. 如果是SQL ServerAccess,需要使用TOP关键字,比如:

    SELECT TOP 5 name, hp_max FROM heros ORDER BY hp_max DESC
    
  2. 如果是DB2,使用FETCH FIRST 5 ROWS ONLY这样的关键字

    SELECT name, hp_max FROM heros ORDER BY hp_max DESC FETCH FIRST 5 ROWS ONLY
    
  3. 如果是Oracle,你需要基于ROWNUM来统计行数

    SELECT rownum,last_name,salary FROM employees WHERE rownum < 5 ORDER BY salary DESC;
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值