MySQL —— 排序,分页

MySQL —— 排序,分页

MySQL —— 排序,分页_第1张图片

每博一文案

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

文章目录

  • MySQL —— 排序,分页
    • 每博一文案
    • 排序
      • 别名排序
      • NULL在排序中的显示位置
      • 多列排序
      • 筛选配合排序
    • 分页
      • Mysql 8.0 新特性: LIMIT...OFFSET...
    • 分页 与 排序的综合练习
    • 最后:


排序

  • 通过 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 降序

结果 :

MySQL —— 排序,分页_第2张图片


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

MySQL —— 排序,分页_第3张图片


或者使用默认的 ORDER BY 升序

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

  • 结果显示:

MySQL —— 排序,分页_第4张图片


别名排序

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

MySQL —— 排序,分页_第5张图片


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

MySQL —— 排序,分页_第6张图片


NULL在排序中的显示位置

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

结果显示

MySQL —— 排序,分页_第7张图片


  • DESC 降序中 NULL 显示在 末尾 如下
-- NULL 的排序顺序 —— DESC 放在末尾
SELECT employee_id, last_name, manager_id
FROM employees
ORDER BY manager_id DESC ; -- desc 降序
  • 结果显示
    MySQL —— 排序,分页_第8张图片

多列排序

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

MySQL —— 排序,分页_第9张图片


筛选配合排序

  • 子句中的书写顺序

    • 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 升序
  • 结果显示

MySQL —— 排序,分页_第10张图片


分页

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

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

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

SELECT employee_id, last_name, salary
FROM employees
LIMIT 0,20;

结果显示:

MySQL —— 排序,分页_第11张图片


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

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

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

MySQL —— 排序,分页_第12张图片


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

结果显示

MySQL —— 排序,分页_第13张图片


  • LIMIT 配合其他的使用顺序

WHERE ——> ORDER BY——> LIMIT


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

结果显示
MySQL —— 排序,分页_第14张图片


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

结果显示

MySQL —— 排序,分页_第15张图片


Mysql 8.0 新特性: LIMIT…OFFSET…

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

  • LIMIT…OFFSET… 不可以省略 偏移量为 0 的时候,的 0
    MySQL —— 排序,分页_第16张图片

不省略偏移量 0 的结果

SELECT employee_id,last_name, salary
FROM employees
LIMIT 10 OFFSET 0;

MySQL —— 排序,分页_第17张图片


分页 与 排序的综合练习

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

结果显示

MySQL —— 排序,分页_第18张图片


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

结果显示:

MySQL —— 排序,分页_第19张图片


  • 选择工资不在 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;

结果显示

MySQL —— 排序,分页_第20张图片


  • 查询邮箱中包含 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 升序  

结果显示

MySQL —— 排序,分页_第21张图片


  • 或者使用正则表达式
-- 查询邮箱中包含 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 升序

结果显示 是一样的

MySQL —— 排序,分页_第22张图片


最后:

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

你可能感兴趣的:(SQL语法学习,mysql,数据库)