• MySQL —— 排序,分页


    MySQL —— 排序,分页

    在这里插入图片描述

    每博一文案

    作家三毛曾说,我避开无事时,过分热络地友谊,这使我少些负担
    和承诺。我不多说所谓的闲言。这使我觉得清扬。
    我当心的去爱别人,因为比较不会泛滥。
    我爱哭的时候哭,我爱笑的时候笑,我不求深刻,只求简单。
    用自己喜欢的方式让自己高兴,这是我们普通人对生活最好的致敬。
    人生是一场旅程,路上难免有风雨清洗,但总会雨过天晴。
    有时候我们一个人走,不是孤独,而是因为选择明白自己想要什么
                                                        —————————— 一禅心灵庙语
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8


    排序

    • 通过 SELECT 命令显示的记录顺序是不规则的。默认情况下,查询返回的数据是按照添加数据的顺序显示的
    • 对查询的数据进行排序使用关键字 ORDER BY
    • 使用 ORDER BY 的子句进行排序
      • ASC (ascend)升序
      • DESC (descend) 降序
    • 默认使用 ORDER BY 是升序

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

    -- 对按照 salary 从高到低的顺序显示员工信息 
    SELECT employee_id, last_name, salary
    FROM employees
    ORDER BY salary DESC; -- DESC 降序
    
    • 1
    • 2
    • 3
    • 4

    结果 :

    在这里插入图片描述


    • 按照 salary 从低到高的顺序显示员工信息
    -- 按照 salary 从低到高的顺序显示员工信息
    SELECT employee_id, last_name, salary
    FROM employees
    ORDER BY salary ASC;  -- ASC 升序
    
    • 1
    • 2
    • 3
    • 4
    • 结果

    在这里插入图片描述


    或者使用默认的 ORDER BY 升序

    -- 按照 salary 从低到高的顺序显示员工信息
    SELECT employee_id,last_name, salary
    FROM employees
    ORDER BY salary 
    
    • 1
    • 2
    • 3
    • 4

    • 结果显示:

    在这里插入图片描述


    别名排序

    • 我们可以使用 别名 排序键 进行排序
    -- 按照 salary*12 年薪 别名排序
    SELECT employee_id, last_name, salary*12 AS '年薪'
    FROM employees
    ORDER BY '年薪' ASC;  -- ASC 升序
    
    • 1
    • 2
    • 3
    • 4
    • 结果:

    在这里插入图片描述


    • 注意 WHERE 中不可以使用别名,条件 筛选

    在这里插入图片描述


    NULL在排序中的显示位置

    • 排序列中存在 NULL ,会在开头或末尾汇总
    • ASC 升序中 NULL 显示在 开头 :如下:
    -- NULL 的排序顺序 —— ASC升序 放在第一行(开头)
    SELECT employee_id, last_name, manager_id
    FROM employees
    ORDER BY manager_id ASC; -- asc 升序
    
    • 1
    • 2
    • 3
    • 4

    结果显示

    在这里插入图片描述


    • DESC 降序中 NULL 显示在 末尾 如下
    -- NULL 的排序顺序 —— DESC 放在末尾
    SELECT employee_id, last_name, manager_id
    FROM employees
    ORDER BY manager_id DESC ; -- desc 降序
    
    • 1
    • 2
    • 3
    • 4
    • 结果显示
      在这里插入图片描述

    多列排序

    • 靠前的优先执行排序,在对多列排序 中的时候,首先排序的第一列必须存在相同的列值,才会 对第二列进行排序。如果第一列数据中所有值都是唯一的,将不再对第二列进行排序,以此类推,第三列,第四列都是这样只有前一个排序中存在相同,重复的后面的排序才会执行排序
    -- 显示员工信息,按照 department_id 降序,salary 升序 
    SELECT employee_id, last_name, department_id, salary
    FROM employees
    ORDER BY department_id DESC,salary ASC; -- DESC 降序,ASC 升序
    
    • 1
    • 2
    • 3
    • 4
    • 结果显示

    在这里插入图片描述


    筛选配合排序

    • 子句中的书写顺序

      • 1.SELECT 子句 ——> 2.FROM ——> 3.WHERE 子句 ——> 4.GROUP BY 子句 ——> 5.HAVING 子句 ——> 6. ORDER BY 子句
    • ORDER BY 子句通常在 SELECT 语句的末尾


    • 选择工资不在 8000 到 17000 的员工的姓名和工资,按工资升序
    -- 选择工资不在 8000 到 17000 的员工的姓名和工资,按工资升序
    SELECT employee_id, last_name, salary
    FROM employees
    WHERE salary BETWEEN 8000 AND 17000 
    ORDER BY salary ASC;  -- ASC 升序
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 结果显示

    在这里插入图片描述


    分页

    • 当我们查询返回的记录太多了时,一下子显示太多,查看起来很不方便,或者我们只是单纯的想看 几个记录而已,所以我们可以使用分页查询显示出来?
    • Mysql 中可以使用 LIMIT 进行对数据的分页显示出来。
    • 格式应用如下:
    LIMIT 偏移量, 每页的记录显示的条数
    
    • 1

    • 注意: 当偏移量为 0 的时候,我们可以省略它(偏移量)

    • 每页显示 20 条记录,显示第一页

    SELECT employee_id, last_name, salary
    FROM employees
    LIMIT 0,20;
    
    • 1
    • 2
    • 3

    结果显示:

    在这里插入图片描述


    我们省略偏移量 0 看看结果是不是一样的

    -- 每页显示 20 条记录,此时显示 第一页
    SELECT employee_id, last_name, salary
    FROM employees
    LIMIT 20;
    
    • 1
    • 2
    • 3
    • 4

    结果显示,发现结果省略偏移量 0 的结果是一样的

    在这里插入图片描述


    • 对于 LIMIT 的使用公式:
    -- 需求公式: 每页显示的记录个数设为 size , 此时显示的页数: n
    -- 偏移量等于: (n-1)*size, 每页显示记录个数为 size
    LIMIT (n-1)*size, size;
    
    • 1
    • 2
    • 3
    • 需求: 每页显示20个记录,此时显示的页数为 3的
    -- 需求: 每页显示20个记录,此时显示的页数为 3的
    SELECT employee_id, last_name, salary
    FROM employees
    LIMIT 40,20;
    
    • 1
    • 2
    • 3
    • 4

    结果显示

    在这里插入图片描述


    • LIMIT 配合其他的使用顺序

    WHERE ——> ORDER BY——> LIMIT


    • 需求 :显示工资大于 6000 ,的前10条记录信息
    -- 显示工资大于 6000 ,的前10条记录信息
    SELECT employee_id, last_name, salary
    FROM employees
    WHERE salary >= 6000
    LIMIT 10; -- 偏移量为 0 可以省略不写的
    
    • 1
    • 2
    • 3
    • 4
    • 5

    结果显示
    在这里插入图片描述


    • 显示第 32, 33的信息数据
    -- 显示 32,33条信息数据
    SELECT *
    FROM employees
    LIMIT 31,2; -- 需要减 1 ,因为偏移量是从 0 开始计数的
    
    • 1
    • 2
    • 3
    • 4

    结果显示

    在这里插入图片描述


    Mysql 8.0 新特性: LIMIT…OFFSET…

    • 其作用和 LIMIT 是一样的 ,分页功能的实现
    • 不同 的是与LIMIT 相反的格式:
    LIMIT 每页显示的记录个数 OFFSET 偏移量
    
    • 1
    • 所以千万 不要把 LIMITLIMIT…OFFSET… 之间混淆了,其结果是不一样的

    • LIMIT…OFFSET… 不可以省略 偏移量为 0 的时候,的 0
      在这里插入图片描述

    不省略偏移量 0 的结果

    SELECT employee_id,last_name, salary
    FROM employees
    LIMIT 10 OFFSET 0;
    
    • 1
    • 2
    • 3

    在这里插入图片描述


    分页 与 排序的综合练习

    • 查询员工表中工资最高的员工信息
      • 我们这里通过:降序——> 分页显示第一条记录——> 工资最高的员工信息
    -- 查询员工表中工资最高的员工信息
    SELECT employee_id, last_name,salary
    FROM employees
    ORDER BY salary DESC -- DESC 降序
    LIMIT 1; -- 偏移量为 0 可以省略不写
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    结果显示

    在这里插入图片描述


    • 查询员工信息和部门号和年薪,按年薪降序,按姓名升序显示,显示前 20条记录
    -- 查询员工信息和部门号和年薪,按年薪降序,按姓名升序显示,显示前 20条记录
    SELECT employee_id, last_name, salary *12 AS '年薪'
    FROM employees
    ORDER BY '年薪' DESC, last_name ASC -- desc 降序,asc 升序,第一排序存在相同,第二排序才会执行
    LIMIT 20; -- 偏移量为 0 可以省略
    
    • 1
    • 2
    • 3
    • 4
    • 5

    结果显示:

    在这里插入图片描述


    • 选择工资不在 8000 到 17000 的员工信息的姓名和工资,工资按照降序,显示第 21 到 40位置的数据
    -- 选择工资不在 8000 到 17000 的员工信息的姓名和工资,工资按照降序,显示第 21 到 40位置的数据
    SELECT employee_id, last_name,salary
    FROM employees
    WHERE salary NOT BETWEEN 8000 AND 17000
    ORDER BY salary DESC  -- desc 降序
    LIMIT 20,20;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    结果显示

    在这里插入图片描述


    • 查询邮箱中包含 e 的员工信息,并先按照邮箱的字节数降序,再按照部门号升序
    -- 查询邮箱中包含 e 的员工信息,并先按照邮箱的字节数降序,再按照部门号升序
    SELECT employee_id, last_name, email, department_id
    FROM employees
    WHERE email LIKE '%e%'
    ORDER BY LENGTH(email) DESC, department_id ASC;
    -- length() 计算字符串的个数,desc 降序,asc 升序  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    结果显示

    在这里插入图片描述


    • 或者使用正则表达式
    -- 查询邮箱中包含 e 的员工信息,并先按照邮箱的字节数降序,再按照部门号升序
    -- 使用正则表达式
    SELECT employee_id, last_name, email, department_id
    FROM employees
    WHERE email REGEXP '[e]' -- 筛选包含括号中的任意字符
    ORDER BY LENGTH(email) DESC, department_id ASC;
    -- length() 计算字符串的个数,desc降序,asc 升序
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    结果显示 是一样的

    在这里插入图片描述


    最后:

    限于自身水平,其中存在的错误,希望大家给予指教,韩信点兵——多多益善,谢谢大家,后会有期,江湖再见!

  • 相关阅读:
    后台管理---删除功能
    在Scrapy框架中使用隧道代理
    基于STM32的智能鱼缸设计
    Linux 磁盘管理,分区,文件系统
    26-大数据架构为什么要用kafka
    设计和前端相关工具
    [网络工程师]-传输层协议-TCP协议
    算数平均法和加权平均法
    RK3399平台开发系列讲解(内核调试篇)IO 数据工具:iostat和iotop
    麻省理工人工智能实验室新研究!有远见的机器学习方法:能预知未来行为的AI智能体
  • 原文地址:https://blog.csdn.net/weixin_61635597/article/details/125497190